From b8a9da0c0f9f0b2b022a350d2c7c671d1fa3f886 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Mon, 10 Aug 2026 02:28:11 +0800 Subject: [PATCH] refactor(mcp): make analysis states unrepresentable (#468) * refactor(config): parse capability settings into exact states * refactor(runtime): encode replay and process outcomes exactly * refactor: make analysis states unrepresentable * refactor(mcp): register canonical schemas with SDK * fix: preserve capability and catalog invariants * fix(build): remove stale compiled modules * fix(replay): update real verifier policy dependency * fix(package): verify the complete MCP catalog * fix(test): supply complete replay reload policy * refactor(contracts): centralize output schema lookup * refactor(mcp): delegate protocol boundaries to SDK * fix(browser): approve real source capture * fix(mcp): preserve catalog guidance --- docs/product-catalog.json | 4 +- .../managed-conformance-manifest.json | 4 +- package.json | 2 +- scripts/clean-build-output.mjs | 10 + scripts/generate-mcp-tool-catalog.mjs | 49 +- scripts/lib/verify-package-core.mjs | 11 +- scripts/verify-managed-conformance.mjs | 6 +- scripts/verify-package-mcp.mjs | 34 +- scripts/verify-real-browser.mjs | 1 + scripts/verify-real-javascript-replay.mjs | 34 +- scripts/verify-windows-package.mjs | 4 +- skills/reverse-engineer-anything/SKILL.md | 2 +- .../ApplicationWorkflowEvidenceResolver.ts | 61 ++- src/application/ArtifactInventory/policy.ts | 41 ++ src/application/ArtifactInventory/reader.ts | 12 +- .../ArtifactInventory/scanCanonical.ts | 8 - .../ArtifactInventory/scanReader.ts | 24 +- src/application/ArtifactInventory/types.ts | 29 +- src/application/BinarySession.ts | 36 +- src/application/BinarySessionStatus.ts | 20 +- src/application/BrowserEvidence.ts | 10 +- .../CapabilityClientRequirements.ts | 47 ++ src/application/CapabilityInventory.ts | 230 ++++---- src/application/CrossVersionInventory.ts | 16 +- src/application/CrossVersionInvestigation.ts | 2 +- src/application/EnhancedTools.ts | 51 +- .../InventoryProjectionEvidence.ts | 4 +- src/application/JavaScriptReplayPermission.ts | 12 +- src/application/JavaScriptReplayPlanning.ts | 32 +- src/application/JavaScriptReplayService.ts | 80 +-- .../ManagedRuntimeCorrelationService.ts | 31 +- .../NodeRuntimeCharacterizationService.ts | 33 +- src/application/ProcessCaptureAuthority.ts | 4 +- src/application/ProcessCaptureLifecycle.ts | 5 + src/application/ProcessCli.ts | 3 +- src/artifacts/ArtifactProvider.ts | 27 +- src/artifacts/SafeOutputTree.ts | 29 +- src/browser/CdpCaptureStorage.ts | 2 +- src/browser/CdpCaptureStorageFingerprints.ts | 32 +- src/browser/CdpElectronInspection.ts | 4 +- src/catalogIdentity.ts | 18 +- src/cli/managedCommands.ts | 2 +- src/cliApplicationCommands.ts | 4 +- src/cliBrowserAdvancedCommands.ts | 26 +- src/cliBrowserCommands.ts | 31 +- src/cliElectronCommands.ts | 36 +- src/cliJavaScriptRuntimeCommands.ts | 32 +- src/cliObservationOptions.ts | 4 + src/cliOutput.ts | 2 +- src/config/browserScenario.ts | 148 +++++ src/config/electronAutomation.ts | 73 +-- src/config/javascriptReplay.ts | 64 +++ src/config/managedRuntime.ts | 41 ++ src/config/parseConfig.ts | 422 +++------------ src/config/parsers.ts | 14 +- src/config/passiveObservation.ts | 294 ++++++++++ src/config/processCapture.ts | 79 +++ src/config/types.ts | 52 +- src/contracts/applicationToolContracts.ts | 44 +- .../applicationWorkflowInputContracts.ts | 255 +++++---- src/contracts/artifactToolContracts.ts | 88 ++- src/contracts/browserToolContracts.ts | 4 +- src/contracts/enhancedInputs.ts | 43 +- .../functionWorkflowToolContracts.ts | 9 +- src/contracts/managedToolContracts.ts | 25 +- src/contracts/managedWorkflowExamples.ts | 21 +- src/contracts/managedWorkflowToolContracts.ts | 91 ++-- src/contracts/nativeToolContracts.ts | 13 +- src/contracts/toolContractTypes.ts | 14 +- src/contracts/toolContracts.ts | 54 +- src/contracts/toolEffects.ts | 1 + src/contracts/toolOutputSchemaPrimitives.ts | 116 ++-- src/contracts/toolSchemaJsonOverrides.ts | 155 ------ src/contracts/toolSchemaMetadata.ts | 156 ++++++ src/doctorRuntime.ts | 2 +- src/domain/androidApplication.ts | 2 + src/domain/appleApplication.ts | 2 + src/domain/binaryTarget.ts | 81 ++- src/domain/binaryTargetTypes.ts | 65 +++ src/domain/browserCaptureComparison.ts | 107 +--- src/domain/browserObservation.ts | 215 ++++---- src/domain/callPath.ts | 5 +- src/domain/customProtocolCapture.ts | 6 +- src/domain/electronObservation.ts | 88 +-- src/domain/electronStaticAnalysisValues.ts | 5 +- src/domain/eventProcessTree.ts | 3 +- src/domain/functionComparisonNormalization.ts | 25 +- src/domain/functionDossierEvidence.ts | 30 +- src/domain/hopperValues.ts | 117 ++-- src/domain/inputIssueProjection.ts | 7 +- src/domain/investigationWorkspace.ts | 57 +- src/domain/javascriptReplay.ts | 219 ++++---- .../javascriptRuntimeReconciliationGraph.ts | 33 +- ...javascriptRuntimeReconciliationMatching.ts | 112 ++-- .../javascriptRuntimeReconciliationResult.ts | 41 +- src/domain/knownPageCoverage.ts | 36 +- src/domain/nativeApiBoundary.ts | 52 +- src/domain/nodeRuntimeCharacterization.ts | 31 +- .../processCaptureReactiveValidation.ts | 13 +- src/domain/processCaptureValidation.ts | 22 +- src/domain/processComparison.ts | 5 +- src/domain/processObservation.ts | 12 +- src/domain/processReactiveMatching.ts | 30 +- src/domain/processReactiveTransition.ts | 14 +- src/domain/processScenario.ts | 31 +- src/domain/processTraceComparison.ts | 5 +- src/domain/protocolCapture.ts | 15 +- src/domain/replayMachineRuntime.ts | 8 +- src/domain/sourceToBundleComparison.ts | 10 +- src/domain/sourceToBundleComparisonSchemas.ts | 16 +- src/domain/sourceToBundleSignals.ts | 11 +- src/domain/staticRuntimeCorrelation.ts | 20 +- src/domain/webBundleAnalysis.ts | 29 +- src/domain/webCaptureDiff.ts | 29 +- src/dotnet/ManagedNativeBoundaryInspector.ts | 4 +- src/generatedMcpToolCatalog.ts | 2 +- src/ghidra/GhidraClient.ts | 2 +- src/ghidra/GhidraClientStartup.ts | 2 +- src/ghidra/GhidraFunctionValues.ts | 41 +- src/ghidra/GhidraInventoryValues.ts | 45 +- src/ghidra/GhidraLauncher.ts | 6 +- src/ghidra/GhidraProvider.ts | 13 +- src/ghidra/GhidraSocketConnection.ts | 2 +- src/ghidra/protocol.ts | 54 +- src/hopper/BridgeLauncher.ts | 14 +- src/hopper/HopperAnalysisProfile.ts | 8 +- src/hopper/HopperCleanup.ts | 14 +- src/hopper/HopperClient.ts | 2 +- src/hopper/HopperDiagnostics.ts | 8 +- src/hopper/HopperProvider.ts | 14 - src/hopper/LinuxPrivateDisplayProbe.ts | 36 +- src/main.ts | 47 +- src/main/reload.ts | 27 +- src/main/state.ts | 24 - src/main/transport.ts | 106 ++-- src/main/types.ts | 3 + src/mcpDoctor.ts | 26 +- src/process/ProcessOwnership.ts | 6 +- src/process/ProviderDeadline.ts | 21 +- src/process/ProviderProcess.ts | 19 +- src/reference/ReferenceSourceReader.ts | 6 +- src/reference/ReferenceSourceReaderEntries.ts | 4 +- src/reference/ReferenceSourceReaderTypes.ts | 2 +- src/replay/JavaScriptReplayWorker.ts | 185 ++++--- src/replay/JavaScriptReplayWorkerTypes.ts | 50 ++ src/replay/LinuxJavaScriptReplayRunner.ts | 40 +- src/replay/LinuxJavaScriptReplaySandbox.ts | 4 +- src/replay/ReplayOutcome.ts | 43 +- src/replay/ReplayWorkerProtocol.ts | 86 +-- src/replay/SystemJavaScriptReplayHost.ts | 4 +- src/server/DynamicToolAvailability.ts | 98 ---- src/server/LazyToolCatalog.ts | 181 ------- src/server/ProcessCaptureElicitation.ts | 10 +- src/server/createServer.ts | 335 ++++++------ src/server/hydrateServerTools.ts | 298 ---------- src/server/mcpClientMetadata.ts | 56 ++ src/server/mcpProgress.ts | 16 +- .../characterization.ts | 29 +- .../compareExportShapes.ts | 12 +- .../compareSourceToBundle.ts | 12 +- .../compareVersions.ts | 15 +- .../controlledReplay.ts | 25 +- .../registerApplicationTools/coverage.ts | 51 +- .../obligationLedger.ts | 12 +- .../registerApplicationTools/readiness.ts | 10 +- .../registerApplicationTools/traceFeature.ts | 14 +- .../traceSemantics.ts | 10 +- src/server/registerArtifactComparisonTool.ts | 37 +- src/server/registerBrowserScenarioTool.ts | 10 +- src/server/registerBrowserTools.ts | 295 +++++----- src/server/registerBundleComparisonTool.ts | 41 +- src/server/registerCloseLifecycleTool.ts | 25 +- src/server/registerElectronTools.ts | 256 ++++----- src/server/registerEnhancedTools.ts | 507 ++++++++---------- src/server/registerEvidenceTools.ts | 25 +- src/server/registerFunctionComparisonTool.ts | 37 +- src/server/registerInvestigationTools.ts | 169 +++--- ...gisterJavaScriptRuntimeObservationTools.ts | 118 ++-- .../compareManagedMembers.ts | 17 +- .../registerManagedWorkflowTools/contract.ts | 21 +- .../importManagedReconstruction.ts | 15 +- .../planManagedRuntimeCorrelation.ts | 15 +- .../projectManagedApplicationGraph.ts | 24 +- .../verifyManagedNativeBoundaries.ts | 17 +- src/server/registerOfficialTools.ts | 48 +- src/server/registerProcessComparisonTool.ts | 51 +- src/server/registerReplayMachineTool.ts | 22 +- src/server/registerSessionRecordTools.ts | 114 +--- src/server/registerSessionStatusTool.ts | 49 +- src/server/registerSessionTools.ts | 136 ++--- src/server/runDerivedOperation.ts | 20 +- src/server/sessionAvailabilityPolicy.ts | 2 +- src/server/sessionToolPolicies.ts | 6 +- src/server/toolInputValidation.ts | 129 ----- src/server/toolRegistrationOptions.ts | 270 +--------- src/server/toolResult.ts | 33 +- .../applications/applicationReplayMcp.test.ts | 9 +- tests/acceptance/applications/runtime.test.ts | 5 +- ...cdpBrowserProvider.document_script.test.ts | 2 + .../filesystem/safeOutputTree.test.ts | 15 +- tests/boundary/mcp/browserMcp.test.ts | 19 +- tests/boundary/mcp/electronMcp.test.ts | 2 +- ...ools.05-stops-trace-feature-at-its.test.ts | 52 +- tests/boundary/mcp/ghidraRoutingMcp.test.ts | 2 +- tests/boundary/mcp/mainErrors.test.ts | 25 + tests/boundary/mcp/mainReload.test.ts | 109 +++- tests/boundary/mcp/managedMcp.test.ts | 6 +- tests/boundary/mcp/mcpDoctor.test.ts | 2 +- .../mcp/processCaptureElicitation.test.ts | 31 +- .../processCaptureElicitationPart2.test.ts | 8 +- tests/boundary/mcp/replayMachineMcp.test.ts | 6 +- tests/boundary/mcp/serverIdentity.test.ts | 60 ++- tests/boundary/mcp/serverLifecycleMcp.test.ts | 25 + tests/boundary/mcp/serverWorkflowMcp.test.ts | 93 +--- tests/boundary/mcp/sessionMcp.test.ts | 12 +- .../mcp/toolRegistrationOptions.test.ts | 188 +++++-- tests/boundary/mcp/toolResult.test.ts | 25 - ...riptRuntimeReconciliationAmbiguity.test.ts | 5 +- .../process/processCaptureLifecycle.test.ts | 26 +- .../process/processCaptureMultisource.test.ts | 4 +- .../process/processCaptureObservation.test.ts | 12 +- .../process/processCaptureReactive.test.ts | 8 +- .../processCaptureReplayMachine.test.ts | 8 +- .../process/processCaptureTerminal.test.ts | 4 +- .../boundary/process/providerProcess.test.ts | 7 +- .../providers/ghidra/ghidraProvider.test.ts | 58 +- .../hopper/hopperAnalysisProfile.test.ts | 36 +- .../hopper/hopperClient.cleanup.test.ts | 48 +- .../hopper/hopperClient.progress.test.ts | 3 +- .../hopper/hopperClient.protocol.test.ts | 3 +- .../hopper/hopperClient.restart.test.ts | 3 +- .../hopperClient.startupFailures.test.ts | 12 +- .../hopper/linuxPrivateDisplay.test.ts | 3 +- .../managed/managedApplicationGraph.test.ts | 2 + ...anagedArtifactProvider.cilDecoding.test.ts | 2 + .../managedArtifactProvider.cilLimits.test.ts | 2 + .../managedArtifactProvider.failures.test.ts | 8 +- .../managedArtifactProvider.inventory.test.ts | 2 + .../managedArtifactProvider.members.test.ts | 2 + ...dArtifactProvider.nativeBoundaries.test.ts | 2 + .../managed/managedMemberComparison.test.ts | 3 + .../artifactProvider.archiveInventory.test.ts | 6 +- .../artifactProvider.archiveSafety.test.ts | 6 +- ...rtifactProvider.directoryInventory.test.ts | 6 +- .../artifactProvider.extraction.test.ts | 6 +- ...tifactProvider.paginationAndSlices.test.ts | 6 +- .../native/nativeApiInspection.test.ts | 27 + .../providers/replay/javascriptReplay.test.ts | 116 +++- .../replay/javascriptReplayWorker.test.ts | 14 + .../replay/replayWorkerProtocol.test.ts | 16 +- .../artifactInventoryPolicy.test.ts | 41 ++ .../capabilityInventory.test.ts | 28 +- .../contractSnapshot.test.ts | 18 +- .../contractValidation.test.ts | 41 +- .../crossVersionInventory.test.ts | 3 - .../hopperProviderSelection.test.ts | 41 +- .../analysis-sessions/identity.test.ts | 2 +- .../toolSchemaJsonOverrides.test.ts | 103 ---- .../investigationWorkspaceMigration.test.ts | 8 +- .../webBundleAnalyzer.test.ts | 2 +- .../processPairedExperiment.test.ts | 11 +- .../javascriptRuntimeReconciliation.test.ts | 5 +- .../managedRuntimeCorrelation.test.ts | 29 +- .../nodeRuntimeCharacterization.test.ts | 15 +- .../setup-lifecycle/browserConfig.test.ts | 76 ++- .../setup-lifecycle/capabilityFlags.test.ts | 20 + .../setup-lifecycle/config.test.ts | 114 ++-- .../passiveObservationConfig.test.ts | 153 ++++++ .../processCaptureConfig.test.ts | 43 ++ .../providers/coverageMonotonicity.test.ts | 2 + turbo.json | 1 + 271 files changed, 5970 insertions(+), 5699 deletions(-) create mode 100644 scripts/clean-build-output.mjs create mode 100644 src/application/ArtifactInventory/policy.ts create mode 100644 src/application/CapabilityClientRequirements.ts create mode 100644 src/config/browserScenario.ts create mode 100644 src/config/javascriptReplay.ts create mode 100644 src/config/managedRuntime.ts create mode 100644 src/config/passiveObservation.ts create mode 100644 src/config/processCapture.ts delete mode 100644 src/contracts/toolSchemaJsonOverrides.ts create mode 100644 src/contracts/toolSchemaMetadata.ts create mode 100644 src/domain/binaryTargetTypes.ts create mode 100644 src/replay/JavaScriptReplayWorkerTypes.ts delete mode 100644 src/server/DynamicToolAvailability.ts delete mode 100644 src/server/LazyToolCatalog.ts delete mode 100644 src/server/hydrateServerTools.ts create mode 100644 src/server/mcpClientMetadata.ts delete mode 100644 src/server/toolInputValidation.ts create mode 100644 tests/composition/analysis-sessions/artifactInventoryPolicy.test.ts delete mode 100644 tests/composition/analysis-sessions/toolSchemaJsonOverrides.test.ts create mode 100644 tests/composition/setup-lifecycle/capabilityFlags.test.ts create mode 100644 tests/composition/setup-lifecycle/passiveObservationConfig.test.ts create mode 100644 tests/composition/setup-lifecycle/processCaptureConfig.test.ts diff --git a/docs/product-catalog.json b/docs/product-catalog.json index 5fb1b1d16..9064b3901 100644 --- a/docs/product-catalog.json +++ b/docs/product-catalog.json @@ -680,10 +680,10 @@ "mcp_resource_templates": 11 }, "digests": { - "tools_sha256": "8021786c901ca9225ba8e2477f220c8c15d61b8df5618b221f61417cae8c8a36", + "tools_sha256": "b0e8b9c894ef347b6680a3a5bfdb4cba5c10e9129eeaa43a5ea22ce4d398d417", "prompts_sha256": "3886a3bf55a448def79e3eb429e6a56eb2ba075423c5cb1e5747642b389ef8fe", "resources_sha256": "e0e872276ebf6f88e916ef24930a99eed27ce4c93e494e60820e9bd8cc8497c3", - "combined_sha256": "2da444fd95a40c28a6c0332a5970edca6b984f0c2922e4c02eaf7458a6f3dd0e", + "combined_sha256": "bab5657d9525ec4f798d0a9ef6001412d9c11f77fb0ddc925c7076fd10921dc9", "providers_sha256": "7446b51788734ebf6f4f702e3a5a8c9f0b61967490c245f30bd37b2060827e6b" } } diff --git a/docs/verification/managed-conformance-manifest.json b/docs/verification/managed-conformance-manifest.json index 55909b7d9..30d8c3906 100644 --- a/docs/verification/managed-conformance-manifest.json +++ b/docs/verification/managed-conformance-manifest.json @@ -1,6 +1,6 @@ { "schema_version": 1, - "manifest_id": "ecm_aba877529714e59795e8a7b51c5513b17081bd701cea1ffee31422a1d95dfa31", + "manifest_id": "ecm_c44391ed8e365e21871664422aa38fa6c12598006cde731d65a9d9e271b0fa5f", "verifier": { "id": "rea-managed-conformance", "version": "1" @@ -14,7 +14,7 @@ "skill_digests": [ { "skill_id": "reverse-engineer-anything", - "sha256": "43fccde70ab600dfc86785a37b414865cb8c0f2cb479eb4ed6c2a90998e0f6a6" + "sha256": "97a5bc5d29f162fe171ddbb8f4f5ba9fcba34ad336d4cdcae0c564223aa4cfe8" } ], "claims": [ diff --git a/package.json b/package.json index 6b5a4848a..03d05551d 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "mcp-registry:check": "node scripts/verify-mcp-registry-metadata.mjs", "mcp-catalog:generate": "npm run build:cached && node scripts/generate-mcp-tool-catalog.mjs", "mcp-catalog:check": "node scripts/generate-mcp-tool-catalog.mjs --check", - "prebuild": "npm run deps:check && npm run metadata:check", + "prebuild": "npm run deps:check && npm run metadata:check && node scripts/clean-build-output.mjs", "build": "tsc -p tsconfig.build.json", "precheck": "npm run deps:check", "check": "turbo run typecheck lint format:check knip metadata:check", diff --git a/scripts/clean-build-output.mjs b/scripts/clean-build-output.mjs new file mode 100644 index 000000000..06284098a --- /dev/null +++ b/scripts/clean-build-output.mjs @@ -0,0 +1,10 @@ +import { rm } from "node:fs/promises"; +import { dirname, join } from "node:path"; +import { fileURLToPath } from "node:url"; + +const root = join(dirname(fileURLToPath(import.meta.url)), ".."); + +await Promise.all([ + rm(join(root, "dist"), { recursive: true, force: true }), + rm(join(root, ".cache", "tsconfig.build.tsbuildinfo"), { force: true }), +]); diff --git a/scripts/generate-mcp-tool-catalog.mjs b/scripts/generate-mcp-tool-catalog.mjs index 006220951..478f46699 100644 --- a/scripts/generate-mcp-tool-catalog.mjs +++ b/scripts/generate-mcp-tool-catalog.mjs @@ -1,6 +1,8 @@ import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; import { format } from "prettier"; +import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; +import { McpServer } from "@modelcontextprotocol/server"; import { TOOL_CONTRACTS } from "../dist/contracts/toolContracts.js"; import { MANAGED_WORKFLOW_TOOL_CONTRACTS } from "../dist/contracts/managedWorkflowToolContracts.js"; @@ -8,7 +10,6 @@ import { ArtifactProvider } from "../dist/artifacts/ArtifactProvider.js"; import { ManagedStaticProvider } from "../dist/dotnet/ManagedStaticProvider.js"; import { NativeMacOSProvider } from "../dist/native/NativeMacOSProvider.js"; import { toolRegistrationOptions } from "../dist/server/toolRegistrationOptions.js"; -import { applyToolInputJsonSchemaOverride } from "../dist/contracts/toolSchemaJsonOverrides.js"; import { ensureGeneratedFile } from "./lib/generated-file.mjs"; const arguments_ = new Set(process.argv.slice(2)); @@ -26,8 +27,11 @@ const sessionToolNames = new Set([ ), ...MANAGED_WORKFLOW_TOOL_CONTRACTS.map(({ name }) => name), ]); +const advertisedTools = await sdkToolCatalog(); const catalog = TOOL_CONTRACTS.map((contract) => { - const options = toolRegistrationOptions(contract); + const advertised = advertisedTools.get(contract.name); + if (advertised === undefined) + throw new Error(`MCP SDK omitted registered tool ${contract.name}`); return { name: contract.name, analysisOperation: [ @@ -39,23 +43,40 @@ const catalog = TOOL_CONTRACTS.map((contract) => { ].includes(contract.kind) ? contract.name : null, - title: options.title, - description: options.description, + title: advertised.title, + description: advertised.description, kind: contract.kind, requiresSession: sessionToolNames.has(contract.name), - inputSchema: applyToolInputJsonSchemaOverride( - contract.name, - options.inputSchema["~standard"].jsonSchema.input({ - target: "draft-2020-12", - }), - ), - outputSchema: options.outputSchema["~standard"].jsonSchema.output({ - target: "draft-2020-12", - }), - annotations: options.annotations, + inputSchema: advertised.inputSchema, + outputSchema: advertised.outputSchema, + annotations: advertised.annotations, effects: contract.effects, }; }); + +async function sdkToolCatalog() { + const server = new McpServer({ name: "rea-catalog-generator", version: "0" }); + for (const contract of TOOL_CONTRACTS) + server.registerTool( + contract.name, + toolRegistrationOptions(contract), + async () => ({ + content: [{ type: "text", text: "Catalog-only handler" }], + isError: true, + }), + ); + const client = new Client({ name: "rea-catalog-generator", version: "0" }); + const [clientTransport, serverTransport] = + InMemoryTransport.createLinkedPair(); + try { + await server.connect(serverTransport); + await client.connect(clientTransport); + const { tools } = await client.listTools(); + return new Map(tools.map((tool) => [tool.name, tool])); + } finally { + await Promise.allSettled([client.close(), server.close()]); + } +} const auxiliaryProviders = [ new ArtifactProvider(false, false), new NativeMacOSProvider(undefined, CATALOG_PLATFORM), diff --git a/scripts/lib/verify-package-core.mjs b/scripts/lib/verify-package-core.mjs index 260b17ee8..a4978eb3f 100644 --- a/scripts/lib/verify-package-core.mjs +++ b/scripts/lib/verify-package-core.mjs @@ -28,8 +28,8 @@ export const runWithStatus = async (command, args, env) => { /** Parse JSON from a command output string. */ export const json = (text) => JSON.parse(text); -/** Verify that the advertised MCP catalog matches the session's available tools. */ -export const verifyAvailableToolCatalog = async (client, options) => { +/** Verify that the complete advertised MCP catalog matches session metadata. */ +export const verifyCompleteToolCatalog = async (client, options) => { const listed = await client.listTools(undefined, options); const status = await client.callTool( { name: "binary_session", arguments: { detail: "full" } }, @@ -38,14 +38,11 @@ export const verifyAvailableToolCatalog = async (client, options) => { const availability = status.structuredContent?.result?.tool_availability; if (!Array.isArray(availability)) throw new Error("packaged MCP omitted tool availability"); - const expected = availability - .filter(({ available }) => available === true) - .map(({ name }) => name) - .sort(); + const expected = availability.map(({ name }) => name).sort(); const observed = listed.tools.map(({ name }) => name).sort(); if (JSON.stringify(observed) !== JSON.stringify(expected)) throw new Error( - "packaged MCP tool inventory diverged from session availability", + "packaged MCP tool inventory diverged from session metadata", ); return observed; }; diff --git a/scripts/verify-managed-conformance.mjs b/scripts/verify-managed-conformance.mjs index 0448b7628..8c71bbf40 100644 --- a/scripts/verify-managed-conformance.mjs +++ b/scripts/verify-managed-conformance.mjs @@ -344,11 +344,11 @@ try { assert.equal(reconstructionImport.value.confidence, "inferred"); const runtimePlan = await planManagedRuntimeCorrelationEvidence( { - policy: { - enabled: true, + policy: () => ({ + status: "enabled", roots: [workspace], executablePath: runtimeExecutable, - }, + }), authority: runtimeAuthority.value, }, { diff --git a/scripts/verify-package-mcp.mjs b/scripts/verify-package-mcp.mjs index 4a91cfbd8..35fdf43d6 100644 --- a/scripts/verify-package-mcp.mjs +++ b/scripts/verify-package-mcp.mjs @@ -7,15 +7,12 @@ import { Client } from "@modelcontextprotocol/client"; import { StdioClientTransport } from "@modelcontextprotocol/client/stdio"; import { MCP_STARTUP_POLICY } from "../dist/mcpStartupPolicy.js"; import * as prompts from "./verify-package-prompts.mjs"; -import { - json, - verifyAvailableToolCatalog, -} from "./lib/verify-package-core.mjs"; +import { json, verifyCompleteToolCatalog } from "./lib/verify-package-core.mjs"; const execute = promisify(execFile); const verifyMcpToolsAndPrompts = async (client, mcpOptions) => { - await verifyAvailableToolCatalog(client, mcpOptions); + await verifyCompleteToolCatalog(client, mcpOptions); await prompts.verifyPromptCatalog(client, mcpOptions, prompts.names); await prompts.verifyPromptCompletion(client, mcpOptions, false); }; @@ -43,11 +40,21 @@ const verifyMcpReplay = async (client, mcpOptions, investigationReplay) => { }; const verifyMcpTargetFree = async (client, mcpOptions) => { - const names = (await client.listTools(undefined, mcpOptions)).tools.map( - ({ name }) => name, + const status = await client.callTool( + { name: "binary_session", arguments: { detail: "full" } }, + mcpOptions, ); - if (names.includes("current_document")) - throw new Error("packaged target-free MCP advertised a target-bound tool"); + const currentDocument = + status.structuredContent?.result?.tool_availability?.find( + ({ name }) => name === "current_document", + ); + if ( + currentDocument?.available !== false || + currentDocument.reason !== "target_required" + ) + throw new Error( + "packaged target-free MCP omitted target-bound availability metadata", + ); }; const verifyMcpUnknownProvider = async (client, mcpOptions) => { @@ -96,11 +103,12 @@ const verifyMcpOpenAndBind = async (client, mcpOptions) => { }; const verifyMcpLinuxToolAvailability = async (client, mcpOptions) => { - const names = (await client.listTools(undefined, mcpOptions)).tools.map( - ({ name }) => name, + const current = await client.callTool( + { name: "current_document", arguments: {} }, + mcpOptions, ); - if (names.includes("current_document")) - throw new Error("packaged Linux MCP advertised unavailable Hopper tools"); + if (current.isError !== true) + throw new Error("packaged Linux MCP executed an unavailable Hopper tool"); }; const verifyMcpNonLinuxCurrentDocument = async ( diff --git a/scripts/verify-real-browser.mjs b/scripts/verify-real-browser.mjs index aef0e80ae..8045e2863 100644 --- a/scripts/verify-real-browser.mjs +++ b/scripts/verify-real-browser.mjs @@ -114,6 +114,7 @@ try { observation_ms: 1_000, include_accessibility_text: true, include_script_sources: true, + source_capture_approved: true, include_console_text: true, console_text_approved: true, include_json_body_shapes: true, diff --git a/scripts/verify-real-javascript-replay.mjs b/scripts/verify-real-javascript-replay.mjs index cb89a44ce..5852536c4 100644 --- a/scripts/verify-real-javascript-replay.mjs +++ b/scripts/verify-real-javascript-replay.mjs @@ -52,7 +52,7 @@ const roots = [ ), ]; const policy = { - enabled: true, + status: "enabled", roots, nodePath: process.execPath, bubblewrapPath: @@ -93,7 +93,7 @@ const authority = new PermissionAuthority( ), ); const dependencies = { - policy, + policy: () => policy, host: new SystemJavaScriptReplayHost(), runner: new LinuxJavaScriptReplayRunner(), authority, @@ -131,18 +131,20 @@ const defaultInput = { { case_id: "plain", arguments: ["plain"] }, ], generator: { preset: "parser-boundaries", seed: 7, count: 4 }, - approved: false, }; -const input = +const suppliedPlanInput = suppliedInput === undefined + ? undefined + : (({ approved: _approved, plan_digest: _planDigest, ...planInput }) => + planInput)(suppliedInput); +const input = + suppliedPlanInput === undefined ? defaultInput : { - ...suppliedInput, + ...suppliedPlanInput, mode: "plan", left: suppliedLeft, ...(suppliedRight === undefined ? {} : { right: suppliedRight }), - approved: false, - plan_digest: undefined, reproducer_export: undefined, }; @@ -177,7 +179,21 @@ if ( ({ status }) => status === "unknown", ) === true ) - throw new Error("Real replay verifier received incomplete Evidence"); + throw new Error( + `Real replay verifier received incomplete Evidence: ${JSON.stringify({ + authority: evidence?.authority ?? null, + isolation: evidence?.environment?.isolation ?? null, + termination: evidence?.normalized_result?.termination ?? null, + cleanup: evidence?.normalized_result?.cleanup?.state ?? null, + outcomes: + evidence?.normalized_result?.outcomes?.map(({ outcome }) => outcome) ?? + [], + stderr: evidence?.normalized_result?.stderr ?? null, + comparison_statuses: + evidence?.normalized_result?.comparison?.map(({ status }) => status) ?? + [], + })}`, + ); if (suppliedInput !== undefined) { process.stdout.write( @@ -222,7 +238,6 @@ const runSingle = async (path, limits = undefined) => { }, cases: [{ case_id: "probe", arguments: [] }], ...(limits === undefined ? {} : { limits }), - approved: false, }; const proposed = await runControlledReplay(dependencies, manifest); if (!proposed.ok || proposed.value.plan === null) @@ -288,7 +303,6 @@ const differentialTimeoutInput = { }, cases: [{ case_id: "probe", arguments: [] }], limits: { wall_time_ms: 100 }, - approved: false, }; const differentialTimeoutPlan = await runControlledReplay( dependencies, diff --git a/scripts/verify-windows-package.mjs b/scripts/verify-windows-package.mjs index 03e1baa7c..37d8753ef 100644 --- a/scripts/verify-windows-package.mjs +++ b/scripts/verify-windows-package.mjs @@ -9,7 +9,7 @@ import { promisify } from "node:util"; import { Client } from "@modelcontextprotocol/client"; import { StdioClientTransport } from "@modelcontextprotocol/client/stdio"; -import { verifyAvailableToolCatalog } from "./lib/verify-package-core.mjs"; +import { verifyCompleteToolCatalog } from "./lib/verify-package-core.mjs"; import { completeVerifierRun, createVerifierRun } from "./lib/verifier-run.mjs"; const exec = promisify(execFile); @@ -84,7 +84,7 @@ try { let toolCount = 0; try { await client.connect(server); - toolCount = (await verifyAvailableToolCatalog(client)).length; + toolCount = (await verifyCompleteToolCatalog(client)).length; } finally { await client.close(); } diff --git a/skills/reverse-engineer-anything/SKILL.md b/skills/reverse-engineer-anything/SKILL.md index 653c4634b..4a9e912ac 100644 --- a/skills/reverse-engineer-anything/SKILL.md +++ b/skills/reverse-engineer-anything/SKILL.md @@ -4,7 +4,7 @@ description: Reverse engineer native, managed, Electron/JavaScript, packaged, an metadata: version: "23" tool_count: 116 - catalog_digest: "2da444fd95a40c28a6c0332a5970edca6b984f0c2922e4c02eaf7458a6f3dd0e" + catalog_digest: "bab5657d9525ec4f798d0a9ef6001412d9c11f77fb0ddc925c7076fd10921dc9" --- # REA diff --git a/src/application/ApplicationWorkflowEvidenceResolver.ts b/src/application/ApplicationWorkflowEvidenceResolver.ts index 7cd1bd2ee..4e6bbb030 100644 --- a/src/application/ApplicationWorkflowEvidenceResolver.ts +++ b/src/application/ApplicationWorkflowEvidenceResolver.ts @@ -12,6 +12,7 @@ import { type TraceApplicationFeatureRequest, type TraceJavaScriptSemanticsRequest, } from "../contracts/applicationWorkflowInputContracts.js"; +import type { Evidence } from "../domain/evidence.js"; import { AnalysisInputError, type AnalysisError } from "../domain/errors.js"; import { projectInputIssues } from "../domain/inputIssueProjection.js"; import { compareApplicationVersionsInputSchema } from "../domain/javascriptApplicationVersionComparisonSchemas.js"; @@ -69,11 +70,7 @@ export const resolveTraceApplicationFeatureRequestValidated = ( input: TraceApplicationFeatureRequest, lookup?: EvidenceLookup, ): Result => { - const application = graphEvidence( - input.application, - input.application_evidence_id, - lookup, - ); + const application = graphEvidence(input, lookup); if (!application.ok) return application; const native = resolveEvidenceReferences( lookup, @@ -109,11 +106,7 @@ export const resolveTraceJavaScriptSemanticsRequestValidated = ( input: TraceJavaScriptSemanticsRequest, lookup?: EvidenceLookup, ): Result => { - const application = graphEvidence( - input.application, - input.application_evidence_id, - lookup, - ); + const application = graphEvidence(input, lookup); if (!application.ok) return application; const raw = { application: application.value, query: input.query }; const parsed = traceJavaScriptSemanticsInputSchema.safeParse(raw); @@ -138,9 +131,19 @@ export const resolveCompareApplicationVersionsRequestValidated = ( input: CompareApplicationVersionsRequest, lookup?: EvidenceLookup, ): Result => { - const left = graphEvidence(input.left, input.left_evidence_id, lookup); + const left = graphEvidence( + "left" in input + ? { application: input.left } + : { application_evidence_id: input.left_evidence_id }, + lookup, + ); if (!left.ok) return left; - const right = graphEvidence(input.right, input.right_evidence_id, lookup); + const right = graphEvidence( + "right" in input + ? { application: input.right } + : { application_evidence_id: input.right_evidence_id }, + lookup, + ); if (!right.ok) return right; const leftNative = resolveEvidenceReferences( lookup, @@ -190,11 +193,7 @@ export const resolveCompareSourceToBundleRequestValidated = ( input: CompareSourceToBundleRequest, lookup?: EvidenceLookup, ): Result => { - const application = graphEvidence( - input.application, - input.application_evidence_id, - lookup, - ); + const application = graphEvidence(input, lookup); if (!application.ok) return application; const raw = { reference: input.reference, @@ -226,9 +225,19 @@ export const resolveCompareJavaScriptExportShapesRequestValidated = ( input: CompareJavaScriptExportShapesRequest, lookup?: EvidenceLookup, ): Result => { - const left = graphEvidence(input.left, input.left_evidence_id, lookup); + const left = graphEvidence( + "left" in input + ? { application: input.left } + : { application_evidence_id: input.left_evidence_id }, + lookup, + ); if (!left.ok) return left; - const right = graphEvidence(input.right, input.right_evidence_id, lookup); + const right = graphEvidence( + "right" in input + ? { application: input.right } + : { application_evidence_id: input.right_evidence_id }, + lookup, + ); if (!right.ok) return right; const raw = { left: left.value, @@ -249,19 +258,15 @@ export const resolveCompareJavaScriptExportShapesRequestValidated = ( }; const graphEvidence = ( - evidence: - | TraceApplicationFeatureRequest["application"] - | TraceJavaScriptSemanticsRequest["application"] - | CompareApplicationVersionsRequest["left"] - | CompareJavaScriptExportShapesRequest["left"] - | CompareSourceToBundleRequest["application"], - evidenceId: string | undefined, + source: + | { readonly application: Evidence } + | { readonly application_evidence_id: string }, lookup: EvidenceLookup | undefined, ) => { - if (evidence !== undefined) return ok(evidence); + if ("application" in source) return ok(source.application); const resolved = resolveEvidenceReferences( lookup, - evidenceId === undefined ? [] : [evidenceId], + [source.application_evidence_id], APPLICATION_GRAPH_IDENTITIES, ); return resolved.ok ? ok(resolved.value[0]) : resolved; diff --git a/src/application/ArtifactInventory/policy.ts b/src/application/ArtifactInventory/policy.ts new file mode 100644 index 000000000..5494a3907 --- /dev/null +++ b/src/application/ArtifactInventory/policy.ts @@ -0,0 +1,41 @@ +import { ArtifactReaderFailure } from "../../artifacts/ArtifactReader.js"; +import type { + ArtifactIntegrityPolicy, + ArtifactNativeMountPolicy, +} from "./types.js"; + +/** Parsed caller intent for integrity mismatch handling. */ +export type ArtifactIntegrityIntent = + | { readonly mode: "fail" } + | { + readonly mode: "record-and-continue"; + readonly maxMismatches: number; + }; + +/** Resolve caller approval and operator policy before native reader selection. */ +export const resolveNativeMountPolicy = ( + approved: boolean, + enabled: boolean, +): ArtifactNativeMountPolicy => { + if (!approved) return { status: "disabled" }; + if (!enabled) + throw new ArtifactReaderFailure( + "unavailable", + "Native DMG mounting is disabled by operator policy", + ); + return { status: "approved" }; +}; + +/** Resolve parsed caller intent and operator policy before artifact scanning. */ +export const resolveArtifactIntegrityPolicy = ( + intent: ArtifactIntegrityIntent, + enabled: boolean, +): ArtifactIntegrityPolicy => { + if (intent.mode === "fail") return intent; + if (!enabled) + throw new ArtifactReaderFailure( + "policy", + "Integrity continuation requires explicit approval and operator policy", + ); + return intent; +}; diff --git a/src/application/ArtifactInventory/reader.ts b/src/application/ArtifactInventory/reader.ts index c1630c756..9fa96789c 100644 --- a/src/application/ArtifactInventory/reader.ts +++ b/src/application/ArtifactInventory/reader.ts @@ -1,8 +1,5 @@ import { AsarArtifactReader } from "../../artifacts/AsarArtifactReader.js"; -import { - ArtifactReaderFailure, - type ArtifactReader, -} from "../../artifacts/ArtifactReader.js"; +import type { ArtifactReader } from "../../artifacts/ArtifactReader.js"; import { DirectoryArtifactReader } from "../../artifacts/DirectoryArtifactReader.js"; import { MachOSliceArtifactReader } from "../../artifacts/MachOSliceArtifactReader.js"; import { NativeDmgArtifactReader } from "../../artifacts/NativeDmgArtifactReader.js"; @@ -32,12 +29,7 @@ export const createReader = async ( ? new MachOSliceArtifactReader(path) : undefined; case "dmg": - if (!nativeMount.nativeMountApproved) return undefined; - if (!nativeMount.nativeMountEnabled) - throw new ArtifactReaderFailure( - "unavailable", - "Native DMG mounting is disabled by operator policy", - ); + if (nativeMount.status === "disabled") return undefined; return NativeDmgArtifactReader.create(path, signal); default: return undefined; diff --git a/src/application/ArtifactInventory/scanCanonical.ts b/src/application/ArtifactInventory/scanCanonical.ts index 9e4bbe2fc..bd05b3fab 100644 --- a/src/application/ArtifactInventory/scanCanonical.ts +++ b/src/application/ArtifactInventory/scanCanonical.ts @@ -44,14 +44,6 @@ export const scanCanonicalArtifactInventory = async ( options: ArtifactInventoryOptions = {}, ): Promise => { const integrity = options.integrity ?? STRICT_INTEGRITY_POLICY; - if ( - integrity.mode === "record-and-continue" && - (!integrity.approved || !integrity.enabled) - ) - throw new ArtifactReaderFailure( - "policy", - "Integrity continuation requires explicit approval and operator policy", - ); const metadata = await lstat(path); const rootFormat = await classifyRoot(path, metadata.isDirectory()); const rootDigest = metadata.isDirectory() diff --git a/src/application/ArtifactInventory/scanReader.ts b/src/application/ArtifactInventory/scanReader.ts index 089d6a428..581c13014 100644 --- a/src/application/ArtifactInventory/scanReader.ts +++ b/src/application/ArtifactInventory/scanReader.ts @@ -166,19 +166,19 @@ const digestArtifactEntry = async ( context.totalBytes += digest.bytes; const mismatched = entry.declaredSha256 !== null && entry.declaredSha256 !== digest.sha256; - if (mismatched && context.integrity.mode === "fail") - throw new ArtifactReaderFailure( - "integrity", - `Artifact integrity metadata disagrees with content: ${logicalPath}`, - undefined, - { - logicalPath, - declaredSha256: entry.declaredSha256, - calculatedSha256: digest.sha256, - unpacked: entry.unpacked, - }, - ); if (mismatched && entry.declaredSha256 !== null) { + if (context.integrity.mode === "fail") + throw new ArtifactReaderFailure( + "integrity", + `Artifact integrity metadata disagrees with content: ${logicalPath}`, + undefined, + { + logicalPath, + declaredSha256: entry.declaredSha256, + calculatedSha256: digest.sha256, + unpacked: entry.unpacked, + }, + ); if (context.pendingContradictions.length >= context.integrity.maxMismatches) throw new ArtifactReaderFailure( "limit", diff --git a/src/application/ArtifactInventory/types.ts b/src/application/ArtifactInventory/types.ts index 894e54b43..d41531f52 100644 --- a/src/application/ArtifactInventory/types.ts +++ b/src/application/ArtifactInventory/types.ts @@ -13,30 +13,25 @@ export interface InventoryPageInput { readonly edgeLimit: number; } -/** Per-request authority combined with operator-owned native mount policy. */ -export interface ArtifactNativeMountPolicy { - readonly nativeMountApproved: boolean; - readonly nativeMountEnabled: boolean; -} +/** Resolved native mount authority admitted to the artifact reader. */ +export type ArtifactNativeMountPolicy = + | { readonly status: "disabled" } + | { readonly status: "approved" }; export const NATIVE_MOUNT_DISABLED: ArtifactNativeMountPolicy = { - nativeMountApproved: false, - nativeMountEnabled: false, + status: "disabled", }; -/** Explicit caller approval bounded by operator-owned integrity policy. */ -export interface ArtifactIntegrityPolicy { - readonly mode: "fail" | "record-and-continue"; - readonly approved: boolean; - readonly enabled: boolean; - readonly maxMismatches: number; -} +/** Resolved integrity behavior admitted to the artifact scanner. */ +export type ArtifactIntegrityPolicy = + | { readonly mode: "fail" } + | { + readonly mode: "record-and-continue"; + readonly maxMismatches: number; + }; export const STRICT_INTEGRITY_POLICY: ArtifactIntegrityPolicy = { mode: "fail", - approved: false, - enabled: false, - maxMismatches: 1, }; /** Options shared by artifact inventory scans. */ diff --git a/src/application/BinarySession.ts b/src/application/BinarySession.ts index 8807bbb09..1f0c937c2 100644 --- a/src/application/BinarySession.ts +++ b/src/application/BinarySession.ts @@ -74,9 +74,9 @@ export class BinarySession #transition: Promise = Promise.resolve(); readonly #calls = new Set>(); readonly #providerRouter: SessionProviderRouter; - readonly #runtimeAvailability = new Map< + readonly #runtimeUnavailability = new Map< string, - { readonly available: boolean; readonly reason: string | null } + { readonly reason: string } >(); readonly #availabilityListeners = new Set<() => void | Promise>(); @@ -272,7 +272,7 @@ export class BinarySession target: this.#active?.target, route: this.#currentRoute(), router: this.#providerRouter, - runtimeAvailability: this.#runtimeAvailability, + runtimeUnavailability: this.#runtimeUnavailability, runId: this.#active?.runId, runtimeLineageSnapshots: this.#active?.client.runtimeLineageSnapshots?.() ?? [], @@ -344,12 +344,12 @@ export class BinarySession result: Result, ): void { if (result.ok) { - if (this.#setRuntimeAvailability(operation, true, null)) + if (this.#markRuntimeAvailable(operation)) this.#emitAvailabilityChanged(); return; } if (result.error._tag === "AnalysisCapabilityUnavailableError") { - if (this.#setRuntimeAvailability(operation, false, result.error.message)) + if (this.#markRuntimeUnavailable(operation, result.error.message)) this.#emitAvailabilityChanged(); return; } @@ -367,32 +367,28 @@ export class BinarySession for (const descriptor of capabilities?.values() ?? []) if (providerId !== undefined && descriptor.provider.id === providerId) changed = - this.#setRuntimeAvailability( + this.#markRuntimeUnavailable( descriptor.operation, - false, "Provider became unavailable during this session.", ) || changed; if (changed) this.#emitAvailabilityChanged(); } } - #setRuntimeAvailability( - operation: string, - available: boolean, - reason: string | null, - ): boolean { - const current = this.#runtimeAvailability.get(operation); - if (current?.available === available && current.reason === reason) - return false; - if (available && current === undefined) return false; - if (available) this.#runtimeAvailability.delete(operation); - else this.#runtimeAvailability.set(operation, { available, reason }); + #markRuntimeAvailable(operation: string): boolean { + return this.#runtimeUnavailability.delete(operation); + } + + #markRuntimeUnavailable(operation: string, reason: string): boolean { + const current = this.#runtimeUnavailability.get(operation); + if (current?.reason === reason) return false; + this.#runtimeUnavailability.set(operation, { reason }); return true; } #clearRuntimeAvailability(): void { - if (this.#runtimeAvailability.size === 0) return; - this.#runtimeAvailability.clear(); + if (this.#runtimeUnavailability.size === 0) return; + this.#runtimeUnavailability.clear(); this.#emitAvailabilityChanged(); } diff --git a/src/application/BinarySessionStatus.ts b/src/application/BinarySessionStatus.ts index 07ac5f390..62890791b 100644 --- a/src/application/BinarySessionStatus.ts +++ b/src/application/BinarySessionStatus.ts @@ -14,9 +14,9 @@ interface BinarySessionStatusInput { readonly target: BinaryTarget | undefined; readonly route: SessionProviderRoute; readonly router: SessionProviderRouter; - readonly runtimeAvailability: ReadonlyMap< + readonly runtimeUnavailability: ReadonlyMap< string, - { readonly available: boolean; readonly reason: string | null } + { readonly reason: string } >; readonly runId: string | undefined; readonly runtimeLineageSnapshots: readonly ProviderRuntimeLineageSnapshot[]; @@ -28,7 +28,7 @@ export const binarySessionStatus = ({ target, route, router, - runtimeAvailability, + runtimeUnavailability, runId, runtimeLineageSnapshots, requestActivitySnapshots, @@ -38,10 +38,16 @@ export const binarySessionStatus = ({ const providers = router.providerIdentities(route).map(providerSummary); const capabilities = [...(route.capabilities?.values() ?? [])] .sort((left, right) => left.operation.localeCompare(right.operation)) - .map((descriptor) => ({ - ...descriptor, - ...runtimeAvailability.get(descriptor.operation), - })) + .map((descriptor) => { + const unavailable = runtimeUnavailability.get(descriptor.operation); + return unavailable === undefined + ? descriptor + : { + ...descriptor, + available: false as const, + reason: unavailable.reason, + }; + }) .map(capabilityStatus); const analysisProviderBinding = route.binding === null diff --git a/src/application/BrowserEvidence.ts b/src/application/BrowserEvidence.ts index 159a05ac0..d3a959e36 100644 --- a/src/application/BrowserEvidence.ts +++ b/src/application/BrowserEvidence.ts @@ -93,11 +93,7 @@ const browserParameters = ( input: BrowserEvidenceInput, ): EvidenceObservation["parameters"] => { if (!("cdp_endpoint" in input)) { - if ( - "before_scenario" in input && - input.before_scenario !== undefined && - input.after_scenario !== undefined - ) + if ("before_scenario" in input) return { comparison_kind: "browser_scenario", before_browser: input.before_scenario.browser, @@ -166,9 +162,9 @@ const browserParameters = ( include_storage_keys: input.include_storage_keys, include_storage_fingerprints: input.include_storage_fingerprints, limits: input.limits, - ...(input.include_script_sources && "source_capture_approved" in input + source_capture_approved: input.source_capture_approved, + ...(input.include_script_sources && "analysis_limits" in input ? { - source_capture_approved: input.source_capture_approved, fetch_source_maps: input.fetch_source_maps, source_map_fetch_approved: input.source_map_fetch_approved, analysis_limits: input.analysis_limits, diff --git a/src/application/CapabilityClientRequirements.ts b/src/application/CapabilityClientRequirements.ts new file mode 100644 index 000000000..b19bbb70b --- /dev/null +++ b/src/application/CapabilityClientRequirements.ts @@ -0,0 +1,47 @@ +import type { ClientFeatureAvailability } from "../contracts/toolOutputSchemaPrimitives.js"; + +type ClientFeatureName = keyof ClientFeatureAvailability; + +/** Empty MCP client feature declaration used when the caller supplies none. */ +export const NO_CLIENT_FEATURES: ClientFeatureAvailability = { + elicitation_form: false, + elicitation_url: false, + roots: false, + sampling: false, +}; + +const CLIENT_FEATURE_REQUIREMENTS: Readonly< + Record< + string, + { + readonly required: readonly ClientFeatureName[]; + readonly optional: readonly ClientFeatureName[]; + } + > +> = { + capture_process_scenario: { + required: [], + optional: ["elicitation_form"], + }, +}; + +/** Project a tool's client requirements against the negotiated feature set. */ +export const clientRequirementsFor = ( + name: string, + clientFeatures: ClientFeatureAvailability, +) => { + const requirements = CLIENT_FEATURE_REQUIREMENTS[name] ?? { + required: [], + optional: [], + }; + return { + required: [...requirements.required], + optional: [...requirements.optional], + missing_required: requirements.required.filter( + (feature) => !clientFeatures[feature], + ), + missing_optional: requirements.optional.filter( + (feature) => !clientFeatures[feature], + ), + }; +}; diff --git a/src/application/CapabilityInventory.ts b/src/application/CapabilityInventory.ts index 28b907275..76183c6fc 100644 --- a/src/application/CapabilityInventory.ts +++ b/src/application/CapabilityInventory.ts @@ -1,39 +1,31 @@ import { z } from "zod"; -import type { ClientFeatureAvailability } from "../contracts/toolOutputSchemaPrimitives.js"; +import { + providerCapability, + type ClientFeatureAvailability, + type ProviderCapability, + type ToolAvailability, + type ToolAvailabilityMode, + type ToolUnavailabilityReason, +} from "../contracts/toolOutputSchemaPrimitives.js"; import type { ToolKind } from "../contracts/toolContractTypes.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { GENERATED_MCP_TOOL_CATALOG } from "../generatedMcpToolCatalog.js"; +import { + clientRequirementsFor, + NO_CLIENT_FEATURES, +} from "./CapabilityClientRequirements.js"; const statusSchema = z.object({ open: z.boolean(), kind: z.enum(["executable", "database", "archive", "artifact"]).optional(), format: z.string().optional(), - capabilities: z.array( - z.object({ - operation: z.string(), - available: z.boolean(), - reason: z.string().nullable(), - availability_code: z.string().nullable().optional(), - }), - ), + capabilities: z.array(providerCapability), }); -type ToolAvailabilityReason = - | "available" - | "client_capability_missing" - | "target_required" - | "provider_missing" - | "provider_unavailable" - | "target_unsupported" - | "unsupported_host" - | "policy_disabled"; +type ToolAvailabilityReason = "available" | ToolUnavailabilityReason; -type ProviderDescriptor = { - readonly available: boolean; - readonly reason: string | null; - readonly availability_code?: string | null; -}; +type ProviderDescriptor = ProviderCapability; export type AvailabilityPolicy = { readonly processCaptureEnabled: boolean; readonly evidenceFileRoots: number; @@ -47,44 +39,25 @@ export type AvailabilityPolicy = { readonly managedRuntimeEnabled?: boolean; }; -type ClientFeatureName = keyof ClientFeatureAvailability; - -const NO_CLIENT_FEATURES: ClientFeatureAvailability = { - elicitation_form: false, - elicitation_url: false, - roots: false, - sampling: false, -}; - -const CLIENT_FEATURE_REQUIREMENTS: Readonly< - Record< - string, - { - readonly required: readonly ClientFeatureName[]; - readonly optional: readonly ClientFeatureName[]; - } - > -> = { - capture_process_scenario: { - required: [], - optional: ["elicitation_form"], - }, -}; -type Availability = { - readonly reason: ToolAvailabilityReason; - readonly remediation: string | null; +type AvailabilityFacts = { readonly defaultModeAvailable?: boolean; - readonly modes?: readonly CapabilityMode[]; -}; -type CapabilityMode = { - readonly name: string; - readonly available: boolean; - readonly missing_operations: readonly string[]; - readonly remediation: string | null; -}; -type NavigationModeResult = CapabilityMode & { - readonly reason: ToolAvailabilityReason; + readonly modes?: readonly ToolAvailabilityMode[]; }; +type Availability = AvailabilityFacts & + ( + | { readonly reason: "available"; readonly remediation: null } + | { + readonly reason: ToolUnavailabilityReason; + readonly remediation: string | null; + } + ); +type NavigationModeResult = + | (Extract & { + readonly reason: "available"; + }) + | (Extract & { + readonly reason: ToolUnavailabilityReason; + }); type AvailabilityContext = { readonly name: string; readonly kind: ToolKind; @@ -143,19 +116,12 @@ export const buildCapabilityInventory = ( sessionStatus: JsonValue, policy: AvailabilityPolicy, clientFeatures: ClientFeatureAvailability = NO_CLIENT_FEATURES, -) => { +): readonly ToolAvailability[] => { const status = statusSchema.parse(sessionStatus); const descriptors = new Map( - status.capabilities.map((descriptor) => [ - descriptor.operation, - { - available: descriptor.available, - reason: descriptor.reason, - availability_code: descriptor.availability_code ?? null, - }, - ]), + status.capabilities.map((descriptor) => [descriptor.operation, descriptor]), ); - return GENERATED_MCP_TOOL_CATALOG.map((contract) => { + return GENERATED_MCP_TOOL_CATALOG.map((contract): ToolAvailability => { const availability = availabilityFor({ name: contract.name, kind: contract.kind, @@ -169,22 +135,15 @@ export const buildCapabilityInventory = ( clientFeatures, ); const clientBlocked = clientRequirements.missing_required.length > 0; - return { + const facts = { name: contract.name, surface: contract.kind, - available: availability.reason === "available" && !clientBlocked, - reason: clientBlocked - ? ("client_capability_missing" as const) - : availability.reason, - remediation: clientBlocked - ? `Use an MCP client that supports: ${clientRequirements.missing_required.join(", ")}.` - : availability.remediation, ...(availability.defaultModeAvailable === undefined ? {} : { default_mode_available: availability.defaultModeAvailable }), ...(availability.modes === undefined ? {} - : { modes: availability.modes }), + : { modes: [...availability.modes] }), client_requirements: clientRequirements, effects: { ...contract.effects }, annotations: { @@ -194,29 +153,29 @@ export const buildCapabilityInventory = ( open_world: contract.annotations.openWorldHint ?? true, }, }; + if (clientBlocked) + return { + ...facts, + available: false, + reason: "client_capability_missing", + remediation: `Use an MCP client that supports: ${clientRequirements.missing_required.join(", ")}.`, + }; + return availability.reason === "available" + ? { + ...facts, + available: true, + reason: availability.reason, + remediation: null, + } + : { + ...facts, + available: false, + reason: availability.reason, + remediation: availability.remediation, + }; }).sort((left, right) => left.name.localeCompare(right.name)); }; -const clientRequirementsFor = ( - name: string, - clientFeatures: ClientFeatureAvailability, -) => { - const requirements = CLIENT_FEATURE_REQUIREMENTS[name] ?? { - required: [], - optional: [], - }; - return { - required: [...requirements.required], - optional: [...requirements.optional], - missing_required: requirements.required.filter( - (feature) => !clientFeatures[feature], - ), - missing_optional: requirements.optional.filter( - (feature) => !clientFeatures[feature], - ), - }; -}; - const availabilityFor = (context: AvailabilityContext): Availability => { if (context.name === "get_navigation_context") return navigationContextAvailability(context.descriptors); @@ -408,10 +367,7 @@ const providerAvailability = ({ const composedAvailability = ( name: string, descriptors: ReadonlyMap, -): { - readonly reason: ToolAvailabilityReason; - readonly remediation: string | null; -} => { +): Availability => { const requirements = ENHANCED_REQUIREMENTS[name]; if (requirements === undefined) return { @@ -455,9 +411,17 @@ const navigationContextAvailability = ( mode.requirements, descriptors, ); + if (availability.reason === "available") + return { + name: mode.name, + available: true, + reason: availability.reason, + missing_operations: [], + remediation: null, + }; return { name: mode.name, - available: availability.reason === "available", + available: false, reason: availability.reason, missing_operations: mode.requirements.filter((operation) => { const descriptor = descriptors.get(operation); @@ -467,39 +431,47 @@ const navigationContextAvailability = ( }; }, ); - const modes = modeResults.map( - ({ name, available, missing_operations, remediation }) => ({ - name, - available, - missing_operations, - remediation, - }), + const modes: ToolAvailabilityMode[] = modeResults.map((mode) => + mode.available + ? { + name: mode.name, + available: true, + missing_operations: [], + remediation: null, + } + : { + name: mode.name, + available: false, + missing_operations: [...mode.missing_operations], + remediation: mode.remediation, + }, ); const availableMode = modeResults.find((mode) => mode.available); - const failure = modeResults - .filter((mode) => !mode.available) - .sort( - (left, right) => - navigationFailurePriority(left.reason) - - navigationFailurePriority(right.reason), - )[0]; + const failures = modeResults.flatMap((mode) => + mode.available ? [] : [mode], + ); + const failure = failures.sort( + (left, right) => + navigationFailurePriority(left.reason) - + navigationFailurePriority(right.reason), + )[0]; const specificFailureRemediation = failure?.reason === "provider_missing" ? undefined : failure?.remediation; - return { - reason: - availableMode === undefined - ? (failure?.reason ?? "provider_missing") - : "available", - remediation: - availableMode === undefined - ? (specificFailureRemediation ?? - `Configure a provider for one of: ${modes - .flatMap((mode) => mode.missing_operations) - .join(", ")}.`) - : null, + const facts = { defaultModeAvailable: modes[0]?.available ?? false, modes, }; + if (availableMode !== undefined) + return { ...facts, reason: "available", remediation: null }; + return { + ...facts, + reason: failure?.reason ?? "provider_missing", + remediation: + specificFailureRemediation ?? + `Configure a provider for one of: ${modes + .flatMap((mode) => mode.missing_operations) + .join(", ")}.`, + }; }; const navigationFailurePriority = (reason: ToolAvailabilityReason): number => { diff --git a/src/application/CrossVersionInventory.ts b/src/application/CrossVersionInventory.ts index 7deb79c53..ed17e1fb1 100644 --- a/src/application/CrossVersionInventory.ts +++ b/src/application/CrossVersionInventory.ts @@ -20,6 +20,7 @@ import { } from "./ArtifactInventory.js"; import { scanAuthorizedArtifactInventory } from "./AuthorizedArtifactInventory.js"; import { ARTIFACT_GRAPH_PROVIDER } from "./InvestigationProviders.js"; +import { resolveArtifactIntegrityPolicy } from "./ArtifactInventory/policy.js"; export const AUTOMATIC_RUN_LIMITATION = "Automatic cross-version runs compare shipped artifact structure only; they do not execute either version."; @@ -76,12 +77,15 @@ export const scanVersions = async ( if (signal?.aborted === true) return err(new AnalysisCancelledError("find_changed_behavior")); const limits = artifactLimits(input.options); - const integrity: ArtifactIntegrityPolicy = { - mode: input.integrity_policy, - approved: input.integrity_continue_approved, - enabled: integrityContinueEnabled, - maxMismatches: input.max_integrity_mismatches, - }; + const integrity = resolveArtifactIntegrityPolicy( + input.integrity_policy === "fail" + ? { mode: "fail" } + : { + mode: input.integrity_policy, + maxMismatches: input.max_integrity_mismatches, + }, + integrityContinueEnabled, + ); return ok( await scanVersionInventories({ leftPath: input.left_path, diff --git a/src/application/CrossVersionInvestigation.ts b/src/application/CrossVersionInvestigation.ts index dfe7fe70c..6afe33b51 100644 --- a/src/application/CrossVersionInvestigation.ts +++ b/src/application/CrossVersionInvestigation.ts @@ -67,7 +67,7 @@ export interface CrossVersionInvestigationExecution { /** Run or resume a deterministic cross-version artifact investigation. */ export const runCrossVersionInvestigation = async ( - input: CrossVersionInvestigationInput, + input: unknown, policy: EvidenceFilePolicy, execution: CrossVersionInvestigationExecution, ): Promise> => { diff --git a/src/application/EnhancedTools.ts b/src/application/EnhancedTools.ts index 42703644e..64a69415a 100644 --- a/src/application/EnhancedTools.ts +++ b/src/application/EnhancedTools.ts @@ -164,23 +164,19 @@ export class EnhancedTools { input: unknown, signal?: AbortSignal, ): EnhancedResult { - const parsed = enhancedInputSchemas[name].safeParse(input); + if (name === "trace_call_path") { + const parsed = enhancedInputSchemas.trace_call_path.safeParse(input); + if (!parsed.success) return invalidEnhancedInput(name, parsed.error); + return this.executeValidated({ name, input: parsed.data }, signal); + } + if (name === "trace_feature") { + const parsed = enhancedInputSchemas.trace_feature.safeParse(input); + if (!parsed.success) return invalidEnhancedInput(name, parsed.error); + return this.executeValidated({ name, input: parsed.data }, signal); + } + const parsed = enhancedInputSchemas.find_code_for_string.safeParse(input); if (!parsed.success) return invalidEnhancedInput(name, parsed.error); - if (name === "trace_call_path") - return this.executeValidated( - { - name, - input: enhancedInputSchemas.trace_call_path.parse(parsed.data), - }, - signal, - ); - return this.executeValidated( - { - name, - input: enhancedInputSchemas[name].parse(parsed.data), - }, - signal, - ); + return this.executeValidated({ name, input: parsed.data }, signal); } #executeFunctionAnalysis( @@ -188,23 +184,14 @@ export class EnhancedTools { input: unknown, signal?: AbortSignal, ): EnhancedResult { - const parsed = enhancedInputSchemas[name].safeParse(input); + if (name === "analyze_function") { + const parsed = enhancedInputSchemas.analyze_function.safeParse(input); + if (!parsed.success) return invalidEnhancedInput(name, parsed.error); + return this.executeValidated({ name, input: parsed.data }, signal); + } + const parsed = enhancedInputSchemas.inspect_native_api.safeParse(input); if (!parsed.success) return invalidEnhancedInput(name, parsed.error); - if (name === "analyze_function") - return this.executeValidated( - { - name, - input: enhancedInputSchemas.analyze_function.parse(parsed.data), - }, - signal, - ); - return this.executeValidated( - { - name, - input: enhancedInputSchemas.inspect_native_api.parse(parsed.data), - }, - signal, - ); + return this.executeValidated({ name, input: parsed.data }, signal); } async #analyzeFunction( diff --git a/src/application/InventoryProjectionEvidence.ts b/src/application/InventoryProjectionEvidence.ts index 9be44d123..d0b37b8e6 100644 --- a/src/application/InventoryProjectionEvidence.ts +++ b/src/application/InventoryProjectionEvidence.ts @@ -11,7 +11,7 @@ import { type EvidenceProvider, type EvidenceSubjectTarget, } from "../domain/evidence.js"; -import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; +import { jsonValueSchema } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; interface InventoryProjectionInput { @@ -71,7 +71,7 @@ export const projectInventoryEvidence = < inventory_evidence_ids: [...result.source_evidence_ids], limits: jsonValueSchema.parse(parsed.data.limits), }, - result: jsonValueSchema.parse(result) as JsonValue, + result: jsonValueSchema.parse(result), rawResult: null, confidence: "inferred", authority: "analyst-inference", diff --git a/src/application/JavaScriptReplayPermission.ts b/src/application/JavaScriptReplayPermission.ts index 321fdb7f9..7de9da1a5 100644 --- a/src/application/JavaScriptReplayPermission.ts +++ b/src/application/JavaScriptReplayPermission.ts @@ -1,12 +1,10 @@ -import type { z } from "zod"; - -import type { controlledReplayInputSchema } from "../domain/javascriptReplay.js"; -import type { JavaScriptReplayPolicy } from "./JavaScriptReplayPlanning.js"; +import type { ControlledReplayInput } from "../domain/javascriptReplay.js"; +import type { EnabledJavaScriptReplayPolicy } from "./JavaScriptReplayPlanning.js"; /** Build the exact permission request for one controlled replay operation. */ export const replayPermissionRequest = ( - input: z.output, - policy: JavaScriptReplayPolicy, + input: ControlledReplayInput, + policy: EnabledJavaScriptReplayPolicy, ) => ({ capability: "javascript_replay" as const, roots: [...input.left.modules, ...(input.right?.modules ?? [])].map( @@ -22,5 +20,5 @@ export const replayPermissionRequest = ( environment_names: [], network: "none" as const, mount: true, - operation_identity: `run_controlled_replay:${input.plan_digest ?? "plan"}`, + operation_identity: `run_controlled_replay:${input.mode === "plan" ? "plan" : input.plan_digest}`, }); diff --git a/src/application/JavaScriptReplayPlanning.ts b/src/application/JavaScriptReplayPlanning.ts index f38b2bbdb..5d4c2cf65 100644 --- a/src/application/JavaScriptReplayPlanning.ts +++ b/src/application/JavaScriptReplayPlanning.ts @@ -37,9 +37,10 @@ export interface ReplayRuntimeFileIdentity { readonly sha256: string; } -export interface JavaScriptReplayPolicy { - readonly enabled: boolean; - readonly roots: readonly string[]; +/** Complete executable and source authority for enabled JavaScript replay. */ +export interface EnabledJavaScriptReplayPolicy { + readonly status: "enabled"; + readonly roots: readonly [string, ...string[]]; readonly nodePath: string; readonly bubblewrapPath: string; readonly systemdRunPath: string; @@ -47,6 +48,11 @@ export interface JavaScriptReplayPolicy { readonly shellPath: string; } +/** Parsed JavaScript replay configuration. */ +export type JavaScriptReplayPolicy = + | { readonly status: "disabled" } + | EnabledJavaScriptReplayPolicy; + export interface JavaScriptReplayHost { readonly readSource: ( path: string, @@ -61,7 +67,7 @@ export interface JavaScriptReplayHost { nodePath: string, ) => Promise; readonly seccompDigest: () => string; - readonly probe: (policy: JavaScriptReplayPolicy) => Promise; + readonly probe: (policy: EnabledJavaScriptReplayPolicy) => Promise; } export interface PreparedReplayPlan { @@ -73,7 +79,7 @@ export interface PreparedReplayPlan { export interface JavaScriptReplayRunner { readonly execute: ( prepared: PreparedReplayPlan, - policy: JavaScriptReplayPolicy, + policy: EnabledJavaScriptReplayPolicy, signal?: AbortSignal, ) => Promise; } @@ -81,7 +87,7 @@ export interface JavaScriptReplayRunner { /** Read, normalize, and content-address every input to one replay experiment. */ export const prepareReplayPlan = async ( input: ControlledReplayInput, - policy: JavaScriptReplayPolicy, + policy: EnabledJavaScriptReplayPolicy, host: JavaScriptReplayHost, ): Promise => { const cases = replayCases(input).map((item) => ({ @@ -243,13 +249,13 @@ const replayCases = ( return state >>> 0; }; const corpus = boundaryCorpus(input.generator.preset); - const generated = Array.from( - { length: input.generator.count }, - (_, index) => ({ - case_id: `generated-${input.generator?.preset ?? "boundary"}-${String(index)}`, - arguments: [corpus[next() % corpus.length] ?? ""] as JsonValue[], - }), - ); + const generated: { + readonly case_id: string; + readonly arguments: JsonValue[]; + }[] = Array.from({ length: input.generator.count }, (_, index) => ({ + case_id: `generated-${input.generator?.preset ?? "boundary"}-${String(index)}`, + arguments: [corpus[next() % corpus.length] ?? ""], + })); return uniqueCases([...explicit, ...generated]); }; diff --git a/src/application/JavaScriptReplayService.ts b/src/application/JavaScriptReplayService.ts index 4a8ea565d..a42f4e4e2 100644 --- a/src/application/JavaScriptReplayService.ts +++ b/src/application/JavaScriptReplayService.ts @@ -6,6 +6,8 @@ import { replayExecutionResultSchema, controlledReplayOutputSchema, replayEvidenceSchema, + type ControlledReplayExecutionInput, + type ControlledReplayInput, } from "../domain/javascriptReplay.js"; import { AnalysisCapabilityUnavailableError, @@ -26,6 +28,7 @@ import { replayPermissionRequest } from "./JavaScriptReplayPermission.js"; import { digestBytes, prepareReplayPlan, + type EnabledJavaScriptReplayPolicy, type JavaScriptReplayHost, type JavaScriptReplayPolicy, type JavaScriptReplayRunner, @@ -36,7 +39,7 @@ const isAborted = (signal: AbortSignal | undefined): boolean => signal?.aborted === true; export interface JavaScriptReplayDependencies { - readonly policy: JavaScriptReplayPolicy; + readonly policy: () => JavaScriptReplayPolicy; readonly host: JavaScriptReplayHost; readonly runner: JavaScriptReplayRunner; readonly authority: PermissionAuthority | undefined; @@ -63,14 +66,20 @@ export const runControlledReplay = async ( /** Plan or execute replay input already parsed by a trusted adapter. */ export const runControlledReplayValidated = async ( dependencies: JavaScriptReplayDependencies, - input: z.output, + input: ControlledReplayInput, options: ExecutionOptions = {}, ): Promise> => { - const authorized = await authorizeReplay(dependencies, input, options.signal); + const authorized = await authorizeReplay( + dependencies, + dependencies.policy(), + input, + options.signal, + ); if (!authorized.ok) return authorized; const prepared = await prepareValidatedReplay( dependencies, + authorized.value, input, options.signal, ); @@ -91,7 +100,7 @@ export const runControlledReplayValidated = async ( if (input.plan_digest !== prepared.value.publicPlan.plan_digest) return err( new ReplayPlanStaleError( - input.plan_digest ?? "", + input.plan_digest, prepared.value.publicPlan.plan_digest, ), ); @@ -103,12 +112,13 @@ export const runControlledReplayValidated = async ( ); if (!exportContext.ok) return exportContext; - const executed = await executeValidatedReplay( - dependencies, - prepared.value, - exportContext.value, + const executed = await executeValidatedReplay({ + runner: dependencies.runner, + policy: authorized.value, + prepared: prepared.value, + exportContext: exportContext.value, options, - ); + }); if (!executed.ok) return executed; try { @@ -133,10 +143,11 @@ export const runControlledReplayValidated = async ( const authorizeReplay = async ( dependencies: JavaScriptReplayDependencies, - input: z.output, + policy: JavaScriptReplayPolicy, + input: ControlledReplayInput, signal: AbortSignal | undefined, -): Promise> => { - if (!dependencies.policy.enabled) +): Promise> => { + if (policy.status === "disabled") return err( new AnalysisCapabilityUnavailableError( "rea-javascript-replay", @@ -154,7 +165,7 @@ const authorizeReplay = async ( ); if (isAborted(signal)) return err(new AnalysisCancelledError(OPERATION)); - const request = replayPermissionRequest(input, dependencies.policy); + const request = replayPermissionRequest(input, policy); const authorized = input.mode === "plan" ? await dependencies.authority.explain(request, "read") @@ -167,21 +178,20 @@ const authorizeReplay = async ( cause: authorized.error, }), ); - return ok(true); + return ok(policy); }; const prepareValidatedReplay = async ( dependencies: JavaScriptReplayDependencies, - input: z.output, + policy: EnabledJavaScriptReplayPolicy, + input: ControlledReplayInput, signal: AbortSignal | undefined, ): Promise< Result>, AnalysisError> > => { if (isAborted(signal)) return err(new AnalysisCancelledError(OPERATION)); try { - return ok( - await prepareReplayPlan(input, dependencies.policy, dependencies.host), - ); + return ok(await prepareReplayPlan(input, policy, dependencies.host)); } catch (cause: unknown) { return err( new AnalysisCapabilityUnavailableError( @@ -200,12 +210,10 @@ interface ReproducerExportContext { const authorizeReproducerExport = async ( authority: PermissionAuthority | undefined, - input: z.output, + input: ControlledReplayExecutionInput, prepared: Awaited>, ): Promise> => { if (input.reproducer_export === undefined) return ok(undefined); - if (input.reproducer_export.approved !== true) - return err(new AnalysisInputError(`${OPERATION}:reproducer_export`)); if (authority === undefined) return err( new AnalysisCapabilityUnavailableError( @@ -249,11 +257,16 @@ const authorizeReproducerExport = async ( }); }; +interface ReplayExecutionContext { + readonly runner: JavaScriptReplayRunner; + readonly policy: EnabledJavaScriptReplayPolicy; + readonly prepared: Awaited>; + readonly exportContext: ReproducerExportContext | undefined; + readonly options: ExecutionOptions; +} + const executeValidatedReplay = async ( - dependencies: JavaScriptReplayDependencies, - prepared: Awaited>, - exportContext: ReproducerExportContext | undefined, - options: ExecutionOptions, + context: ReplayExecutionContext, ): Promise< Result< { @@ -263,6 +276,7 @@ const executeValidatedReplay = async ( AnalysisError > > => { + const { runner, policy, prepared, exportContext, options } = context; await options.progress?.report({ phase: OPERATION, completed: 0, @@ -274,11 +288,7 @@ const executeValidatedReplay = async ( try { let executed = replayExecutionResultSchema.parse( - await dependencies.runner.execute( - prepared, - dependencies.policy, - options.signal, - ), + await runner.execute(prepared, policy, options.signal), ); await options.progress?.report({ phase: OPERATION, @@ -505,9 +515,9 @@ const createReplayEvidence = ( ); }; -const asJson = (value: unknown): JsonValue => - jsonValueSchema.parse( - JSON.parse( - JSON.stringify(controlledReplayOutputSchema.parse(value)), - ) as unknown, +const asJson = (value: unknown): JsonValue => { + const serialized: unknown = JSON.parse( + JSON.stringify(controlledReplayOutputSchema.parse(value)), ); + return jsonValueSchema.parse(serialized); +}; diff --git a/src/application/ManagedRuntimeCorrelationService.ts b/src/application/ManagedRuntimeCorrelationService.ts index 160b29a6d..18e42d5ea 100644 --- a/src/application/ManagedRuntimeCorrelationService.ts +++ b/src/application/ManagedRuntimeCorrelationService.ts @@ -23,14 +23,23 @@ import { digestJson } from "./JavaScriptReplayPlanning.js"; const OPERATION = "plan_managed_runtime_correlation" as const; -export interface ManagedRuntimePolicy { - readonly enabled: boolean; - readonly roots: readonly string[]; - readonly executablePath: string; -} +/** Parsed availability and authority scope for managed runtime correlation. */ +export type ManagedRuntimePolicy = + | { readonly status: "disabled" } + | { + readonly status: "enabled"; + readonly roots: readonly [string, ...string[]]; + readonly executablePath: string; + }; +/** A managed-runtime policy that grants no runtime-correlation authority. */ +export const MANAGED_RUNTIME_DISABLED = { + status: "disabled", +} as const satisfies ManagedRuntimePolicy; + +/** Live policy and authority dependencies for managed runtime correlation. */ export interface ManagedRuntimeCorrelationDependencies { - readonly policy: ManagedRuntimePolicy; + readonly policy: () => ManagedRuntimePolicy; readonly authority: PermissionAuthority | undefined; } @@ -53,7 +62,8 @@ export const planManagedRuntimeCorrelationEvidenceValidated = async ( dependencies: ManagedRuntimeCorrelationDependencies, input: ManagedRuntimeCorrelationInput, ): Promise> => { - if (!dependencies.policy.enabled) + const policy = dependencies.policy(); + if (policy.status === "disabled") return err( new AnalysisCapabilityUnavailableError( MANAGED_WORKFLOW_PROVIDER.id, @@ -69,8 +79,7 @@ export const planManagedRuntimeCorrelationEvidenceValidated = async ( "managed runtime permission policy is not configured", ), ); - let staticEvidence: Evidence; - let artifactPath: string; + let staticEvidence: Evidence, artifactPath: string; try { staticEvidence = parseEvidence(input.static_members); artifactPath = artifactPathFor(staticEvidence); @@ -81,7 +90,7 @@ export const planManagedRuntimeCorrelationEvidenceValidated = async ( { capability: "managed_runtime", roots: [artifactPath], - executables: [dependencies.policy.executablePath], + executables: [policy.executablePath], environment_names: [], network: "none", mount: false, @@ -101,7 +110,7 @@ export const planManagedRuntimeCorrelationEvidenceValidated = async ( try { const result = planManagedRuntimeCorrelation( input, - dependencies.policy.executablePath, + policy.executablePath, authorized.value.grant_id, ); return ok( diff --git a/src/application/NodeRuntimeCharacterizationService.ts b/src/application/NodeRuntimeCharacterizationService.ts index bf827aab4..667fa3b0b 100644 --- a/src/application/NodeRuntimeCharacterizationService.ts +++ b/src/application/NodeRuntimeCharacterizationService.ts @@ -16,7 +16,10 @@ import { type AnalysisError, } from "../domain/errors.js"; import { createEvidence, type Evidence } from "../domain/evidence.js"; -import { controlledReplayOutputSchema } from "../domain/javascriptReplay.js"; +import { + controlledReplayOutputSchema, + type ControlledReplayExecutionOutput, +} from "../domain/javascriptReplay.js"; import type { ReplayPlan } from "../domain/javascriptReplay.js"; import type { JavaScriptExportInstrumentation } from "../domain/javascriptExportInstrumentation.js"; import { @@ -89,7 +92,7 @@ export const executeNodeCharacterization = async ( const plannedReplay = controlledReplayOutputSchema.parse( prepared.value.replay, ); - if (plannedReplay.phase !== "plan" || plannedReplay.plan === null) + if (plannedReplay.phase !== "plan") return err( new AnalysisProtocolError( "Node characterization preparation did not produce a replay plan", @@ -110,6 +113,13 @@ export const executeNodeCharacterization = async ( options, ); if (!executed.ok) return executed; + const replayOutput = controlledReplayOutputSchema.parse(executed.value); + if (replayOutput.phase !== "execute") + return err( + new AnalysisProtocolError( + "Node characterization execution omitted replay Evidence", + ), + ); if (host.instrumentation === null) return err( new AnalysisProtocolError( @@ -124,11 +134,8 @@ export const executeNodeCharacterization = async ( plan: prepared.value.plan, transformation: host.instrumentation.manifest, transformation_evidence: prepared.value.transformation_evidence, - evidence: createCharacterizationEvidence( - prepared.value, - controlledReplayOutputSchema.parse(executed.value), - ), - replay: controlledReplayOutputSchema.parse(executed.value), + evidence: createCharacterizationEvidence(prepared.value, replayOutput), + replay: replayOutput, }), ), ); @@ -164,11 +171,7 @@ const prepareValidated = async ( ); if (!replay.ok) return replay; const output = controlledReplayOutputSchema.parse(replay.value); - if ( - output.phase !== "plan" || - output.plan === null || - host.instrumentation === null - ) + if (output.phase !== "plan" || host.instrumentation === null) return err( new AnalysisProtocolError( "Node characterization preparation omitted committed plan evidence", @@ -240,12 +243,8 @@ const createCharacterizationEvidence = ( readonly plan: RuntimeCharacterizationPlan; readonly transformation_evidence: Evidence; }, - replay: z.output, + replay: ControlledReplayExecutionOutput, ): Evidence => { - if (replay.phase !== "execute" || replay.evidence === null) - throw new AnalysisProtocolError( - "Node characterization execution omitted replay Evidence", - ); return createEvidence( { path: prepared.plan.artifact.path, diff --git a/src/application/ProcessCaptureAuthority.ts b/src/application/ProcessCaptureAuthority.ts index 74bf6dc4d..34c4e5831 100644 --- a/src/application/ProcessCaptureAuthority.ts +++ b/src/application/ProcessCaptureAuthority.ts @@ -1,7 +1,7 @@ import { realpath } from "node:fs/promises"; import type { - ProcessExecutionPolicy, + EnabledProcessExecutionPolicy, ProcessScenario, } from "../domain/processCapture.js"; import { @@ -16,7 +16,7 @@ const isWithin = (candidate: string, root: string): boolean => export const assertRealPathAuthority = async ( scenario: ProcessScenario, - policy: ProcessExecutionPolicy, + policy: EnabledProcessExecutionPolicy, ): Promise => { const executable = await realpath(scenario.executable); const executableRoots = await canonicalizeConfiguredRoots( diff --git a/src/application/ProcessCaptureLifecycle.ts b/src/application/ProcessCaptureLifecycle.ts index 365b03823..edc3f17ef 100644 --- a/src/application/ProcessCaptureLifecycle.ts +++ b/src/application/ProcessCaptureLifecycle.ts @@ -420,6 +420,11 @@ export const prepareProcessCapture = async ( readonly home: string; readonly before: SnapshotResult; }> => { + if (policy.status === "disabled") + throw new ProcessCaptureError("process capture is disabled", { + userCategory: "permission_required", + userMessage: processPolicyMessage("process capture is disabled"), + }); const decision = authorizeProcessScenario(scenario, policy); if (!decision.allowed) throw new ProcessCaptureError(decision.reason, { diff --git a/src/application/ProcessCli.ts b/src/application/ProcessCli.ts index 6aa2a2001..f21771b22 100644 --- a/src/application/ProcessCli.ts +++ b/src/application/ProcessCli.ts @@ -187,7 +187,8 @@ const readJson = async (path: string): Promise => { "Process input file is too large. Reduce it below 64 MiB, then try again.", ); try { - return JSON.parse(bytes.toString("utf8")) as unknown; + const parsed: unknown = JSON.parse(bytes.toString("utf8")); + return parsed; } catch { throw new ProcessCliFailure( "invalid_input", diff --git a/src/artifacts/ArtifactProvider.ts b/src/artifacts/ArtifactProvider.ts index eefcf5851..7a4b9185d 100644 --- a/src/artifacts/ArtifactProvider.ts +++ b/src/artifacts/ArtifactProvider.ts @@ -31,6 +31,10 @@ import { import { ARTIFACT_GRAPH_PROVIDER } from "../application/InvestigationProviders.js"; import { createEvidence } from "../domain/evidence.js"; import { createArtifactInspection } from "../domain/artifactInspection.js"; +import { + resolveArtifactIntegrityPolicy, + resolveNativeMountPolicy, +} from "../application/ArtifactInventory/policy.js"; const IDENTITY: ProviderIdentity = Object.freeze(ARTIFACT_GRAPH_PROVIDER); @@ -276,16 +280,19 @@ class ArtifactClient implements AnalysisClient { }, { ...(options?.signal === undefined ? {} : { signal: options.signal }), - nativeMount: { - nativeMountApproved: parsed.native_mount_approved === true, - nativeMountEnabled: this.nativeMountEnabled, - }, - integrity: { - mode: parsed.integrity_policy, - approved: parsed.integrity_continue_approved === true, - enabled: this.integrityContinueEnabled, - maxMismatches: parsed.max_integrity_mismatches, - }, + nativeMount: resolveNativeMountPolicy( + parsed.native_mount_approved === true, + this.nativeMountEnabled, + ), + integrity: resolveArtifactIntegrityPolicy( + parsed.integrity_policy === "fail" + ? { mode: "fail" } + : { + mode: parsed.integrity_policy, + maxMismatches: parsed.max_integrity_mismatches, + }, + this.integrityContinueEnabled, + ), }, ); } diff --git a/src/artifacts/SafeOutputTree.ts b/src/artifacts/SafeOutputTree.ts index 0e272bdf1..db4e2a457 100644 --- a/src/artifacts/SafeOutputTree.ts +++ b/src/artifacts/SafeOutputTree.ts @@ -21,12 +21,14 @@ export interface SafeOutputFile { readonly bytesWritten: number; } -/** Cleanup facts established while rolling back an uncommitted tree. */ -export interface SafeOutputCleanup { - readonly attempted: boolean; - readonly verified: boolean; - readonly residualPaths: readonly string[]; -} +/** Cleanup state established while rolling back an uncommitted tree. */ +export type SafeOutputCleanup = + | { readonly status: "not-required" } + | { readonly status: "complete"; readonly residualPaths: readonly [] } + | { + readonly status: "incomplete"; + readonly residualPaths: readonly [string, ...string[]]; + }; /** Symlink-resistant materialization in an exclusively owned, initially absent tree. */ export class SafeOutputTree { @@ -37,9 +39,7 @@ export class SafeOutputTree { #totalBytes = 0; #published = false; #cleanup: SafeOutputCleanup = { - attempted: false, - verified: false, - residualPaths: [], + status: "not-required", }; private constructor( @@ -208,11 +208,12 @@ export class SafeOutputTree { if (this.#published) return structuredClone(this.#cleanup); await rm(this.#stagingRoot, { recursive: true, force: true }); const absent = await isAbsent(this.#stagingRoot); - this.#cleanup = { - attempted: true, - verified: absent, - residualPaths: absent ? [] : [basename(this.#stagingRoot)], - }; + this.#cleanup = absent + ? { status: "complete", residualPaths: [] } + : { + status: "incomplete", + residualPaths: [basename(this.#stagingRoot)], + }; if (!absent) throw new ArtifactReaderFailure( "integrity", diff --git a/src/browser/CdpCaptureStorage.ts b/src/browser/CdpCaptureStorage.ts index d253035c2..a3bbc2083 100644 --- a/src/browser/CdpCaptureStorage.ts +++ b/src/browser/CdpCaptureStorage.ts @@ -75,7 +75,7 @@ export const captureStorage = async ( caches: caches.slice(0, maximum), limitations, }) - : { items: [], complete: false, truncated: false }; + : { items: [], complete: false as const, truncated: false }; const truncated = [local.items, session.items, indexed, caches].some( (items) => items.length > maximum, diff --git a/src/browser/CdpCaptureStorageFingerprints.ts b/src/browser/CdpCaptureStorageFingerprints.ts index b2cb1591c..c6ff03bd5 100644 --- a/src/browser/CdpCaptureStorageFingerprints.ts +++ b/src/browser/CdpCaptureStorageFingerprints.ts @@ -58,6 +58,13 @@ interface CaptureStorageFingerprintInput { readonly limitations: string[]; } +type StorageFingerprintCapture = { + readonly items: readonly StorageFingerprint[]; +} & ( + | { readonly complete: true; readonly truncated: false } + | { readonly complete: false; readonly truncated: boolean } +); + /** Capture stable hashes of approved storage content without returning values. */ export const captureStorageFingerprints = async ({ context, @@ -67,11 +74,7 @@ export const captureStorageFingerprints = async ({ indexedDbNames, caches, limitations, -}: CaptureStorageFingerprintInput): Promise<{ - readonly items: readonly StorageFingerprint[]; - readonly complete: boolean; - readonly truncated: boolean; -}> => { +}: CaptureStorageFingerprintInput): Promise => { const state: FingerprintState = { items: [], maximum: context.input.limits.max_storage_keys, @@ -90,14 +93,17 @@ export const captureStorageFingerprints = async ({ `${right.scope}:${right.identity_sha256}`, ), ); - return { - items: state.items, - complete: - state.complete && - !state.truncated && - state.items.every(({ complete }) => complete), - truncated: state.truncated, - }; + const complete = + state.complete && + !state.truncated && + state.items.every(({ complete }) => complete); + return complete + ? { items: state.items, complete: true, truncated: false } + : { + items: state.items, + complete: false, + truncated: state.truncated, + }; }; const addStorageItems = ( diff --git a/src/browser/CdpElectronInspection.ts b/src/browser/CdpElectronInspection.ts index 530c0483f..e921b47d0 100644 --- a/src/browser/CdpElectronInspection.ts +++ b/src/browser/CdpElectronInspection.ts @@ -99,7 +99,9 @@ const runElectronInspection = async ( startedAt: string, ): Promise => { const frames = await authorizeInitialFrames(context, state); - const main = frames[0]!; + const main = frames.at(0); + if (main === undefined) + throw new BrowserObservationError("inspect_web_page", "target_not_allowed"); state.mainFrameId = main.frame_id; await enableElectronCapture(context); await delayWithCancellation( diff --git a/src/catalogIdentity.ts b/src/catalogIdentity.ts index 1a5971aea..46d959de0 100644 --- a/src/catalogIdentity.ts +++ b/src/catalogIdentity.ts @@ -16,12 +16,18 @@ const toolCatalog = TOOL_CONTRACTS.map((contract) => ({ description: contract.description, effects: { ...contract.effects }, annotations: contract.annotations, - input_schema: z.toJSONSchema(contract.inputSchema, { - unrepresentable: "any", - }), - output_schema: z.toJSONSchema(contract.outputSchema, { - unrepresentable: "any", - }), + input_schema: { + type: "object", + ...z.toJSONSchema(contract.inputSchema, { + unrepresentable: "any", + }), + }, + output_schema: { + type: "object", + ...z.toJSONSchema(contract.outputSchema, { + unrepresentable: "any", + }), + }, })).sort((left, right) => left.name.localeCompare(right.name)); const promptCatalog = PROMPT_CONTRACTS.map((contract) => ({ diff --git a/src/cli/managedCommands.ts b/src/cli/managedCommands.ts index 59b6c9196..fb0506a88 100644 --- a/src/cli/managedCommands.ts +++ b/src/cli/managedCommands.ts @@ -489,7 +489,7 @@ const registerPlanManagedRuntimeCorrelation = ( if (!authority.ok) return projectAnalysisError(authority.error); const result = await planManagedRuntimeCorrelationEvidence( { - policy: config.value.managedRuntimePolicy, + policy: () => config.value.managedRuntimePolicy, authority: authority.value, }, input.value, diff --git a/src/cliApplicationCommands.ts b/src/cliApplicationCommands.ts index a6e9aae22..f2b86a949 100644 --- a/src/cliApplicationCommands.ts +++ b/src/cliApplicationCommands.ts @@ -127,7 +127,7 @@ export const registerApplicationCommands = ( if (!authority.ok) return projectAnalysisError(authority.error); const result = await runControlledReplay( { - policy: config.value.javascriptReplayPolicy, + policy: () => config.value.javascriptReplayPolicy, host: new SystemJavaScriptReplayHost(), runner: new LinuxJavaScriptReplayRunner(), authority: authority.value, @@ -318,7 +318,7 @@ const replayDependencies = ( config: AppConfig, authority: PermissionAuthority, ) => ({ - policy: config.javascriptReplayPolicy, + policy: () => config.javascriptReplayPolicy, host: new SystemJavaScriptReplayHost(), runner: new LinuxJavaScriptReplayRunner(), authority, diff --git a/src/cliBrowserAdvancedCommands.ts b/src/cliBrowserAdvancedCommands.ts index 3004cf636..0d91318b6 100644 --- a/src/cliBrowserAdvancedCommands.ts +++ b/src/cliBrowserAdvancedCommands.ts @@ -10,7 +10,11 @@ import { loadConfiguredPermissionAuthority } from "./application/PermissionConfi import { CdpBrowserProvider } from "./browser/CdpBrowserProvider.js"; import { logCliCommand } from "./cliLogging.js"; import { parseConfig } from "./config.js"; -import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; +import { + AnalysisCapabilityUnavailableError, + AnalysisInputError, + projectAnalysisError, +} from "./domain/errors.js"; import { browserCaptureComparisonInputSchema } from "./domain/browserCaptureComparison.js"; import { discoverWebMcpToolsInputSchema } from "./domain/webMcpDiscovery.js"; import { @@ -92,7 +96,7 @@ const registerWebMcp = ( }), run: ({ args, options }) => logCliCommand(logger, "discover-webmcp-tools", async () => { - const context = await browserContext(); + const context = await browserContext("discover_webmcp_tools"); if (!context.ok) return context.error; const parsed = discoverWebMcpToolsInputSchema.safeParse({ cdp_endpoint: args.endpoint, @@ -197,7 +201,7 @@ const registerScreenshot = ( }), run: ({ args, options }) => logCliCommand(logger, "capture-web-screenshot", async () => { - const context = await browserContext(); + const context = await browserContext("capture_web_screenshot"); if (!context.ok) return context.error; const parsed = captureWebScreenshotInputSchema.safeParse({ cdp_endpoint: args.endpoint, @@ -263,9 +267,21 @@ const registerScreenshotDiff = ( }); }; -const browserContext = async () => { +const browserContext = async (operation: string) => { const config = parseConfig(process.env); if (!config.ok) return { ok: false as const, error: cliError(config.error) }; + const policy = config.value.browserObservationPolicy; + if (policy.status === "disabled") + return { + ok: false as const, + error: cliError( + new AnalysisCapabilityUnavailableError( + "rea-cdp-browser", + operation, + "browser observation is disabled; configure exact endpoints and origins before enabling it", + ), + ), + }; const authority = await loadConfiguredPermissionAuthority(config.value); if (!authority.ok) return { ok: false as const, error: cliError(authority.error) }; @@ -273,7 +289,7 @@ const browserContext = async () => { ok: true as const, authority: authority.value, provider: new CdpBrowserProvider(), - allowedBrowserOrigins: config.value.browserAllowedOrigins, + allowedBrowserOrigins: policy.allowedOrigins, }; }; diff --git a/src/cliBrowserCommands.ts b/src/cliBrowserCommands.ts index 69c168a21..501570386 100644 --- a/src/cliBrowserCommands.ts +++ b/src/cliBrowserCommands.ts @@ -16,7 +16,11 @@ import { } from "./domain/browserObservation.js"; import { analyzeWebBundleInputSchema } from "./domain/webBundleAnalysis.js"; import { observeWebSessionInputSchema } from "./domain/browserSession.js"; -import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; +import { + AnalysisCapabilityUnavailableError, + AnalysisInputError, + projectAnalysisError, +} from "./domain/errors.js"; import type { JsonValue } from "./domain/jsonValue.js"; import type { Logger } from "./logger.js"; import { CLI_COMMANDS } from "./cliCommandNames.js"; @@ -81,7 +85,7 @@ const registerTargetList = ( }), run: ({ args, options }) => logCliCommand(logger, "list-browser-targets", async () => { - const context = await browserContext(); + const context = await browserContext("list_browser_targets"); if (!context.ok) return context.error; const parsed = listBrowserTargetsInputSchema.safeParse({ cdp_endpoint: args.endpoint, @@ -116,7 +120,7 @@ const registerPageInspection = ( options: browserPageInspectionOptions, run: ({ args, options }) => logCliCommand(logger, "inspect-web-page", async () => { - const context = await browserContext(); + const context = await browserContext("inspect_web_page"); if (!context.ok) return context.error; const parsed = inspectWebPageInputSchema.safeParse({ cdp_endpoint: args.endpoint, @@ -133,6 +137,7 @@ const registerPageInspection = ( include_websocket_shapes: options.includeWebsocketShapes, websocket_shape_approved: options.websocketShapeApproved, include_script_sources: options.includeScriptSources, + source_capture_approved: options.sourceCaptureApproved, include_storage_keys: options.includeStorageKeys, include_storage_fingerprints: options.includeStorageFingerprints, limits: { @@ -227,7 +232,7 @@ const registerBundleAnalysis = ( }), run: ({ args, options }) => logCliCommand(logger, "analyze-web-bundle", async () => { - const context = await browserContext(); + const context = await browserContext("analyze_web_bundle"); if (!context.ok) return context.error; const parsed = analyzeWebBundleInputSchema.safeParse({ cdp_endpoint: args.endpoint, @@ -283,7 +288,7 @@ const registerObservationSession = ( }), run: ({ args, options }) => logCliCommand(logger, "observe-web-session", async () => { - const context = await browserContext(); + const context = await browserContext("observe_web_session"); if (!context.ok) return context.error; const parsed = observeWebSessionInputSchema.safeParse({ cdp_endpoint: args.endpoint, @@ -306,9 +311,21 @@ const registerObservationSession = ( }); }; -const browserContext = async () => { +const browserContext = async (operation: string) => { const config = parseConfig(process.env); if (!config.ok) return { ok: false as const, error: cliError(config.error) }; + const policy = config.value.browserObservationPolicy; + if (policy.status === "disabled") + return { + ok: false as const, + error: cliError( + new AnalysisCapabilityUnavailableError( + "rea-cdp-browser", + operation, + "browser observation is disabled; configure exact endpoints and origins before enabling it", + ), + ), + }; const authority = await loadConfiguredPermissionAuthority(config.value); if (!authority.ok) return { ok: false as const, error: cliError(authority.error) }; @@ -316,7 +333,7 @@ const browserContext = async () => { ok: true as const, authority: authority.value, provider: new CdpBrowserProvider(), - allowedBrowserOrigins: config.value.browserAllowedOrigins, + allowedBrowserOrigins: policy.allowedOrigins, }; }; diff --git a/src/cliElectronCommands.ts b/src/cliElectronCommands.ts index 6c3b0f10a..fc1742753 100644 --- a/src/cliElectronCommands.ts +++ b/src/cliElectronCommands.ts @@ -16,7 +16,11 @@ import { listElectronTargetsInputSchema, } from "./domain/electronObservation.js"; import { electronActiveObservationInputSchema } from "./domain/electronActiveObservation.js"; -import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; +import { + AnalysisCapabilityUnavailableError, + AnalysisInputError, + projectAnalysisError, +} from "./domain/errors.js"; import type { JsonValue } from "./domain/jsonValue.js"; import type { Logger } from "./logger.js"; import { CLI_COMMANDS } from "./cliCommandNames.js"; @@ -150,7 +154,9 @@ const registerElectronTargetList = ( }), run: ({ args, options }) => logCliCommand(logger, "list-electron-targets", async () => { - const context = await electronContext(); + const context = await electronObservationContext( + "list_electron_targets", + ); if (!context.ok) return context.error; const parsed = listElectronTargetsInputSchema.safeParse({ cdp_endpoint: args.endpoint, @@ -186,7 +192,9 @@ const registerElectronPageInspection = ( options: electronPageInspectionOptions, run: ({ args, options }) => logCliCommand(logger, "inspect-electron-page", async () => { - const context = await electronContext(); + const context = await electronObservationContext( + "inspect_electron_page", + ); if (!context.ok) return context.error; const parsed = inspectElectronPageInputSchema.safeParse({ cdp_endpoint: args.endpoint, @@ -268,7 +276,27 @@ const electronContext = async () => { authority: authority.value, provider: new CdpElectronProvider(), activeProvider: new PlaywrightElectronActiveProvider(), - allowedFileRoots: config.value.electronFileRoots, + observationPolicy: config.value.electronObservationPolicy, + }; +}; + +const electronObservationContext = async (operation: string) => { + const context = await electronContext(); + if (!context.ok) return context; + if (context.observationPolicy.status === "disabled") + return { + ok: false as const, + error: cliError( + new AnalysisCapabilityUnavailableError( + "rea-cdp-electron", + operation, + "Electron observation is disabled; configure exact endpoints and file roots before enabling it", + ), + ), + }; + return { + ...context, + allowedFileRoots: context.observationPolicy.fileRoots, }; }; diff --git a/src/cliJavaScriptRuntimeCommands.ts b/src/cliJavaScriptRuntimeCommands.ts index 032dee226..2edd032a4 100644 --- a/src/cliJavaScriptRuntimeCommands.ts +++ b/src/cliJavaScriptRuntimeCommands.ts @@ -9,12 +9,17 @@ import { V8InspectorProvider } from "./browser/V8InspectorProvider.js"; import { CLI_COMMANDS } from "./cliCommandNames.js"; import { logCliCommand } from "./cliLogging.js"; import { parseConfig } from "./config.js"; +import { v8InspectorLocationScopes } from "./config/passiveObservation.js"; import { javascriptRuntimeKindSchema, listJavaScriptRuntimeTargetsInputSchema, observeJavaScriptRuntimeInputSchema, } from "./domain/javascriptRuntimeObservation.js"; -import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; +import { + AnalysisCapabilityUnavailableError, + AnalysisInputError, + projectAnalysisError, +} from "./domain/errors.js"; import type { JsonValue } from "./domain/jsonValue.js"; import type { Logger } from "./logger.js"; @@ -114,7 +119,9 @@ export const registerJavaScriptRuntimeObservationCommands = ( logger, CLI_COMMANDS.listJavaScriptRuntimeTargets, async () => { - const context = await runtimeContext(); + const context = await runtimeContext( + "list_javascript_runtime_targets", + ); if (!context.ok) return context.error; const parsed = listJavaScriptRuntimeTargetsInputSchema.safeParse({ inspector_endpoint: args.endpoint, @@ -148,7 +155,7 @@ export const registerJavaScriptRuntimeObservationCommands = ( options: observeOptionsSchema, run: ({ args, options }) => logCliCommand(logger, CLI_COMMANDS.observeJavaScriptRuntime, async () => { - const context = await runtimeContext(); + const context = await runtimeContext("observe_javascript_runtime"); if (!context.ok) return context.error; const parsed = observeJavaScriptRuntimeInputSchema.safeParse({ inspector_endpoint: args.endpoint, @@ -178,18 +185,31 @@ export const registerJavaScriptRuntimeObservationCommands = ( }); }; -const runtimeContext = async () => { +const runtimeContext = async (operation: string) => { const config = parseConfig(process.env); if (!config.ok) return { ok: false as const, error: cliError(config.error) }; + const policy = config.value.v8InspectorObservationPolicy; + if (policy.status === "disabled") + return { + ok: false as const, + error: cliError( + new AnalysisCapabilityUnavailableError( + "rea-v8-inspector", + operation, + "V8 Inspector observation is disabled; configure exact endpoints and file or origin scopes before enabling it", + ), + ), + }; const authority = await loadConfiguredPermissionAuthority(config.value); if (!authority.ok) return { ok: false as const, error: cliError(authority.error) }; + const scopes = v8InspectorLocationScopes(policy.locations); return { ok: true as const, authority: authority.value, provider: new V8InspectorProvider(), - allowedFileRoots: config.value.v8InspectorFileRoots, - allowedOrigins: config.value.v8InspectorAllowedOrigins, + allowedFileRoots: scopes.fileRoots, + allowedOrigins: scopes.allowedOrigins, }; }; diff --git a/src/cliObservationOptions.ts b/src/cliObservationOptions.ts index a1aa7e9a3..c8efa97a4 100644 --- a/src/cliObservationOptions.ts +++ b/src/cliObservationOptions.ts @@ -70,6 +70,10 @@ export const browserPageInspectionOptions = z.object({ .boolean() .default(false) .describe("Include bounded JavaScript source text"), + sourceCaptureApproved: z + .boolean() + .default(false) + .describe("Approve capturing bounded script source text"), includeStorageKeys: z .boolean() .default(false) diff --git a/src/cliOutput.ts b/src/cliOutput.ts index fdb415fc3..dc3fe8f77 100644 --- a/src/cliOutput.ts +++ b/src/cliOutput.ts @@ -96,7 +96,7 @@ export const sanitizeCliOutput = (output: string): string => { const trimmed = output.trimStart(); if (trimmed.startsWith("{")) { try { - const parsed = JSON.parse(trimmed) as unknown; + const parsed: unknown = JSON.parse(trimmed); const error = validationError(parsed); if (error !== undefined) { const safeError = { diff --git a/src/config/browserScenario.ts b/src/config/browserScenario.ts new file mode 100644 index 000000000..7c7357244 --- /dev/null +++ b/src/config/browserScenario.ts @@ -0,0 +1,148 @@ +import { ConfigurationError } from "../domain/errors.js"; +import type { PermissionCeiling } from "../domain/permissionPolicy.js"; +import { err, ok, type Result } from "../domain/result.js"; +import { + browserEndpointSchema, + browserOriginSchema, +} from "../domain/browserObservation.js"; +import type { Environment } from "./environment.js"; +import { + parseAbsoluteRoots, + parseBrowserArray, + parseStringArray, +} from "./parsers.js"; +import { browserNetworkScope, permissionScope } from "./permissions.js"; + +type BrowserScenarioTargetPolicy = + | { + readonly access: "launch"; + readonly executableRoots: readonly [string, ...string[]]; + } + | { + readonly access: "attach"; + readonly cdpEndpoints: readonly [string, ...string[]]; + } + | { + readonly access: "launch-or-attach"; + readonly executableRoots: readonly [string, ...string[]]; + readonly cdpEndpoints: readonly [string, ...string[]]; + }; + +/** Parsed availability and authority scope for controlled browser scenarios. */ +export type BrowserScenarioPolicy = + | { readonly status: "disabled" } + | { + readonly status: "enabled"; + readonly target: BrowserScenarioTargetPolicy; + readonly allowedOrigins: readonly [string, ...string[]]; + readonly allowedEnvironment: readonly string[]; + }; + +/** Parse controlled browser scenarios into a closed disabled or enabled policy. */ +export const parseBrowserScenarioPolicy = ( + env: Environment, +): Result => { + const executableRoots = parseAbsoluteRoots( + env.REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON, + "REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON", + ); + if (!executableRoots.ok) return executableRoots; + const cdpEndpoints = parseBrowserArray( + env.REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON, + "REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON", + browserEndpointSchema, + 16, + ); + if (!cdpEndpoints.ok) return cdpEndpoints; + const allowedOrigins = parseBrowserArray( + env.REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON, + "REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON", + browserOriginSchema, + 32, + ); + if (!allowedOrigins.ok) return allowedOrigins; + const allowedEnvironment = parseStringArray( + env.REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON, + "REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON", + ); + if (!allowedEnvironment.ok) return allowedEnvironment; + if (env.REA_BROWSER_SCENARIO_ENABLED !== "true") + return ok({ status: "disabled" }); + const [firstOrigin, ...remainingOrigins] = allowedOrigins.value; + if (firstOrigin === undefined) + return err( + new ConfigurationError( + "REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON must encode at least one exact origin when browser scenarios are enabled", + ), + ); + const target = parseTargetPolicy(executableRoots.value, cdpEndpoints.value); + if (!target.ok) return target; + return ok({ + status: "enabled", + target: target.value, + allowedOrigins: [firstOrigin, ...remainingOrigins], + allowedEnvironment: allowedEnvironment.value, + }); +}; + +/** Add the separately permissioned controlled-browser ceiling. */ +export const appendBrowserScenarioCeiling = ( + ceilings: PermissionCeiling[], + policy: BrowserScenarioPolicy, +): void => { + if (policy.status === "disabled") return; + const { executableRoots, cdpEndpoints } = targetScopes(policy.target); + ceilings.push( + permissionScope("browser_automate", [], { + executables: executableRoots, + environment_names: policy.allowedEnvironment, + origins: [...cdpEndpoints, ...policy.allowedOrigins], + network: browserNetworkScope(policy.allowedOrigins), + }), + ); +}; + +const parseTargetPolicy = ( + executableRoots: readonly string[], + cdpEndpoints: readonly string[], +): Result => { + const [firstExecutableRoot, ...remainingExecutableRoots] = executableRoots; + const [firstCdpEndpoint, ...remainingCdpEndpoints] = cdpEndpoints; + if (firstExecutableRoot !== undefined && firstCdpEndpoint !== undefined) + return ok({ + access: "launch-or-attach", + executableRoots: [firstExecutableRoot, ...remainingExecutableRoots], + cdpEndpoints: [firstCdpEndpoint, ...remainingCdpEndpoints], + }); + if (firstExecutableRoot !== undefined) + return ok({ + access: "launch", + executableRoots: [firstExecutableRoot, ...remainingExecutableRoots], + }); + if (firstCdpEndpoint !== undefined) + return ok({ + access: "attach", + cdpEndpoints: [firstCdpEndpoint, ...remainingCdpEndpoints], + }); + return err( + new ConfigurationError( + "Browser scenarios require at least one executable root or loopback CDP endpoint when enabled", + ), + ); +}; + +const targetScopes = ( + target: BrowserScenarioTargetPolicy, +): { + readonly executableRoots: readonly string[]; + readonly cdpEndpoints: readonly string[]; +} => { + switch (target.access) { + case "launch": + return { executableRoots: target.executableRoots, cdpEndpoints: [] }; + case "attach": + return { executableRoots: [], cdpEndpoints: target.cdpEndpoints }; + case "launch-or-attach": + return target; + } +}; diff --git a/src/config/electronAutomation.ts b/src/config/electronAutomation.ts index c1916c060..58d068f5c 100644 --- a/src/config/electronAutomation.ts +++ b/src/config/electronAutomation.ts @@ -1,21 +1,23 @@ -import { isAbsolute } from "node:path"; - import type { PermissionCeiling } from "../domain/permissionPolicy.js"; import { ConfigurationError } from "../domain/errors.js"; import { err, ok, type Result } from "../domain/result.js"; import { permissionScope } from "./permissions.js"; -import { parseStringArray } from "./parsers.js"; +import { parseAbsoluteRoots } from "./parsers.js"; import type { Environment } from "./environment.js"; -export interface ElectronAutomationArrays { - readonly electronAutomationExecutableRoots: readonly string[]; - readonly electronAutomationApplicationRoots: readonly string[]; -} +/** Parsed availability and authority scope for active Electron automation. */ +export type ElectronAutomationPolicy = + | { readonly status: "disabled" } + | { + readonly status: "enabled"; + readonly executableRoots: readonly [string, ...string[]]; + readonly applicationRoots: readonly [string, ...string[]]; + }; -/** Parse the exact filesystem roots admitted for active Electron automation. */ -export const parseElectronAutomationArrays = ( +/** Parse active Electron automation into a closed disabled or enabled policy. */ +export const parseElectronAutomationPolicy = ( env: Environment, -): Result => { +): Result => { const executableRoots = parseAbsoluteRoots( env.REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON, "REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON", @@ -26,38 +28,41 @@ export const parseElectronAutomationArrays = ( "REA_ELECTRON_AUTOMATE_APPLICATION_ROOTS_JSON", ); if (!applicationRoots.ok) return applicationRoots; + if (env.REA_ELECTRON_AUTOMATE_ENABLED !== "true") + return ok({ status: "disabled" }); + const [firstExecutableRoot, ...remainingExecutableRoots] = + executableRoots.value; + if (firstExecutableRoot === undefined) + return err( + new ConfigurationError( + "REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON must encode at least one absolute root when Electron automation is enabled", + ), + ); + const [firstApplicationRoot, ...remainingApplicationRoots] = + applicationRoots.value; + if (firstApplicationRoot === undefined) + return err( + new ConfigurationError( + "REA_ELECTRON_AUTOMATE_APPLICATION_ROOTS_JSON must encode at least one absolute root when Electron automation is enabled", + ), + ); return ok({ - electronAutomationExecutableRoots: executableRoots.value, - electronAutomationApplicationRoots: applicationRoots.value, + status: "enabled", + executableRoots: [firstExecutableRoot, ...remainingExecutableRoots], + applicationRoots: [firstApplicationRoot, ...remainingApplicationRoots], }); }; /** Add the separately permissioned, no-network Electron automation ceiling. */ export const appendElectronAutomationCeiling = ( ceilings: PermissionCeiling[], - env: Environment, - arrays: ElectronAutomationArrays, + policy: ElectronAutomationPolicy, ): void => { - if (env.REA_ELECTRON_AUTOMATE_ENABLED !== "true") return; + if (policy.status === "disabled") return; ceilings.push( - permissionScope( - "electron_automate", - arrays.electronAutomationApplicationRoots, - { - executables: arrays.electronAutomationExecutableRoots, - network: "external", - }, - ), + permissionScope("electron_automate", policy.applicationRoots, { + executables: policy.executableRoots, + network: "external", + }), ); }; - -const parseAbsoluteRoots = ( - value: string, - name: string, -): Result => { - const parsed = parseStringArray(value, name); - if (!parsed.ok) return parsed; - return parsed.value.some((root) => !isAbsolute(root)) - ? err(new ConfigurationError(`${name} must encode absolute roots`)) - : parsed; -}; diff --git a/src/config/javascriptReplay.ts b/src/config/javascriptReplay.ts new file mode 100644 index 000000000..2a9ddd862 --- /dev/null +++ b/src/config/javascriptReplay.ts @@ -0,0 +1,64 @@ +import type { + EnabledJavaScriptReplayPolicy, + JavaScriptReplayPolicy, +} from "../application/JavaScriptReplayPlanning.js"; +import { ConfigurationError } from "../domain/errors.js"; +import type { PermissionCeiling } from "../domain/permissionPolicy.js"; +import { err, ok, type Result } from "../domain/result.js"; +import type { Environment } from "./environment.js"; +import { parseAbsoluteRoots } from "./parsers.js"; +import { permissionScope } from "./permissions.js"; + +/** Parse controlled replay configuration into disabled or fully enabled state. */ +export const parseJavaScriptReplayPolicy = ( + env: Environment, +): Result => { + const roots = parseAbsoluteRoots( + env.REA_JAVASCRIPT_REPLAY_ROOTS_JSON, + "REA_JAVASCRIPT_REPLAY_ROOTS_JSON", + ); + if (!roots.ok) return roots; + if (env.REA_JAVASCRIPT_REPLAY_ENABLED !== "true") + return ok({ status: "disabled" }); + const [firstRoot, ...remainingRoots] = roots.value; + if (firstRoot === undefined) + return err( + new ConfigurationError( + "REA_JAVASCRIPT_REPLAY_ROOTS_JSON must encode at least one absolute root when JavaScript replay is enabled", + ), + ); + return ok({ + status: "enabled", + roots: [firstRoot, ...remainingRoots], + nodePath: env.REA_JAVASCRIPT_REPLAY_NODE_PATH, + bubblewrapPath: env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH, + systemdRunPath: env.REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH, + systemctlPath: env.REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH, + shellPath: env.REA_JAVASCRIPT_REPLAY_SHELL_PATH, + }); +}; + +/** Add the exact controlled replay ceiling when replay is enabled. */ +export const appendJavaScriptReplayCeiling = ( + ceilings: PermissionCeiling[], + policy: JavaScriptReplayPolicy, +): void => { + if (policy.status === "disabled") return; + ceilings.push( + permissionScope("javascript_replay", policy.roots, { + executables: replayExecutables(policy), + network: "none", + mount: true, + }), + ); +}; + +const replayExecutables = ( + policy: EnabledJavaScriptReplayPolicy, +): readonly string[] => [ + policy.nodePath, + policy.bubblewrapPath, + policy.systemdRunPath, + policy.systemctlPath, + policy.shellPath, +]; diff --git a/src/config/managedRuntime.ts b/src/config/managedRuntime.ts new file mode 100644 index 000000000..eea91dc79 --- /dev/null +++ b/src/config/managedRuntime.ts @@ -0,0 +1,41 @@ +import type { ManagedRuntimePolicy } from "../application/ManagedRuntimeCorrelationService.js"; +import { ConfigurationError } from "../domain/errors.js"; +import type { PermissionCeiling } from "../domain/permissionPolicy.js"; +import { err, ok, type Result } from "../domain/result.js"; +import type { Environment } from "./environment.js"; +import { permissionScope } from "./permissions.js"; + +/** Parse managed runtime correlation into a closed disabled or enabled policy. */ +export const parseManagedRuntimePolicy = ( + env: Environment, + roots: readonly string[], +): Result => { + if (env.REA_MANAGED_RUNTIME_ENABLED !== "true") + return ok({ status: "disabled" }); + const [firstRoot, ...remainingRoots] = roots; + if (firstRoot === undefined) + return err( + new ConfigurationError( + "REA_MANAGED_RUNTIME_ROOTS_JSON must encode at least one absolute root when managed runtime correlation is enabled", + ), + ); + return ok({ + status: "enabled", + roots: [firstRoot, ...remainingRoots], + executablePath: env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH, + }); +}; + +/** Add the separately permissioned, no-network managed runtime ceiling. */ +export const appendManagedRuntimeCeiling = ( + ceilings: PermissionCeiling[], + policy: ManagedRuntimePolicy, +): void => { + if (policy.status === "disabled") return; + ceilings.push( + permissionScope("managed_runtime", policy.roots, { + executables: [policy.executablePath], + network: "none", + }), + ); +}; diff --git a/src/config/parseConfig.ts b/src/config/parseConfig.ts index 436f7bd94..41cacf84e 100644 --- a/src/config/parseConfig.ts +++ b/src/config/parseConfig.ts @@ -1,31 +1,48 @@ -import { isAbsolute } from "node:path"; - import { ConfigurationError } from "../domain/errors.js"; -import { err, ok, type Result } from "../domain/result.js"; +import { ok, type Result } from "../domain/result.js"; import { parseEnvironment, type Environment } from "./environment.js"; import { parseStringArray, - parseBrowserArray, - parseElectronFileRoots, + parseAbsoluteRoots, parseLoaderArgs, } from "./parsers.js"; import { filePolicy, permissionScope, administratorGrants, - browserNetworkScope, } from "./permissions.js"; import type { AppConfig } from "./types.js"; import type { PermissionCeiling } from "../domain/permissionPolicy.js"; -import { - browserEndpointSchema, - browserOriginSchema, -} from "../domain/browserObservation.js"; import { appendElectronAutomationCeiling, - parseElectronAutomationArrays, - type ElectronAutomationArrays, + parseElectronAutomationPolicy, + type ElectronAutomationPolicy, } from "./electronAutomation.js"; +import type { ManagedRuntimePolicy } from "../application/ManagedRuntimeCorrelationService.js"; +import { + appendBrowserScenarioCeiling, + parseBrowserScenarioPolicy, + type BrowserScenarioPolicy, +} from "./browserScenario.js"; +import { + appendManagedRuntimeCeiling, + parseManagedRuntimePolicy, +} from "./managedRuntime.js"; +import { + appendJavaScriptReplayCeiling, + parseJavaScriptReplayPolicy, +} from "./javascriptReplay.js"; +import type { JavaScriptReplayPolicy } from "../application/JavaScriptReplayPlanning.js"; +import { + appendProcessCaptureCeiling, + parseProcessExecutionPolicy, +} from "./processCapture.js"; +import type { ProcessExecutionPolicy } from "../domain/processCapture.js"; +import { + appendPassiveObservationCeilings, + parsePassiveObservationPolicies, + type PassiveObservationPolicies, +} from "./passiveObservation.js"; const DEFAULT_HOPPER_LAUNCHER_PATH = "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper"; @@ -34,66 +51,30 @@ const defaultHopperLauncherPath = (): string => ? "/opt/hopper/bin/Hopper" : DEFAULT_HOPPER_LAUNCHER_PATH; -interface ParsedArrays extends ElectronAutomationArrays { +interface ParsedArrays { readonly loaderArgs: readonly string[]; - readonly executableRoots: readonly string[]; - readonly workingRoots: readonly string[]; - readonly allowedEnvironment: readonly string[]; readonly evidenceRoots: readonly string[]; readonly investigationInputRoots: readonly string[]; readonly analysisSnapshotRoots: readonly string[]; readonly referenceRoots: readonly string[]; readonly secretPatterns: readonly string[]; - readonly browserEndpoints: readonly string[]; - readonly browserOrigins: readonly string[]; - readonly browserScenarioExecutableRoots: readonly string[]; - readonly browserScenarioEndpoints: readonly string[]; - readonly browserScenarioOrigins: readonly string[]; - readonly browserScenarioEnvironment: readonly string[]; - readonly electronEndpoints: readonly string[]; - readonly electronFileRoots: readonly string[]; - readonly v8InspectorEndpoints: readonly string[]; - readonly v8InspectorFileRoots: readonly string[]; - readonly v8InspectorOrigins: readonly string[]; - readonly javascriptReplayRoots: readonly string[]; readonly managedRuntimeRoots: readonly string[]; } -type ParsedObservationArrays = Pick< - ParsedArrays, - | "browserEndpoints" - | "browserOrigins" - | "browserScenarioExecutableRoots" - | "browserScenarioEndpoints" - | "browserScenarioOrigins" - | "browserScenarioEnvironment" - | "electronEndpoints" - | "electronFileRoots" - | "v8InspectorEndpoints" - | "v8InspectorFileRoots" - | "v8InspectorOrigins" ->; +interface ParsedPolicies { + readonly passiveObservation: PassiveObservationPolicies; + readonly processCapture: ProcessExecutionPolicy; + readonly browserScenario: BrowserScenarioPolicy; + readonly electronAutomation: ElectronAutomationPolicy; + readonly javascriptReplay: JavaScriptReplayPolicy; + readonly managedRuntime: ManagedRuntimePolicy; +} const parseAllArrays = ( env: Environment, ): Result => { const loaderArgs = parseLoaderArgs(env.HOPPER_LOADER_ARGS_JSON); if (!loaderArgs.ok) return loaderArgs; - const executableRoots = parseStringArray( - env.REA_PROCESS_EXECUTABLE_ROOTS_JSON, - "REA_PROCESS_EXECUTABLE_ROOTS_JSON", - ); - if (!executableRoots.ok) return executableRoots; - const workingRoots = parseStringArray( - env.REA_PROCESS_WORKING_ROOTS_JSON, - "REA_PROCESS_WORKING_ROOTS_JSON", - ); - if (!workingRoots.ok) return workingRoots; - const allowedEnvironment = parseStringArray( - env.REA_PROCESS_ALLOWED_ENV_JSON, - "REA_PROCESS_ALLOWED_ENV_JSON", - ); - if (!allowedEnvironment.ok) return allowedEnvironment; const evidenceRoots = parseStringArray( env.REA_EVIDENCE_ROOTS_JSON, "REA_EVIDENCE_ROOTS_JSON", @@ -119,15 +100,6 @@ const parseAllArrays = ( "REA_REFERENCE_SECRET_PATTERNS_JSON", ); if (!secretPatterns.ok) return secretPatterns; - const observations = parseObservationArrays(env); - if (!observations.ok) return observations; - const electronAutomation = parseElectronAutomationArrays(env); - if (!electronAutomation.ok) return electronAutomation; - const javascriptReplayRoots = parseAbsoluteRoots( - env.REA_JAVASCRIPT_REPLAY_ROOTS_JSON, - "REA_JAVASCRIPT_REPLAY_ROOTS_JSON", - ); - if (!javascriptReplayRoots.ok) return javascriptReplayRoots; const managedRuntimeRoots = parseAbsoluteRoots( env.REA_MANAGED_RUNTIME_ROOTS_JSON, "REA_MANAGED_RUNTIME_ROOTS_JSON", @@ -135,195 +107,15 @@ const parseAllArrays = ( if (!managedRuntimeRoots.ok) return managedRuntimeRoots; return ok({ loaderArgs: loaderArgs.value, - executableRoots: executableRoots.value, - workingRoots: workingRoots.value, - allowedEnvironment: allowedEnvironment.value, evidenceRoots: evidenceRoots.value, investigationInputRoots: investigationInputRoots.value, analysisSnapshotRoots: analysisSnapshotRoots.value, referenceRoots: referenceRoots.value, secretPatterns: secretPatterns.value, - ...observations.value, - ...electronAutomation.value, - javascriptReplayRoots: javascriptReplayRoots.value, managedRuntimeRoots: managedRuntimeRoots.value, }); }; -const parseObservationArrays = ( - env: Environment, -): Result => { - const browserEndpoints = parseBrowserArray( - env.REA_BROWSER_CDP_ENDPOINTS_JSON, - "REA_BROWSER_CDP_ENDPOINTS_JSON", - browserEndpointSchema, - 16, - ); - if (!browserEndpoints.ok) return browserEndpoints; - const browserOrigins = parseBrowserArray( - env.REA_BROWSER_ALLOWED_ORIGINS_JSON, - "REA_BROWSER_ALLOWED_ORIGINS_JSON", - browserOriginSchema, - 32, - ); - if (!browserOrigins.ok) return browserOrigins; - const browserScenarioExecutableRoots = parseAbsoluteRoots( - env.REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON, - "REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON", - ); - if (!browserScenarioExecutableRoots.ok) return browserScenarioExecutableRoots; - const browserScenarioEndpoints = parseBrowserArray( - env.REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON, - "REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON", - browserEndpointSchema, - 16, - ); - if (!browserScenarioEndpoints.ok) return browserScenarioEndpoints; - const browserScenarioOrigins = parseBrowserArray( - env.REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON, - "REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON", - browserOriginSchema, - 32, - ); - if (!browserScenarioOrigins.ok) return browserScenarioOrigins; - const browserScenarioEnvironment = parseStringArray( - env.REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON, - "REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON", - ); - if (!browserScenarioEnvironment.ok) return browserScenarioEnvironment; - const electronEndpoints = parseBrowserArray( - env.REA_ELECTRON_CDP_ENDPOINTS_JSON, - "REA_ELECTRON_CDP_ENDPOINTS_JSON", - browserEndpointSchema, - 16, - ); - if (!electronEndpoints.ok) return electronEndpoints; - const electronFileRoots = parseElectronFileRoots( - env.REA_ELECTRON_FILE_ROOTS_JSON, - ); - if (!electronFileRoots.ok) return electronFileRoots; - const v8InspectorEndpoints = parseBrowserArray( - env.REA_V8_INSPECTOR_ENDPOINTS_JSON, - "REA_V8_INSPECTOR_ENDPOINTS_JSON", - browserEndpointSchema, - 16, - ); - if (!v8InspectorEndpoints.ok) return v8InspectorEndpoints; - const v8InspectorFileRoots = parseAbsoluteRoots( - env.REA_V8_INSPECTOR_FILE_ROOTS_JSON, - "REA_V8_INSPECTOR_FILE_ROOTS_JSON", - ); - if (!v8InspectorFileRoots.ok) return v8InspectorFileRoots; - const v8InspectorOrigins = parseBrowserArray( - env.REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON, - "REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON", - browserOriginSchema, - 32, - ); - if (!v8InspectorOrigins.ok) return v8InspectorOrigins; - return ok({ - browserEndpoints: browserEndpoints.value, - browserOrigins: browserOrigins.value, - browserScenarioExecutableRoots: browserScenarioExecutableRoots.value, - browserScenarioEndpoints: browserScenarioEndpoints.value, - browserScenarioOrigins: browserScenarioOrigins.value, - browserScenarioEnvironment: browserScenarioEnvironment.value, - electronEndpoints: electronEndpoints.value, - electronFileRoots: electronFileRoots.value, - v8InspectorEndpoints: v8InspectorEndpoints.value, - v8InspectorFileRoots: v8InspectorFileRoots.value, - v8InspectorOrigins: v8InspectorOrigins.value, - }); -}; - -const parseAbsoluteRoots = ( - value: string, - name: string, -): Result => { - const parsed = parseStringArray(value, name); - if (!parsed.ok) return parsed; - return parsed.value.some((root) => !isAbsolute(root)) - ? err(new ConfigurationError(`${name} must encode absolute roots`)) - : parsed; -}; - -const appendProcessCaptureCeiling = ( - ceilings: PermissionCeiling[], - env: Environment, - arrays: ParsedArrays, -): void => { - if (env.REA_PROCESS_CAPTURE_ENABLED !== "true") return; - ceilings.push( - permissionScope("process_capture", arrays.workingRoots, { - executables: arrays.executableRoots, - environment_names: arrays.allowedEnvironment, - network: - env.REA_PROCESS_ALLOW_EXTERNAL_NETWORK === "true" ? "external" : "none", - }), - ); -}; - -const appendBrowserObservationCeiling = ( - ceilings: PermissionCeiling[], - env: Environment, - arrays: ParsedArrays, -): void => { - if (env.REA_BROWSER_OBSERVE_ENABLED !== "true") return; - ceilings.push( - permissionScope("browser_observe", [], { - origins: [...arrays.browserEndpoints, ...arrays.browserOrigins], - network: browserNetworkScope(arrays.browserOrigins), - }), - ); -}; - -const appendBrowserScenarioCeiling = ( - ceilings: PermissionCeiling[], - env: Environment, - arrays: ParsedArrays, -): void => { - if (env.REA_BROWSER_SCENARIO_ENABLED !== "true") return; - ceilings.push( - permissionScope("browser_automate", [], { - executables: arrays.browserScenarioExecutableRoots, - environment_names: arrays.browserScenarioEnvironment, - origins: [ - ...arrays.browserScenarioEndpoints, - ...arrays.browserScenarioOrigins, - ], - network: browserNetworkScope(arrays.browserScenarioOrigins), - }), - ); -}; - -const appendElectronObservationCeiling = ( - ceilings: PermissionCeiling[], - env: Environment, - arrays: ParsedArrays, -): void => { - if (env.REA_ELECTRON_OBSERVE_ENABLED !== "true") return; - ceilings.push( - permissionScope("electron_observe", arrays.electronFileRoots, { - origins: arrays.electronEndpoints, - network: "loopback", - }), - ); -}; - -const appendV8InspectorObservationCeiling = ( - ceilings: PermissionCeiling[], - env: Environment, - arrays: ParsedArrays, -): void => { - if (env.REA_V8_INSPECTOR_OBSERVE_ENABLED !== "true") return; - ceilings.push( - permissionScope("v8_inspector_observe", arrays.v8InspectorFileRoots, { - origins: [...arrays.v8InspectorEndpoints, ...arrays.v8InspectorOrigins], - network: "loopback", - }), - ); -}; - const appendNativeMountCeiling = ( ceilings: PermissionCeiling[], env: Environment, @@ -332,44 +124,10 @@ const appendNativeMountCeiling = ( ceilings.push(permissionScope("native_mount", [], { mount: true })); }; -const appendJavaScriptReplayCeiling = ( - ceilings: PermissionCeiling[], - env: Environment, - arrays: ParsedArrays, -): void => { - if (env.REA_JAVASCRIPT_REPLAY_ENABLED !== "true") return; - ceilings.push( - permissionScope("javascript_replay", arrays.javascriptReplayRoots, { - executables: [ - env.REA_JAVASCRIPT_REPLAY_NODE_PATH, - env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH, - env.REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH, - env.REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH, - env.REA_JAVASCRIPT_REPLAY_SHELL_PATH, - ], - network: "none", - mount: true, - }), - ); -}; - -const appendManagedRuntimeCeiling = ( - ceilings: PermissionCeiling[], - env: Environment, - arrays: ParsedArrays, -): void => { - if (env.REA_MANAGED_RUNTIME_ENABLED !== "true") return; - ceilings.push( - permissionScope("managed_runtime", arrays.managedRuntimeRoots, { - executables: [env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH], - network: "none", - }), - ); -}; - const buildPermissionCeilings = ( env: Environment, arrays: ParsedArrays, + policies: ParsedPolicies, ): readonly PermissionCeiling[] => { const ceilings: PermissionCeiling[] = [ permissionScope("evidence_read", arrays.evidenceRoots), @@ -382,15 +140,13 @@ const buildPermissionCeilings = ( permissionScope("artifact_extract", ["/"]), permissionScope("reference_read", arrays.referenceRoots), ]; - appendProcessCaptureCeiling(ceilings, env, arrays); - appendBrowserObservationCeiling(ceilings, env, arrays); - appendBrowserScenarioCeiling(ceilings, env, arrays); - appendElectronObservationCeiling(ceilings, env, arrays); - appendElectronAutomationCeiling(ceilings, env, arrays); - appendV8InspectorObservationCeiling(ceilings, env, arrays); + appendProcessCaptureCeiling(ceilings, policies.processCapture); + appendPassiveObservationCeilings(ceilings, policies.passiveObservation); + appendBrowserScenarioCeiling(ceilings, policies.browserScenario); + appendElectronAutomationCeiling(ceilings, policies.electronAutomation); appendNativeMountCeiling(ceilings, env); - appendJavaScriptReplayCeiling(ceilings, env, arrays); - appendManagedRuntimeCeiling(ceilings, env, arrays); + appendJavaScriptReplayCeiling(ceilings, policies.javascriptReplay); + appendManagedRuntimeCeiling(ceilings, policies.managedRuntime); return ceilings; }; @@ -398,6 +154,7 @@ const buildAppConfig = ( env: Environment, arrays: ParsedArrays, permissionCeilings: readonly PermissionCeiling[], + policies: ParsedPolicies, ): AppConfig => ({ analysisProvider: env.REA_ANALYSIS_PROVIDER, ghidraInstallDir: env.GHIDRA_INSTALL_DIR, @@ -408,13 +165,7 @@ const buildAppConfig = ( hopperTargetKind: env.HOPPER_TARGET_KIND, hopperLoaderArgs: arrays.loaderArgs, logLevel: env.REA_LOG_LEVEL, - processExecutionPolicy: { - enabled: env.REA_PROCESS_CAPTURE_ENABLED === "true", - executableRoots: arrays.executableRoots, - workingRoots: arrays.workingRoots, - allowedEnvironment: arrays.allowedEnvironment, - allowExternalNetwork: env.REA_PROCESS_ALLOW_EXTERNAL_NETWORK === "true", - }, + processExecutionPolicy: policies.processCapture, artifactNativeMountEnabled: env.REA_ARTIFACT_NATIVE_MOUNT_ENABLED === "true", artifactIntegrityContinueEnabled: env.REA_ARTIFACT_INTEGRITY_CONTINUE_ENABLED === "true", @@ -429,43 +180,13 @@ const buildAppConfig = ( maxDepth: 32, maxPathBytes: 4_096, }, - browserObservationEnabled: env.REA_BROWSER_OBSERVE_ENABLED === "true", - browserCdpEndpoints: arrays.browserEndpoints, - browserAllowedOrigins: arrays.browserOrigins, - browserScenarioPolicy: { - enabled: env.REA_BROWSER_SCENARIO_ENABLED === "true", - executableRoots: arrays.browserScenarioExecutableRoots, - cdpEndpoints: arrays.browserScenarioEndpoints, - allowedOrigins: arrays.browserScenarioOrigins, - allowedEnvironment: arrays.browserScenarioEnvironment, - }, - electronObservationEnabled: env.REA_ELECTRON_OBSERVE_ENABLED === "true", - electronCdpEndpoints: arrays.electronEndpoints, - electronFileRoots: arrays.electronFileRoots, - electronAutomationPolicy: { - enabled: env.REA_ELECTRON_AUTOMATE_ENABLED === "true", - executableRoots: arrays.electronAutomationExecutableRoots, - applicationRoots: arrays.electronAutomationApplicationRoots, - }, - v8InspectorObservationEnabled: - env.REA_V8_INSPECTOR_OBSERVE_ENABLED === "true", - v8InspectorEndpoints: arrays.v8InspectorEndpoints, - v8InspectorFileRoots: arrays.v8InspectorFileRoots, - v8InspectorAllowedOrigins: arrays.v8InspectorOrigins, - javascriptReplayPolicy: { - enabled: env.REA_JAVASCRIPT_REPLAY_ENABLED === "true", - roots: arrays.javascriptReplayRoots, - nodePath: env.REA_JAVASCRIPT_REPLAY_NODE_PATH, - bubblewrapPath: env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH, - systemdRunPath: env.REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH, - systemctlPath: env.REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH, - shellPath: env.REA_JAVASCRIPT_REPLAY_SHELL_PATH, - }, - managedRuntimePolicy: { - enabled: env.REA_MANAGED_RUNTIME_ENABLED === "true", - roots: arrays.managedRuntimeRoots, - executablePath: env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH, - }, + browserObservationPolicy: policies.passiveObservation.browser, + browserScenarioPolicy: policies.browserScenario, + electronObservationPolicy: policies.passiveObservation.electron, + electronAutomationPolicy: policies.electronAutomation, + v8InspectorObservationPolicy: policies.passiveObservation.v8Inspector, + javascriptReplayPolicy: policies.javascriptReplay, + managedRuntimePolicy: policies.managedRuntime, permissionCeilings, administratorPermissionGrants: administratorGrants( permissionCeilings.filter( @@ -495,11 +216,44 @@ export const parseConfig = ( if (!envResult.ok) return envResult; const arraysResult = parseAllArrays(envResult.value); if (!arraysResult.ok) return arraysResult; + const passiveObservationPolicies = parsePassiveObservationPolicies( + envResult.value, + ); + if (!passiveObservationPolicies.ok) return passiveObservationPolicies; + const processCapturePolicy = parseProcessExecutionPolicy(envResult.value); + if (!processCapturePolicy.ok) return processCapturePolicy; + const browserScenarioPolicy = parseBrowserScenarioPolicy(envResult.value); + if (!browserScenarioPolicy.ok) return browserScenarioPolicy; + const electronAutomationPolicy = parseElectronAutomationPolicy( + envResult.value, + ); + if (!electronAutomationPolicy.ok) return electronAutomationPolicy; + const javascriptReplayPolicy = parseJavaScriptReplayPolicy(envResult.value); + if (!javascriptReplayPolicy.ok) return javascriptReplayPolicy; + const managedRuntimePolicy = parseManagedRuntimePolicy( + envResult.value, + arraysResult.value.managedRuntimeRoots, + ); + if (!managedRuntimePolicy.ok) return managedRuntimePolicy; + const policies = { + passiveObservation: passiveObservationPolicies.value, + processCapture: processCapturePolicy.value, + browserScenario: browserScenarioPolicy.value, + electronAutomation: electronAutomationPolicy.value, + javascriptReplay: javascriptReplayPolicy.value, + managedRuntime: managedRuntimePolicy.value, + } satisfies ParsedPolicies; const permissionCeilings = buildPermissionCeilings( envResult.value, arraysResult.value, + policies, ); return ok( - buildAppConfig(envResult.value, arraysResult.value, permissionCeilings), + buildAppConfig( + envResult.value, + arraysResult.value, + permissionCeilings, + policies, + ), ); }; diff --git a/src/config/parsers.ts b/src/config/parsers.ts index 4976ed598..de3752e51 100644 --- a/src/config/parsers.ts +++ b/src/config/parsers.ts @@ -1,8 +1,8 @@ import { z } from "zod"; +import { isAbsolute } from "node:path"; import { ConfigurationError } from "../domain/errors.js"; import { err, ok, type Result } from "../domain/result.js"; -import {} from "../domain/browserObservation.js"; import { electronFileRootsSchema } from "../domain/electronObservation.js"; export const parseStringArray = ( @@ -29,6 +29,18 @@ export const parseStringArray = ( } }; +/** Parse a JSON string array whose members must all be absolute paths. */ +export const parseAbsoluteRoots = ( + encoded: string, + name: string, +): Result => { + const parsed = parseStringArray(encoded, name); + if (!parsed.ok) return parsed; + return parsed.value.some((root) => !isAbsolute(root)) + ? err(new ConfigurationError(`${name} must encode absolute roots`)) + : parsed; +}; + export const parseBrowserArray = ( encoded: string, name: string, diff --git a/src/config/passiveObservation.ts b/src/config/passiveObservation.ts new file mode 100644 index 000000000..41cd54bef --- /dev/null +++ b/src/config/passiveObservation.ts @@ -0,0 +1,294 @@ +import { ConfigurationError } from "../domain/errors.js"; +import type { PermissionCeiling } from "../domain/permissionPolicy.js"; +import { err, ok, type Result } from "../domain/result.js"; +import { + browserEndpointSchema, + browserOriginSchema, +} from "../domain/browserObservation.js"; +import type { Environment } from "./environment.js"; +import { + parseAbsoluteRoots, + parseBrowserArray, + parseElectronFileRoots, +} from "./parsers.js"; +import { browserNetworkScope, permissionScope } from "./permissions.js"; + +type DisabledObservationPolicy = { readonly status: "disabled" }; + +/** Parsed authority scope for passive browser observation. */ +export type BrowserObservationPolicy = + | DisabledObservationPolicy + | { + readonly status: "enabled"; + readonly cdpEndpoints: readonly [string, ...string[]]; + readonly allowedOrigins: readonly [string, ...string[]]; + }; + +/** Parsed authority scope for passive Electron observation. */ +export type ElectronObservationPolicy = + | DisabledObservationPolicy + | { + readonly status: "enabled"; + readonly cdpEndpoints: readonly [string, ...string[]]; + readonly fileRoots: readonly [string, ...string[]]; + }; + +/** Parsed location authority for passive V8 Inspector observation. */ +export type V8InspectorLocationPolicy = + | { + readonly scope: "files"; + readonly fileRoots: readonly [string, ...string[]]; + } + | { + readonly scope: "origins"; + readonly allowedOrigins: readonly [string, ...string[]]; + } + | { + readonly scope: "files-and-origins"; + readonly fileRoots: readonly [string, ...string[]]; + readonly allowedOrigins: readonly [string, ...string[]]; + }; + +/** Parsed authority scope for passive V8 Inspector observation. */ +export type V8InspectorObservationPolicy = + | DisabledObservationPolicy + | { + readonly status: "enabled"; + readonly endpoints: readonly [string, ...string[]]; + readonly locations: V8InspectorLocationPolicy; + }; + +/** Complete parsed passive-observation policy family. */ +export interface PassiveObservationPolicies { + readonly browser: BrowserObservationPolicy; + readonly electron: ElectronObservationPolicy; + readonly v8Inspector: V8InspectorObservationPolicy; +} + +/** Parse every passive observation capability into closed policy variants. */ +export const parsePassiveObservationPolicies = ( + env: Environment, +): Result => { + const browser = parseBrowserObservationPolicy(env); + if (!browser.ok) return browser; + const electron = parseElectronObservationPolicy(env); + if (!electron.ok) return electron; + const v8Inspector = parseV8InspectorObservationPolicy(env); + if (!v8Inspector.ok) return v8Inspector; + return ok({ + browser: browser.value, + electron: electron.value, + v8Inspector: v8Inspector.value, + }); +}; + +/** Add permission ceilings for each enabled passive observation policy. */ +export const appendPassiveObservationCeilings = ( + ceilings: PermissionCeiling[], + policies: PassiveObservationPolicies, +): void => { + appendBrowserCeiling(ceilings, policies.browser); + appendElectronCeiling(ceilings, policies.electron); + appendV8InspectorCeiling(ceilings, policies.v8Inspector); +}; + +/** Project the legal file and origin scopes from an enabled V8 policy. */ +export const v8InspectorLocationScopes = ( + locations: V8InspectorLocationPolicy, +): { + readonly fileRoots: readonly string[]; + readonly allowedOrigins: readonly string[]; +} => { + switch (locations.scope) { + case "files": + return { fileRoots: locations.fileRoots, allowedOrigins: [] }; + case "origins": + return { fileRoots: [], allowedOrigins: locations.allowedOrigins }; + case "files-and-origins": + return locations; + } +}; + +const parseBrowserObservationPolicy = ( + env: Environment, +): Result => { + const endpoints = parseBrowserArray( + env.REA_BROWSER_CDP_ENDPOINTS_JSON, + "REA_BROWSER_CDP_ENDPOINTS_JSON", + browserEndpointSchema, + 16, + ); + if (!endpoints.ok) return endpoints; + const origins = parseBrowserArray( + env.REA_BROWSER_ALLOWED_ORIGINS_JSON, + "REA_BROWSER_ALLOWED_ORIGINS_JSON", + browserOriginSchema, + 32, + ); + if (!origins.ok) return origins; + if (env.REA_BROWSER_OBSERVE_ENABLED !== "true") + return ok({ status: "disabled" }); + const parsedEndpoints = requireFirst( + endpoints.value, + "REA_BROWSER_CDP_ENDPOINTS_JSON must encode at least one loopback endpoint when browser observation is enabled", + ); + if (!parsedEndpoints.ok) return parsedEndpoints; + const parsedOrigins = requireFirst( + origins.value, + "REA_BROWSER_ALLOWED_ORIGINS_JSON must encode at least one exact origin when browser observation is enabled", + ); + if (!parsedOrigins.ok) return parsedOrigins; + return ok({ + status: "enabled", + cdpEndpoints: parsedEndpoints.value, + allowedOrigins: parsedOrigins.value, + }); +}; + +const parseElectronObservationPolicy = ( + env: Environment, +): Result => { + const endpoints = parseBrowserArray( + env.REA_ELECTRON_CDP_ENDPOINTS_JSON, + "REA_ELECTRON_CDP_ENDPOINTS_JSON", + browserEndpointSchema, + 16, + ); + if (!endpoints.ok) return endpoints; + const roots = parseElectronFileRoots(env.REA_ELECTRON_FILE_ROOTS_JSON); + if (!roots.ok) return roots; + if (env.REA_ELECTRON_OBSERVE_ENABLED !== "true") + return ok({ status: "disabled" }); + const parsedEndpoints = requireFirst( + endpoints.value, + "REA_ELECTRON_CDP_ENDPOINTS_JSON must encode at least one loopback endpoint when Electron observation is enabled", + ); + if (!parsedEndpoints.ok) return parsedEndpoints; + const parsedRoots = requireFirst( + roots.value, + "REA_ELECTRON_FILE_ROOTS_JSON must encode at least one absolute root when Electron observation is enabled", + ); + if (!parsedRoots.ok) return parsedRoots; + return ok({ + status: "enabled", + cdpEndpoints: parsedEndpoints.value, + fileRoots: parsedRoots.value, + }); +}; + +const parseV8InspectorObservationPolicy = ( + env: Environment, +): Result => { + const endpoints = parseBrowserArray( + env.REA_V8_INSPECTOR_ENDPOINTS_JSON, + "REA_V8_INSPECTOR_ENDPOINTS_JSON", + browserEndpointSchema, + 16, + ); + if (!endpoints.ok) return endpoints; + const roots = parseAbsoluteRoots( + env.REA_V8_INSPECTOR_FILE_ROOTS_JSON, + "REA_V8_INSPECTOR_FILE_ROOTS_JSON", + ); + if (!roots.ok) return roots; + const origins = parseBrowserArray( + env.REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON, + "REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON", + browserOriginSchema, + 32, + ); + if (!origins.ok) return origins; + if (env.REA_V8_INSPECTOR_OBSERVE_ENABLED !== "true") + return ok({ status: "disabled" }); + const parsedEndpoints = requireFirst( + endpoints.value, + "REA_V8_INSPECTOR_ENDPOINTS_JSON must encode at least one loopback endpoint when V8 Inspector observation is enabled", + ); + if (!parsedEndpoints.ok) return parsedEndpoints; + const locations = parseV8Locations(roots.value, origins.value); + if (!locations.ok) return locations; + return ok({ + status: "enabled", + endpoints: parsedEndpoints.value, + locations: locations.value, + }); +}; + +const parseV8Locations = ( + roots: readonly string[], + origins: readonly string[], +): Result => { + const [firstRoot, ...remainingRoots] = roots; + const [firstOrigin, ...remainingOrigins] = origins; + if (firstRoot !== undefined && firstOrigin !== undefined) + return ok({ + scope: "files-and-origins", + fileRoots: [firstRoot, ...remainingRoots], + allowedOrigins: [firstOrigin, ...remainingOrigins], + }); + if (firstRoot !== undefined) + return ok({ + scope: "files", + fileRoots: [firstRoot, ...remainingRoots], + }); + if (firstOrigin !== undefined) + return ok({ + scope: "origins", + allowedOrigins: [firstOrigin, ...remainingOrigins], + }); + return err( + new ConfigurationError( + "V8 Inspector observation requires at least one file root or exact origin when enabled", + ), + ); +}; + +const requireFirst = ( + values: readonly string[], + message: string, +): Result => { + const [first, ...remaining] = values; + return first === undefined + ? err(new ConfigurationError(message)) + : ok([first, ...remaining]); +}; + +const appendBrowserCeiling = ( + ceilings: PermissionCeiling[], + policy: BrowserObservationPolicy, +): void => { + if (policy.status === "disabled") return; + ceilings.push( + permissionScope("browser_observe", [], { + origins: [...policy.cdpEndpoints, ...policy.allowedOrigins], + network: browserNetworkScope(policy.allowedOrigins), + }), + ); +}; + +const appendElectronCeiling = ( + ceilings: PermissionCeiling[], + policy: ElectronObservationPolicy, +): void => { + if (policy.status === "disabled") return; + ceilings.push( + permissionScope("electron_observe", policy.fileRoots, { + origins: policy.cdpEndpoints, + network: "loopback", + }), + ); +}; + +const appendV8InspectorCeiling = ( + ceilings: PermissionCeiling[], + policy: V8InspectorObservationPolicy, +): void => { + if (policy.status === "disabled") return; + const scopes = v8InspectorLocationScopes(policy.locations); + ceilings.push( + permissionScope("v8_inspector_observe", scopes.fileRoots, { + origins: [...policy.endpoints, ...scopes.allowedOrigins], + network: "loopback", + }), + ); +}; diff --git a/src/config/processCapture.ts b/src/config/processCapture.ts new file mode 100644 index 000000000..cbd8e2b6c --- /dev/null +++ b/src/config/processCapture.ts @@ -0,0 +1,79 @@ +import type { + EnabledProcessExecutionPolicy, + ProcessExecutionPolicy, +} from "../domain/processCapture.js"; +import { ConfigurationError } from "../domain/errors.js"; +import type { PermissionCeiling } from "../domain/permissionPolicy.js"; +import { err, ok, type Result } from "../domain/result.js"; +import type { Environment } from "./environment.js"; +import { parseAbsoluteRoots, parseStringArray } from "./parsers.js"; +import { permissionScope } from "./permissions.js"; + +/** Parse process capture into disabled or fully authorized state. */ +export const parseProcessExecutionPolicy = ( + env: Environment, +): Result => { + const executableRoots = parseAbsoluteRoots( + env.REA_PROCESS_EXECUTABLE_ROOTS_JSON, + "REA_PROCESS_EXECUTABLE_ROOTS_JSON", + ); + if (!executableRoots.ok) return executableRoots; + const workingRoots = parseAbsoluteRoots( + env.REA_PROCESS_WORKING_ROOTS_JSON, + "REA_PROCESS_WORKING_ROOTS_JSON", + ); + if (!workingRoots.ok) return workingRoots; + const allowedEnvironment = parseStringArray( + env.REA_PROCESS_ALLOWED_ENV_JSON, + "REA_PROCESS_ALLOWED_ENV_JSON", + ); + if (!allowedEnvironment.ok) return allowedEnvironment; + if (env.REA_PROCESS_CAPTURE_ENABLED !== "true") + return ok({ status: "disabled" }); + const parsedExecutables = requireRoots( + executableRoots.value, + "REA_PROCESS_EXECUTABLE_ROOTS_JSON must encode at least one absolute root when process capture is enabled", + ); + if (!parsedExecutables.ok) return parsedExecutables; + const parsedWorking = requireRoots( + workingRoots.value, + "REA_PROCESS_WORKING_ROOTS_JSON must encode at least one absolute root when process capture is enabled", + ); + if (!parsedWorking.ok) return parsedWorking; + return ok({ + status: "enabled", + executableRoots: parsedExecutables.value, + workingRoots: parsedWorking.value, + allowedEnvironment: allowedEnvironment.value, + networkAccess: + env.REA_PROCESS_ALLOW_EXTERNAL_NETWORK === "true" ? "external" : "none", + }); +}; + +/** Add the exact process-capture ceiling when capture is enabled. */ +export const appendProcessCaptureCeiling = ( + ceilings: PermissionCeiling[], + policy: ProcessExecutionPolicy, +): void => { + if (policy.status === "disabled") return; + ceilings.push( + permissionScope("process_capture", policy.workingRoots, { + executables: policy.executableRoots, + environment_names: policy.allowedEnvironment, + network: policy.networkAccess, + }), + ); +}; + +const requireRoots = ( + roots: readonly string[], + message: string, +): Result< + EnabledProcessExecutionPolicy["workingRoots"], + ConfigurationError +> => { + const [first, ...remaining] = roots; + return first === undefined + ? err(new ConfigurationError(message)) + : ok([first, ...remaining]); +}; diff --git a/src/config/types.ts b/src/config/types.ts index 7a3ad87bd..e01430e00 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -7,6 +7,15 @@ import type { PermissionGrant, } from "../domain/permissionPolicy.js"; import type { AnalysisProviderSelector } from "../contracts/providerSelection.js"; +import type { ManagedRuntimePolicy } from "../application/ManagedRuntimeCorrelationService.js"; +import type { JavaScriptReplayPolicy } from "../application/JavaScriptReplayPlanning.js"; +import type { ElectronAutomationPolicy } from "./electronAutomation.js"; +import type { BrowserScenarioPolicy } from "./browserScenario.js"; +import type { + BrowserObservationPolicy, + ElectronObservationPolicy, + V8InspectorObservationPolicy, +} from "./passiveObservation.js"; export interface AppConfig { readonly analysisProvider: AnalysisProviderSelector; @@ -25,42 +34,13 @@ export interface AppConfig { readonly investigationInputRoots: readonly string[]; readonly analysisSnapshotFilePolicy: EvidenceFilePolicy; readonly referenceSourcePolicy: ReferenceSourcePolicy; - readonly browserObservationEnabled: boolean; - readonly browserCdpEndpoints: readonly string[]; - readonly browserAllowedOrigins: readonly string[]; - readonly browserScenarioPolicy: { - readonly enabled: boolean; - readonly executableRoots: readonly string[]; - readonly cdpEndpoints: readonly string[]; - readonly allowedOrigins: readonly string[]; - readonly allowedEnvironment: readonly string[]; - }; - readonly electronObservationEnabled: boolean; - readonly electronCdpEndpoints: readonly string[]; - readonly electronFileRoots: readonly string[]; - readonly electronAutomationPolicy: { - readonly enabled: boolean; - readonly executableRoots: readonly string[]; - readonly applicationRoots: readonly string[]; - }; - readonly v8InspectorObservationEnabled: boolean; - readonly v8InspectorEndpoints: readonly string[]; - readonly v8InspectorFileRoots: readonly string[]; - readonly v8InspectorAllowedOrigins: readonly string[]; - readonly javascriptReplayPolicy: { - readonly enabled: boolean; - readonly roots: readonly string[]; - readonly nodePath: string; - readonly bubblewrapPath: string; - readonly systemdRunPath: string; - readonly systemctlPath: string; - readonly shellPath: string; - }; - readonly managedRuntimePolicy: { - readonly enabled: boolean; - readonly roots: readonly string[]; - readonly executablePath: string; - }; + readonly browserObservationPolicy: BrowserObservationPolicy; + readonly browserScenarioPolicy: BrowserScenarioPolicy; + readonly electronObservationPolicy: ElectronObservationPolicy; + readonly electronAutomationPolicy: ElectronAutomationPolicy; + readonly v8InspectorObservationPolicy: V8InspectorObservationPolicy; + readonly javascriptReplayPolicy: JavaScriptReplayPolicy; + readonly managedRuntimePolicy: ManagedRuntimePolicy; readonly permissionCeilings: readonly PermissionCeiling[]; readonly administratorPermissionGrants: readonly PermissionGrant[]; readonly permissionProjectRoot: string | undefined; diff --git a/src/contracts/applicationToolContracts.ts b/src/contracts/applicationToolContracts.ts index b02f3266c..06f6f1878 100644 --- a/src/contracts/applicationToolContracts.ts +++ b/src/contracts/applicationToolContracts.ts @@ -114,7 +114,6 @@ const NODE_PREPARATION_EXAMPLE = jsonObjectSchema.parse({ entry_export: "selected", }, cases: [{ case_id: "empty", arguments: [""] }], - approved: false, }, }); @@ -280,7 +279,6 @@ export const APPLICATION_TOOL_CONTRACTS = [ result_depth: 16, result_nodes: 10000, }, - approved: false, }, }, ], @@ -409,13 +407,49 @@ export const APPLICATION_TOOL_CONTRACTS = [ ] as const satisfies readonly ToolContract[]; /** Resolve one named application contract without relying on array position. */ -export const applicationToolContract = ( +export function applicationToolContract( + name: "trace_application_feature", +): (typeof APPLICATION_TOOL_CONTRACTS)[0]; +export function applicationToolContract( + name: "trace_javascript_semantics", +): (typeof APPLICATION_TOOL_CONTRACTS)[1]; +export function applicationToolContract( + name: "compare_application_versions", +): (typeof APPLICATION_TOOL_CONTRACTS)[2]; +export function applicationToolContract( + name: "compare_source_to_bundle", +): (typeof APPLICATION_TOOL_CONTRACTS)[3]; +export function applicationToolContract( + name: "compare_javascript_export_shapes", +): (typeof APPLICATION_TOOL_CONTRACTS)[4]; +export function applicationToolContract( + name: "run_controlled_replay", +): (typeof APPLICATION_TOOL_CONTRACTS)[5]; +export function applicationToolContract( + name: "prepare_node_characterization", +): (typeof APPLICATION_TOOL_CONTRACTS)[6]; +export function applicationToolContract( + name: "execute_node_characterization", +): (typeof APPLICATION_TOOL_CONTRACTS)[7]; +export function applicationToolContract( + name: "build_reconstruction_obligation_ledger", +): (typeof APPLICATION_TOOL_CONTRACTS)[8]; +export function applicationToolContract( + name: "evaluate_reconstruction_readiness", +): (typeof APPLICATION_TOOL_CONTRACTS)[9]; +export function applicationToolContract( + name: "commit_reconstruction_coverage", +): (typeof APPLICATION_TOOL_CONTRACTS)[10]; +export function applicationToolContract( + name: "query_reconstruction_coverage", +): (typeof APPLICATION_TOOL_CONTRACTS)[11]; +export function applicationToolContract( name: (typeof APPLICATION_TOOL_CONTRACTS)[number]["name"], -): (typeof APPLICATION_TOOL_CONTRACTS)[number] => { +): (typeof APPLICATION_TOOL_CONTRACTS)[number] { const contract = APPLICATION_TOOL_CONTRACTS.find( ({ name: candidate }) => candidate === name, ); if (contract === undefined) throw new Error(`Missing application tool contract: ${name}`); return contract; -}; +} diff --git a/src/contracts/applicationWorkflowInputContracts.ts b/src/contracts/applicationWorkflowInputContracts.ts index 3523eeef1..f8e904f29 100644 --- a/src/contracts/applicationWorkflowInputContracts.ts +++ b/src/contracts/applicationWorkflowInputContracts.ts @@ -12,149 +12,140 @@ const evidenceIdSchema = z .regex(/^ev_[a-f0-9]{64}$/u) .describe("Evidence ID returned earlier in this session"); -const requireExactlyOne = ( - context: z.RefinementCtx, - fields: readonly [string, unknown, string, unknown], -): void => { - const [leftName, left, rightName, right] = fields; - if ((left === undefined) !== (right === undefined)) return; - context.addIssue({ - code: "custom", - path: [left === undefined ? leftName : rightName], - message: `Supply exactly one of ${leftName} or ${rightName}`, - }); -}; +const traceApplicationFeatureFacts = { + native_observations: + traceApplicationFeatureInputSchema.shape.native_observations, + native_observation_evidence_ids: z + .array(evidenceIdSchema) + .max(64) + .default([]), + seed: traceApplicationFeatureInputSchema.shape.seed, + direction: traceApplicationFeatureInputSchema.shape.direction, + limits: traceApplicationFeatureInputSchema.shape.limits, +} as const; /** MCP/CLI trace request accepting full Evidence or a ledger reference. */ -export const traceApplicationFeatureRequestSchema = z - .strictObject({ - application: evidenceSchema.optional(), - application_evidence_id: evidenceIdSchema.optional(), - native_observations: - traceApplicationFeatureInputSchema.shape.native_observations, - native_observation_evidence_ids: z - .array(evidenceIdSchema) - .max(64) - .default([]), - seed: traceApplicationFeatureInputSchema.shape.seed, - direction: traceApplicationFeatureInputSchema.shape.direction, - limits: traceApplicationFeatureInputSchema.shape.limits, - }) - .superRefine((input, context) => { - requireExactlyOne(context, [ - "application", - input.application, - "application_evidence_id", - input.application_evidence_id, - ]); - }); +export const traceApplicationFeatureRequestSchema = z.union([ + z.strictObject({ + ...traceApplicationFeatureFacts, + application: evidenceSchema, + }), + z.strictObject({ + ...traceApplicationFeatureFacts, + application_evidence_id: evidenceIdSchema, + }), +]); /** MCP/CLI semantic trace request accepting full Evidence or a ledger reference. */ -export const traceJavaScriptSemanticsRequestSchema = z - .strictObject({ - application: evidenceSchema.optional(), - application_evidence_id: evidenceIdSchema.optional(), +export const traceJavaScriptSemanticsRequestSchema = z.union([ + z.strictObject({ + application: evidenceSchema, query: javaScriptSemanticQueryInputSchema, - }) - .superRefine((input, context) => { - requireExactlyOne(context, [ - "application", - input.application, - "application_evidence_id", - input.application_evidence_id, - ]); - }); + }), + z.strictObject({ + application_evidence_id: evidenceIdSchema, + query: javaScriptSemanticQueryInputSchema, + }), +]); + +const compareApplicationVersionsFacts = { + left_native_observations: + compareApplicationVersionsInputSchema.shape.left_native_observations, + left_native_observation_evidence_ids: z + .array(evidenceIdSchema) + .max(64) + .default([]), + right_native_observations: + compareApplicationVersionsInputSchema.shape.right_native_observations, + right_native_observation_evidence_ids: z + .array(evidenceIdSchema) + .max(64) + .default([]), + limits: compareApplicationVersionsInputSchema.shape.limits, + unknown_registry_approved: + compareApplicationVersionsInputSchema.shape.unknown_registry_approved, +} as const; /** MCP/CLI comparison request accepting full Evidence or ledger references. */ -export const compareApplicationVersionsRequestSchema = z - .strictObject({ - left: evidenceSchema.optional(), - left_evidence_id: evidenceIdSchema.optional(), - right: evidenceSchema.optional(), - right_evidence_id: evidenceIdSchema.optional(), - left_native_observations: - compareApplicationVersionsInputSchema.shape.left_native_observations, - left_native_observation_evidence_ids: z - .array(evidenceIdSchema) - .max(64) - .default([]), - right_native_observations: - compareApplicationVersionsInputSchema.shape.right_native_observations, - right_native_observation_evidence_ids: z - .array(evidenceIdSchema) - .max(64) - .default([]), - limits: compareApplicationVersionsInputSchema.shape.limits, - unknown_registry_approved: - compareApplicationVersionsInputSchema.shape.unknown_registry_approved, - }) - .superRefine((input, context) => { - requireExactlyOne(context, [ - "left", - input.left, - "left_evidence_id", - input.left_evidence_id, - ]); - requireExactlyOne(context, [ - "right", - input.right, - "right_evidence_id", - input.right_evidence_id, - ]); - }); +export const compareApplicationVersionsRequestSchema = z.union([ + z.strictObject({ + ...compareApplicationVersionsFacts, + left: evidenceSchema, + right: evidenceSchema, + }), + z.strictObject({ + ...compareApplicationVersionsFacts, + left: evidenceSchema, + right_evidence_id: evidenceIdSchema, + }), + z.strictObject({ + ...compareApplicationVersionsFacts, + left_evidence_id: evidenceIdSchema, + right: evidenceSchema, + }), + z.strictObject({ + ...compareApplicationVersionsFacts, + left_evidence_id: evidenceIdSchema, + right_evidence_id: evidenceIdSchema, + }), +]); + +const compareSourceToBundleFacts = { + reference: compareSourceToBundleInputSchema.shape.reference, + limits: compareSourceToBundleInputSchema.shape.limits, + unknown_registry_approved: + compareSourceToBundleInputSchema.shape.unknown_registry_approved, +} as const; /** Historical-source comparison accepting full application Evidence or a ledger reference. */ -export const compareSourceToBundleRequestSchema = z - .strictObject({ - reference: compareSourceToBundleInputSchema.shape.reference, - application: evidenceSchema.optional(), - application_evidence_id: evidenceIdSchema.optional(), - limits: compareSourceToBundleInputSchema.shape.limits, - unknown_registry_approved: - compareSourceToBundleInputSchema.shape.unknown_registry_approved, - }) - .superRefine((input, context) => { - requireExactlyOne(context, [ - "application", - input.application, - "application_evidence_id", - input.application_evidence_id, - ]); - }); +export const compareSourceToBundleRequestSchema = z.union([ + z.strictObject({ + ...compareSourceToBundleFacts, + application: evidenceSchema, + }), + z.strictObject({ + ...compareSourceToBundleFacts, + application_evidence_id: evidenceIdSchema, + }), +]); + +const compareJavaScriptExportShapesFacts = { + left_module_path: + compareJavaScriptExportShapesInputSchema.shape.left_module_path, + left_export_name: + compareJavaScriptExportShapesInputSchema.shape.left_export_name, + right_module_path: + compareJavaScriptExportShapesInputSchema.shape.right_module_path, + right_export_name: + compareJavaScriptExportShapesInputSchema.shape.right_export_name, + limits: compareJavaScriptExportShapesInputSchema.shape.limits, + unknown_registry_approved: + compareJavaScriptExportShapesInputSchema.shape.unknown_registry_approved, +} as const; /** MCP/CLI export-shape request accepting full Evidence or ledger references. */ -export const compareJavaScriptExportShapesRequestSchema = z - .strictObject({ - left: evidenceSchema.optional(), - left_evidence_id: evidenceIdSchema.optional(), - right: evidenceSchema.optional(), - right_evidence_id: evidenceIdSchema.optional(), - left_module_path: - compareJavaScriptExportShapesInputSchema.shape.left_module_path, - left_export_name: - compareJavaScriptExportShapesInputSchema.shape.left_export_name, - right_module_path: - compareJavaScriptExportShapesInputSchema.shape.right_module_path, - right_export_name: - compareJavaScriptExportShapesInputSchema.shape.right_export_name, - limits: compareJavaScriptExportShapesInputSchema.shape.limits, - unknown_registry_approved: - compareJavaScriptExportShapesInputSchema.shape.unknown_registry_approved, - }) - .superRefine((input, context) => { - requireExactlyOne(context, [ - "left", - input.left, - "left_evidence_id", - input.left_evidence_id, - ]); - requireExactlyOne(context, [ - "right", - input.right, - "right_evidence_id", - input.right_evidence_id, - ]); - }); +export const compareJavaScriptExportShapesRequestSchema = z.union([ + z.strictObject({ + ...compareJavaScriptExportShapesFacts, + left: evidenceSchema, + right: evidenceSchema, + }), + z.strictObject({ + ...compareJavaScriptExportShapesFacts, + left: evidenceSchema, + right_evidence_id: evidenceIdSchema, + }), + z.strictObject({ + ...compareJavaScriptExportShapesFacts, + left_evidence_id: evidenceIdSchema, + right: evidenceSchema, + }), + z.strictObject({ + ...compareJavaScriptExportShapesFacts, + left_evidence_id: evidenceIdSchema, + right_evidence_id: evidenceIdSchema, + }), +]); export type TraceApplicationFeatureRequest = z.output< typeof traceApplicationFeatureRequestSchema diff --git a/src/contracts/artifactToolContracts.ts b/src/contracts/artifactToolContracts.ts index 1c1404ec0..d63634d88 100644 --- a/src/contracts/artifactToolContracts.ts +++ b/src/contracts/artifactToolContracts.ts @@ -5,6 +5,7 @@ import type { ToolContract } from "./toolContracts.js"; import { artifactOutputSchemas } from "./toolOutputSchemas.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { toolContractMetadata } from "./toolEffects.js"; +import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; import { artifactInspectionLimitsSchema } from "../domain/artifactInspection.js"; const pageInput = { @@ -35,27 +36,30 @@ const traversalLimitsInput = { max_path_bytes: z.number().int().min(1).max(65_535).default(4_096), }; -/** Exact caller boundary for deterministic artifact inventory. */ -export const artifactInventoryInputSchema = z - .object({ - native_mount_approved: z.boolean().default(false), - integrity_policy: z.enum(["fail", "record-and-continue"]).default("fail"), - integrity_continue_approved: z.boolean().default(false), +const integrityInput = { + fail: { + integrity_policy: z.literal("fail").default("fail"), + integrity_continue_approved: z.literal(false).default(false), max_integrity_mismatches: z.number().int().min(1).max(100).default(10), - ...pageInput, - ...traversalLimitsInput, - }) - .superRefine((input, context) => { - if ( - input.integrity_policy === "record-and-continue" && - input.integrity_continue_approved !== true - ) - context.addIssue({ - code: "custom", - path: ["integrity_continue_approved"], - message: "record-and-continue requires explicit approval", - }); - }); + }, + continue: { + integrity_policy: z.literal("record-and-continue"), + integrity_continue_approved: z.literal(true), + max_integrity_mismatches: z.number().int().min(1).max(100).default(10), + }, +} as const; + +const artifactInventoryFacts = { + native_mount_approved: z.boolean().default(false), + ...pageInput, + ...traversalLimitsInput, +} as const; + +/** Exact caller boundary for deterministic artifact inventory. */ +export const artifactInventoryInputSchema = z.union([ + z.object({ ...artifactInventoryFacts, ...integrityInput.fail }), + z.object({ ...artifactInventoryFacts, ...integrityInput.continue }), +]); /** Exact caller boundary for approved artifact extraction. */ export const artifactExtractionInputSchema = z.object({ @@ -75,26 +79,15 @@ export const artifactExtractionInputSchema = z.object({ }); /** Bounded provider-neutral inspection using one atomic inventory substep. */ -export const artifactInspectionInputSchema = z - .object({ - native_mount_approved: z.boolean().default(false), - integrity_policy: z.enum(["fail", "record-and-continue"]).default("fail"), - integrity_continue_approved: z.boolean().default(false), - max_integrity_mismatches: z.number().int().min(1).max(100).default(10), - ...artifactInspectionLimitsSchema.shape, - ...traversalLimitsInput, - }) - .superRefine((input, context) => { - if ( - input.integrity_policy === "record-and-continue" && - input.integrity_continue_approved !== true - ) - context.addIssue({ - code: "custom", - path: ["integrity_continue_approved"], - message: "record-and-continue requires explicit approval", - }); - }); +const artifactInspectionFacts = { + native_mount_approved: z.boolean().default(false), + ...artifactInspectionLimitsSchema.shape, + ...traversalLimitsInput, +} as const; +export const artifactInspectionInputSchema = z.union([ + z.object({ ...artifactInspectionFacts, ...integrityInput.fail }), + z.object({ ...artifactInspectionFacts, ...integrityInput.continue }), +]); const exampleInputSchema = z.record(z.string(), jsonValueSchema); const examples: Readonly>>> = { @@ -107,14 +100,15 @@ const examples: Readonly>>> = { }, }; -const artifact = ( +const artifact = < + Name extends string, + Schema extends z.ZodType>>, +>( name: Name, description: string, - inputSchema: z.ZodObject, -): ToolContract => { - const outputSchema = artifactOutputSchemas[name]; - if (outputSchema === undefined) - throw new Error(`Missing artifact output schema for ${name}`); + inputSchema: Schema, +) => { + const outputSchema = requireOutputSchema(artifactOutputSchemas, name); return { name, ...toolContractMetadata(name), @@ -128,7 +122,7 @@ const artifact = ( input: exampleInputSchema.parse(examples[name] ?? {}), }, ], - }; + } satisfies ToolContract; }; /** Artifact-graph inventory and explicitly approved safe extraction contracts. */ diff --git a/src/contracts/browserToolContracts.ts b/src/contracts/browserToolContracts.ts index 55fb44bbe..ab0dc590d 100644 --- a/src/contracts/browserToolContracts.ts +++ b/src/contracts/browserToolContracts.ts @@ -18,7 +18,7 @@ import { webMcpDiscoverySchema, } from "../domain/webMcpDiscovery.js"; import { - browserCaptureComparisonWireSchema, + browserCaptureComparisonInputSchema, browserCaptureComparisonSchema, } from "../domain/browserCaptureComparison.js"; import { @@ -282,7 +282,7 @@ export const BROWSER_TOOL_CONTRACTS = [ description: "Compare either passive web captures or step-indexed browser scenarios. Scenario comparison aligns exact step IDs, records deterministic literal normalization, and exposes bounded artifact-level changes plus alignment failures. Missing or truncated evidence never proves equality.", kind: "browser-provider", - inputSchema: browserCaptureComparisonWireSchema, + inputSchema: browserCaptureComparisonInputSchema, outputSchema: captureDiffOutputSchema, examples: [ { diff --git a/src/contracts/enhancedInputs.ts b/src/contracts/enhancedInputs.ts index 8437fc6ff..f471a0a7d 100644 --- a/src/contracts/enhancedInputs.ts +++ b/src/contracts/enhancedInputs.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -const traceLiteralInputSchema = z.object({ +const traceLiteralInputSchema = z.strictObject({ query: z.string().min(1), case_sensitive: z.boolean().default(false), limit: z.number().int().min(1).max(100).default(20), @@ -13,27 +13,27 @@ const traceLiteralInputSchema = z.object({ /** Input schemas shared by MCP registration and enhanced application dispatch. */ export const enhancedInputSchemas = { - swift_classes: z.object({ pattern: z.string().default("") }), - get_objc_classes: z.object({ pattern: z.string().default("") }), - get_objc_protocols: z.object({}), - batch_decompile: z.object({ + swift_classes: z.strictObject({ pattern: z.string().default("") }), + get_objc_classes: z.strictObject({ pattern: z.string().default("") }), + get_objc_protocols: z.strictObject({}), + batch_decompile: z.strictObject({ addresses: z .array(z.string().describe("A provider-normalized procedure address")) .max(20) .default([]), }), - get_call_graph: z.object({ + get_call_graph: z.strictObject({ address: z.string().describe("A provider-normalized procedure address"), direction: z.enum(["forward", "backward"]).default("forward"), depth: z.number().int().min(1).max(5).default(2), }), - analyze_swift_types: z.object({}), - find_xrefs_to_name: z.object({ name: z.string() }), - binary_overview: z.object({ + analyze_swift_types: z.strictObject({}), + find_xrefs_to_name: z.strictObject({ name: z.string() }), + binary_overview: z.strictObject({ detail: z.enum(["concise", "detailed"]).default("concise"), limit: z.number().int().min(1).max(50).default(10), }), - analyze_function: z.object({ + analyze_function: z.strictObject({ procedure: z.string().describe("A procedure name or address"), include_assembly: z.boolean().default(false), limit: z.number().int().min(1).max(500).default(100), @@ -42,7 +42,7 @@ export const enhancedInputSchemas = { pseudocode_offset: z.number().int().min(0).default(0), assembly_offset: z.number().int().min(0).default(0), collection_offset: z - .object({ + .strictObject({ comments: z.number().int().min(0).default(0), callers: z.number().int().min(0).default(0), callees: z.number().int().min(0).default(0), @@ -63,7 +63,7 @@ export const enhancedInputSchemas = { basic_blocks: 0, }), }), - inspect_native_api: z.object({ + inspect_native_api: z.strictObject({ procedure: z.string().describe("A procedure name or address"), max_pseudocode_chars: z.number().int().min(1).max(100_000).default(20_000), max_instructions: z.number().int().min(1).max(5_000).default(500), @@ -76,7 +76,7 @@ export const enhancedInputSchemas = { }), trace_feature: traceLiteralInputSchema, find_code_for_string: traceLiteralInputSchema, - trace_call_path: z.object({ + trace_call_path: z.strictObject({ start: z.string().describe("A provider-normalized procedure address"), goal: z .string() @@ -94,20 +94,3 @@ export const enhancedInputSchemas = { } as const; export type EnhancedToolName = keyof typeof enhancedInputSchemas; - -/** Runtime parser for dispatching only the closed enhanced names. */ -export const enhancedToolNameSchema = z.enum([ - "swift_classes", - "get_objc_classes", - "get_objc_protocols", - "batch_decompile", - "get_call_graph", - "analyze_swift_types", - "find_xrefs_to_name", - "binary_overview", - "analyze_function", - "inspect_native_api", - "trace_feature", - "find_code_for_string", - "trace_call_path", -]); diff --git a/src/contracts/functionWorkflowToolContracts.ts b/src/contracts/functionWorkflowToolContracts.ts index ca5537457..e4cce1c31 100644 --- a/src/contracts/functionWorkflowToolContracts.ts +++ b/src/contracts/functionWorkflowToolContracts.ts @@ -4,17 +4,16 @@ import { TOOL_EXAMPLE_OVERRIDES } from "./toolContractExamples.js"; import type { ToolContract } from "./toolContractTypes.js"; import { toolContractMetadata } from "./toolEffects.js"; import { enhancedOutputSchemas } from "./toolOutputSchemas.js"; +import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; type FunctionWorkflowName = "analyze_function" | "inspect_native_api"; const functionWorkflow = ( name: Name, description: string, -): ToolContract => { +) => { const inputSchema = enhancedInputSchemas[name]; - const outputSchema = enhancedOutputSchemas[name]; - if (outputSchema === undefined) - throw new Error(`Missing function workflow output schema for ${name}`); + const outputSchema = requireOutputSchema(enhancedOutputSchemas, name); return { name, ...toolContractMetadata(name), @@ -30,7 +29,7 @@ const functionWorkflow = ( ), }, ], - }; + } satisfies ToolContract; }; /** Function dossier and native API reconstruction workflow contracts. */ diff --git a/src/contracts/managedToolContracts.ts b/src/contracts/managedToolContracts.ts index c0513dfed..8dc648432 100644 --- a/src/contracts/managedToolContracts.ts +++ b/src/contracts/managedToolContracts.ts @@ -3,6 +3,7 @@ import { z } from "zod"; import type { ToolContract } from "./toolContracts.js"; import { managedOutputSchemas } from "./toolOutputSchemas.js"; import { toolContractMetadata } from "./toolEffects.js"; +import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; /** Exact caller boundary for execution-free PE/CLI triage and identity. */ export const managedArtifactInputSchema = z.object({ @@ -110,18 +111,18 @@ export const managedNativeBoundaryInputSchema = z.object({ .default(1_048_576), }); -const outputSchema = managedOutputSchemas.inspect_managed_artifact; -if (outputSchema === undefined) - throw new Error("Missing managed output schema for inspect_managed_artifact"); -const memberOutputSchema = managedOutputSchemas.inspect_managed_members; -if (memberOutputSchema === undefined) - throw new Error("Missing managed output schema for inspect_managed_members"); -const nativeBoundaryOutputSchema = - managedOutputSchemas.inspect_managed_native_boundaries; -if (nativeBoundaryOutputSchema === undefined) - throw new Error( - "Missing managed output schema for inspect_managed_native_boundaries", - ); +const outputSchema = requireOutputSchema( + managedOutputSchemas, + "inspect_managed_artifact", +); +const memberOutputSchema = requireOutputSchema( + managedOutputSchemas, + "inspect_managed_members", +); +const nativeBoundaryOutputSchema = requireOutputSchema( + managedOutputSchemas, + "inspect_managed_native_boundaries", +); /** Read-only managed artifact contracts. */ export const MANAGED_TOOL_CONTRACTS = [ diff --git a/src/contracts/managedWorkflowExamples.ts b/src/contracts/managedWorkflowExamples.ts index 4d2cac0de..68070e00e 100644 --- a/src/contracts/managedWorkflowExamples.ts +++ b/src/contracts/managedWorkflowExamples.ts @@ -57,15 +57,18 @@ const emptyManagedMembers = ( limitations: [], }); -const emptyPage = (limit: number) => ({ - items: [] as Item[], - offset: 0, - limit, - total: 0, - returned: 0, - dropped: 0, - complete: true, -}); +const emptyPage = (limit: number) => { + const items: Item[] = []; + return { + items, + offset: 0, + limit, + total: 0, + returned: 0, + dropped: 0, + complete: true, + }; +}; const evidence = (result: ManagedMemberInspection) => createEvidence(undefined, MANAGED_STATIC_EXAMPLE_PROVIDER, { diff --git a/src/contracts/managedWorkflowToolContracts.ts b/src/contracts/managedWorkflowToolContracts.ts index 8ce696501..b388506ea 100644 --- a/src/contracts/managedWorkflowToolContracts.ts +++ b/src/contracts/managedWorkflowToolContracts.ts @@ -15,6 +15,7 @@ import { MANAGED_RUNTIME_CORRELATION_EXAMPLE, } from "./managedWorkflowExamples.js"; import { toolContractMetadata } from "./toolEffects.js"; +import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); const managedEvidenceIdSchema = evidenceIdSchema.describe( @@ -96,26 +97,40 @@ export const managedNativeVerificationReferenceInputSchema = z } }); -/** MCP references for projecting managed Evidence into an application graph. */ +const managedApplicationGraphReferenceFacts = { + limits: projectManagedApplicationGraphInputSchema.shape.limits, +} as const; + +/** MCP references requiring at least one managed Evidence source. */ export const managedApplicationGraphReferenceInputSchema = z - .strictObject({ - managed_artifact_evidence_id: managedArtifactEvidenceIdSchema.optional(), - managed_members_evidence_id: managedEvidenceIdSchema.optional(), - managed_native_boundaries_evidence_id: - managedBoundaryEvidenceIdSchema.optional(), - limits: projectManagedApplicationGraphInputSchema.shape.limits, - }) + .union([ + z.strictObject({ + ...managedApplicationGraphReferenceFacts, + managed_artifact_evidence_id: managedArtifactEvidenceIdSchema, + managed_members_evidence_id: managedEvidenceIdSchema.optional(), + managed_native_boundaries_evidence_id: + managedBoundaryEvidenceIdSchema.optional(), + }), + z.strictObject({ + ...managedApplicationGraphReferenceFacts, + managed_artifact_evidence_id: managedArtifactEvidenceIdSchema.optional(), + managed_members_evidence_id: managedEvidenceIdSchema, + managed_native_boundaries_evidence_id: + managedBoundaryEvidenceIdSchema.optional(), + }), + z.strictObject({ + ...managedApplicationGraphReferenceFacts, + managed_artifact_evidence_id: managedArtifactEvidenceIdSchema.optional(), + managed_members_evidence_id: managedEvidenceIdSchema.optional(), + managed_native_boundaries_evidence_id: managedBoundaryEvidenceIdSchema, + }), + ]) .superRefine((input, context) => { const ids = [ input.managed_artifact_evidence_id, input.managed_members_evidence_id, input.managed_native_boundaries_evidence_id, ].filter((id): id is string => id !== undefined); - if (ids.length === 0) - context.addIssue({ - code: "custom", - message: "At least one managed Evidence ID is required", - }); if (new Set(ids).size !== ids.length) context.addIssue({ code: "custom", @@ -123,36 +138,26 @@ export const managedApplicationGraphReferenceInputSchema = z }); }); -const comparisonOutputSchema = - managedWorkflowOutputSchemas.compare_managed_members; -if (comparisonOutputSchema === undefined) - throw new Error( - "Missing managed workflow output schema for compare_managed_members", - ); -const runtimeOutputSchema = - managedWorkflowOutputSchemas.plan_managed_runtime_correlation; -if (runtimeOutputSchema === undefined) - throw new Error( - "Missing managed workflow output schema for plan_managed_runtime_correlation", - ); -const reconstructionOutputSchema = - managedWorkflowOutputSchemas.import_managed_reconstruction; -if (reconstructionOutputSchema === undefined) - throw new Error( - "Missing managed workflow output schema for import_managed_reconstruction", - ); -const nativeVerificationOutputSchema = - managedWorkflowOutputSchemas.verify_managed_native_boundaries; -if (nativeVerificationOutputSchema === undefined) - throw new Error( - "Missing managed workflow output schema for verify_managed_native_boundaries", - ); -const managedApplicationGraphOutputSchema = - managedWorkflowOutputSchemas.project_managed_application_graph; -if (managedApplicationGraphOutputSchema === undefined) - throw new Error( - "Missing managed workflow output schema for project_managed_application_graph", - ); +const comparisonOutputSchema = requireOutputSchema( + managedWorkflowOutputSchemas, + "compare_managed_members", +); +const runtimeOutputSchema = requireOutputSchema( + managedWorkflowOutputSchemas, + "plan_managed_runtime_correlation", +); +const reconstructionOutputSchema = requireOutputSchema( + managedWorkflowOutputSchemas, + "import_managed_reconstruction", +); +const nativeVerificationOutputSchema = requireOutputSchema( + managedWorkflowOutputSchemas, + "verify_managed_native_boundaries", +); +const managedApplicationGraphOutputSchema = requireOutputSchema( + managedWorkflowOutputSchemas, + "project_managed_application_graph", +); /** Provider-neutral managed-code workflow contracts. */ export const MANAGED_WORKFLOW_TOOL_CONTRACTS = [ diff --git a/src/contracts/nativeToolContracts.ts b/src/contracts/nativeToolContracts.ts index 589c43e95..b9bd21645 100644 --- a/src/contracts/nativeToolContracts.ts +++ b/src/contracts/nativeToolContracts.ts @@ -4,6 +4,7 @@ import type { ToolContract } from "./toolContracts.js"; import { nativeOutputSchemas } from "./toolOutputSchemas.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { toolContractMetadata } from "./toolEffects.js"; +import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; const examples: Readonly>>> = { inspect_macho: {}, @@ -13,14 +14,12 @@ const examples: Readonly>>> = { demangle_swift: { symbols: ["$s4Test3fooyyF"] }, }; -const native = ( +const native = ( name: Name, description: string, - inputSchema: z.ZodObject, -): ToolContract => { - const outputSchema = nativeOutputSchemas[name]; - if (outputSchema === undefined) - throw new Error(`Missing native output schema for ${name}`); + inputSchema: Schema, +) => { + const outputSchema = requireOutputSchema(nativeOutputSchemas, name); return { name, ...toolContractMetadata(name), @@ -36,7 +35,7 @@ const native = ( .parse(examples[name] ?? {}), }, ], - }; + } satisfies ToolContract; }; /** Provider-neutral semantic operations backed initially by macOS utilities. */ diff --git a/src/contracts/toolContractTypes.ts b/src/contracts/toolContractTypes.ts index f4d663bab..da44af2be 100644 --- a/src/contracts/toolContractTypes.ts +++ b/src/contracts/toolContractTypes.ts @@ -35,13 +35,21 @@ export const TOOL_KINDS = [ export type ToolKind = (typeof TOOL_KINDS)[number]; /** Single source of truth for a public MCP tool. */ -export interface ToolContract { +export interface ToolContract< + Name extends string = string, + InputSchema extends z.ZodType>> = z.ZodType< + Readonly> + >, + OutputSchema extends z.ZodType>> = z.ZodType< + Readonly> + >, +> { readonly name: Name; readonly title: string; readonly description: string; readonly kind: ToolKind; - readonly inputSchema: z.ZodObject; - readonly outputSchema: z.ZodObject; + readonly inputSchema: InputSchema; + readonly outputSchema: OutputSchema; readonly effects: ToolEffects; readonly annotations: ToolAnnotations; readonly examples: readonly ToolExample[]; diff --git a/src/contracts/toolContracts.ts b/src/contracts/toolContracts.ts index 722b71e98..3a8acc547 100644 --- a/src/contracts/toolContracts.ts +++ b/src/contracts/toolContracts.ts @@ -67,11 +67,11 @@ export { export type { ToolContract, ToolExample } from "./toolContractTypes.js"; -const official = ( +const official = ( name: Name, description: string, - inputSchema: z.ZodObject, -): ToolContract => { + inputSchema: Schema, +) => { const trackedInputSchema = inputSchema.extend({ unknown_registry_approved: z .literal(true) @@ -88,36 +88,38 @@ const official = ( inputSchema: trackedInputSchema, outputSchema: requireOutputSchema(officialOutputSchemas, name), examples: examplesFor(name, trackedInputSchema), - }; + } satisfies ToolContract; }; -const enhanced = ( +const enhanced = ( name: Name, description: string, - inputSchema: z.ZodObject, -): ToolContract => ({ - name, - ...toolContractMetadata(name), - description, - kind: "enhanced", - inputSchema, - outputSchema: requireOutputSchema(enhancedOutputSchemas, name), - examples: examplesFor(name, inputSchema), -}); + inputSchema: Schema, +) => + ({ + name, + ...toolContractMetadata(name), + description, + kind: "enhanced", + inputSchema, + outputSchema: requireOutputSchema(enhancedOutputSchemas, name), + examples: examplesFor(name, inputSchema), + }) satisfies ToolContract; -const session = ( +const session = ( name: Name, description: string, - inputSchema: z.ZodObject, -): ToolContract => ({ - name, - ...toolContractMetadata(name), - description, - kind: "session", - inputSchema, - outputSchema: requireOutputSchema(sessionOutputSchemas, name), - examples: examplesFor(name, inputSchema), -}); + inputSchema: Schema, +) => + ({ + name, + ...toolContractMetadata(name), + description, + kind: "session", + inputSchema, + outputSchema: requireOutputSchema(sessionOutputSchemas, name), + examples: examplesFor(name, inputSchema), + }) satisfies ToolContract; /** Bridge operations exposed without additional application composition. */ export const OFFICIAL_TOOL_CONTRACTS = [ diff --git a/src/contracts/toolEffects.ts b/src/contracts/toolEffects.ts index 3b6fe605c..86c6fe3a0 100644 --- a/src/contracts/toolEffects.ts +++ b/src/contracts/toolEffects.ts @@ -194,6 +194,7 @@ export const TOOL_EFFECTS: Readonly> = { mutatesSession: true, writesFilesystem: true, launchesProcess: true, + accessesNetwork: true, idempotent: false, }), compare_process_captures: sessionEvidence, diff --git a/src/contracts/toolOutputSchemaPrimitives.ts b/src/contracts/toolOutputSchemaPrimitives.ts index cbd22bb0c..09b3edde3 100644 --- a/src/contracts/toolOutputSchemaPrimitives.ts +++ b/src/contracts/toolOutputSchemaPrimitives.ts @@ -62,11 +62,8 @@ export const targetKindSchema = z.enum([ "artifact", ]); -const providerCapability = z.object({ +const providerCapabilityFacts = { operation: z.string(), - available: z.boolean(), - reason: z.string().nullable(), - availability_code: z.enum(PROVIDER_REJECTION_CODES).nullable(), input_contract_version: z.number().int().min(1), output_contract_version: z.number().int().min(1), pagination: z.enum(["none", "offset", "cursor"]), @@ -86,7 +83,23 @@ const providerCapability = z.object({ timeout_ms: z.number().int().min(0).nullable(), }), limitations: z.array(z.string()), -}); +}; + +export const providerCapability = z.discriminatedUnion("available", [ + z.object({ + ...providerCapabilityFacts, + available: z.literal(true), + reason: z.null(), + availability_code: z.null(), + }), + z.object({ + ...providerCapabilityFacts, + available: z.literal(false), + reason: z.string().nullable(), + availability_code: z.enum(PROVIDER_REJECTION_CODES).nullable(), + }), +]); +export type ProviderCapability = z.output; export const providerIdentity = z.object({ id: z.string(), @@ -225,32 +238,27 @@ export type ClientFeatureAvailability = z.infer< typeof clientFeatureAvailabilitySchema >; -export const toolAvailability = z.object({ +const toolAvailabilityMode = z.discriminatedUnion("available", [ + z.object({ + name: z.string(), + available: z.literal(true), + missing_operations: z.array(z.string()).max(0), + remediation: z.null(), + }), + z.object({ + name: z.string(), + available: z.literal(false), + missing_operations: z.array(z.string()).min(1), + remediation: z.string().nullable(), + }), +]); +export type ToolAvailabilityMode = z.output; + +const toolAvailabilityFacts = { name: z.string(), surface: z.string(), - available: z.boolean(), - reason: z.enum([ - "available", - "client_capability_missing", - "target_required", - "provider_missing", - "provider_unavailable", - "target_unsupported", - "unsupported_host", - "policy_disabled", - ]), - remediation: z.string().nullable(), default_mode_available: z.boolean().optional(), - modes: z - .array( - z.object({ - name: z.string(), - available: z.boolean(), - missing_operations: z.array(z.string()), - remediation: z.string().nullable(), - }), - ) - .optional(), + modes: z.array(toolAvailabilityMode).optional(), client_requirements: z.object({ required: z.array(clientFeatureNameSchema), optional: z.array(clientFeatureNameSchema), @@ -273,7 +281,36 @@ export const toolAvailability = z.object({ idempotent: z.boolean(), open_world: z.boolean(), }), -}); +}; + +export const toolUnavailabilityReason = z.enum([ + "client_capability_missing", + "target_required", + "provider_missing", + "provider_unavailable", + "target_unsupported", + "unsupported_host", + "policy_disabled", +]); + +export const toolAvailability = z.discriminatedUnion("available", [ + z.object({ + ...toolAvailabilityFacts, + available: z.literal(true), + reason: z.literal("available"), + remediation: z.null(), + }), + z.object({ + ...toolAvailabilityFacts, + available: z.literal(false), + reason: toolUnavailabilityReason, + remediation: z.string().nullable(), + }), +]); +export type ToolAvailability = z.output; +export type ToolUnavailabilityReason = z.output< + typeof toolUnavailabilityReason +>; export const sessionProvider = z.object({ provider: providerIdentity, @@ -377,14 +414,25 @@ const availableMemoryPermissions = z.object({ source: z.literal("ghidra-memory-block"), }); -export const bounded = (item: z.ZodType) => - z.object({ +export const bounded = (item: z.ZodType) => { + const facts = { items: z.array(item), total: z.number().int().min(0).nullable(), returned: z.number().int().min(0), - truncated: z.boolean(), - next_offset: z.number().int().min(0).nullable(), - }); + } as const; + return z.discriminatedUnion("truncated", [ + z.object({ + ...facts, + truncated: z.literal(false), + next_offset: z.null(), + }), + z.object({ + ...facts, + truncated: z.literal(true), + next_offset: z.number().int().min(0).nullable(), + }), + ]); +}; const addressedValue = z.object({ address: z.string(), diff --git a/src/contracts/toolSchemaJsonOverrides.ts b/src/contracts/toolSchemaJsonOverrides.ts deleted file mode 100644 index d655fe4ec..000000000 --- a/src/contracts/toolSchemaJsonOverrides.ts +++ /dev/null @@ -1,155 +0,0 @@ -import { READINESS_STAGE_IDS } from "../domain/reconstructionReadinessJourneyFindings.js"; - -type JsonSchema = Readonly>; -const conditionResultKey = ["t", "hen"].join(""); - -const exactlyOne = (left: string, right: string): JsonSchema => ({ - oneOf: [{ required: [left] }, { required: [right] }], -}); - -const exclusivePairs = ( - left: [string, string], - right: [string, string], -): JsonSchema => ({ - oneOf: [ - { - required: left, - not: { - anyOf: right.map((field) => ({ required: [field] })), - }, - }, - { - required: right, - not: { - anyOf: left.map((field) => ({ required: [field] })), - }, - }, - ], -}); - -const twoEvidenceSources = ( - left: [string, string], - right: [string, string], -): JsonSchema => ({ - allOf: [exactlyOne(left[0], left[1]), exactlyOne(right[0], right[1])], -}); - -const approvalDependency = (flag: string, approval: string): JsonSchema => ({ - if: { - required: [flag], - properties: { - [flag]: { - const: true, - description: `Whether ${flag} was requested`, - }, - }, - }, - [conditionResultKey]: { - required: [approval], - properties: { - [approval]: { - const: true, - description: `Approval for ${flag}`, - }, - }, - }, -}); - -const exactReadinessStages: JsonSchema = { - allOf: [ - { - properties: { - stages: { - description: "Complete reconstruction-readiness stage set", - allOf: READINESS_STAGE_IDS.map((stageId) => ({ - contains: { - type: "object", - properties: { - stage_id: { - const: stageId, - description: "Readiness stage identifier", - }, - }, - required: ["stage_id"], - description: "One reconstruction-readiness stage", - }, - minContains: 1, - maxContains: 1, - })), - }, - }, - }, - ], -}; - -/** Public JSON-Schema constraints that Standard Schema cannot derive from refinements. */ -export const TOOL_INPUT_JSON_SCHEMA_OVERRIDES: Readonly< - Record -> = { - compare_web_captures: { - ...exclusivePairs( - ["before", "after"], - ["before_scenario", "after_scenario"], - ), - }, - inspect_web_page: { - allOf: [ - approvalDependency("include_console_text", "console_text_approved"), - approvalDependency( - "include_json_body_shapes", - "json_body_schema_approved", - ), - approvalDependency( - "include_websocket_shapes", - "websocket_shape_approved", - ), - ], - }, - analyze_web_bundle: { - allOf: [ - approvalDependency("include_console_text", "console_text_approved"), - approvalDependency( - "include_json_body_shapes", - "json_body_schema_approved", - ), - approvalDependency( - "include_websocket_shapes", - "websocket_shape_approved", - ), - approvalDependency("fetch_source_maps", "source_map_fetch_approved"), - ], - }, - inspect_electron_page: { - allOf: [ - approvalDependency("include_script_sources", "source_capture_approved"), - ], - }, - trace_application_feature: { - ...exactlyOne("application", "application_evidence_id"), - }, - trace_javascript_semantics: { - ...exactlyOne("application", "application_evidence_id"), - }, - compare_application_versions: twoEvidenceSources( - ["left", "left_evidence_id"], - ["right", "right_evidence_id"], - ), - compare_javascript_export_shapes: twoEvidenceSources( - ["left", "left_evidence_id"], - ["right", "right_evidence_id"], - ), - compare_source_to_bundle: exactlyOne( - "application", - "application_evidence_id", - ), - evaluate_reconstruction_readiness: exactReadinessStages, -}; - -/** Merge a contract-specific public constraint into generated or advertised input JSON Schema. */ -export const applyToolInputJsonSchemaOverride = ( - name: string, - schema: JsonSchema, -): JsonSchema => { - const override = TOOL_INPUT_JSON_SCHEMA_OVERRIDES[name]; - return override === undefined ? schema : { ...schema, ...override }; -}; diff --git a/src/contracts/toolSchemaMetadata.ts b/src/contracts/toolSchemaMetadata.ts new file mode 100644 index 000000000..025f05d57 --- /dev/null +++ b/src/contracts/toolSchemaMetadata.ts @@ -0,0 +1,156 @@ +import { z } from "zod"; + +import type { ToolContract } from "./toolContractTypes.js"; + +const PROPERTY_DESCRIPTIONS: Readonly> = { + addresses: "Ordered provider-normalized procedure addresses to analyze.", + approved: "Explicit operator approval to perform this operation.", + after: "The later or right-hand observation to compare.", + before: "The earlier or left-hand observation to compare.", + boundary_id: "Exact reconstruction boundary identifier to evaluate.", + case_sensitive: + "Whether text matching distinguishes uppercase and lowercase.", + cdp_endpoint: "Approved literal loopback Chrome DevTools Protocol endpoint.", + comment: "Exact analyst comment text to write.", + comparisons: "Validated comparison Evidence records to aggregate.", + coverage: "Exact reconstruction-coverage commitment to verify.", + detail: "Requested response detail level.", + direction: "Direction in which to traverse or compare relationships.", + document: "Exact provider document or program identity.", + error: "Structured, caller-actionable error when the operation fails.", + evidence: "Evidence v2 record produced by this operation.", + evidence_id: "Stable identifier of the recorded Evidence v2 observation.", + evidence_uri: + "Session resource URI for the recorded Evidence v2 observation.", + executable: "Approved absolute path of the executable to run.", + format: "Declared input artifact format.", + name: "Exact name used by this operation.", + pattern: "Text or bounded pattern used to filter matching results.", + phase: "Current plan or execution phase of the operation.", + plan: "Content-bound execution plan and its approval commitment.", + query: "Non-empty feature or text query to investigate.", + question: "Concrete unresolved question to retain for later investigation.", + result: "Primary structured result returned by this operation.", + left: "Left-hand input used for comparison or differential execution.", + limit: "Maximum number of results to return in this page.", + limits: + "Bounded resource-consumption and result-size limits for this operation.", + mode: "Operation mode that selects the requested behavior.", + offset: "Zero-based index of the first result to return.", + overwrite: "Whether an existing destination may be replaced.", + path: "Local filesystem path used by this operation.", + provider_id: + "Exact deep-analysis provider ID, or automatic selection when omitted.", + right: "Right-hand input used for comparison or differential execution.", + schema_version: "Version of this structured result schema.", + source_evidence: + "Evidence records supporting the prepared source transformation.", + status: "Current lifecycle or verification status.", + summary: "Concise evidence-backed summary of the result.", + symbols: "Ordered bounded Swift symbols to demangle.", + target_id: "Exact authorized CDP target identifier.", + unknown_id: "Exact residual-unknown identifier.", + unknown_registry_approved: + "Explicit approval to record bounded residual uncertainty in the session registry.", + workspace_path: + "Approved local path of the persistent investigation workspace.", +}; + +/** Attach caller guidance to a canonical schema for the SDK wire projection. */ +export const toolInputSchemaWithMetadata = ( + contract: Contract, +): Contract["inputSchema"] => { + const schema = contract.inputSchema.meta( + z.globalRegistry.get(contract.inputSchema) ?? {}, + ); + const standard = schema["~standard"]; + const inputJsonSchema = standard.jsonSchema?.input; + if (inputJsonSchema === undefined) + throw new TypeError( + "Tool input schema does not expose Standard JSON Schema", + ); + + // Zod's input projection drops root metadata when a descendant transforms. + // Preserve the parser and let the SDK own conversion of everything else. + Object.defineProperty(schema, "~standard", { + value: { + ...standard, + jsonSchema: { + ...standard.jsonSchema, + input: (options: Parameters[0]) => ({ + ...describeProperties(inputJsonSchema(options)), + examples: contract.examples.map(({ input }) => input), + }), + }, + }, + }); + return schema; +}; + +const describeProperties = ( + value: Readonly>, +): Record => + Object.fromEntries( + Object.entries(value).map(([key, child]) => { + if (key !== "properties" || !isObject(child)) + return [key, describeValue(child)]; + return [ + key, + Object.fromEntries( + Object.entries(child).map(([property, propertySchema]) => [ + property, + isObject(propertySchema) && + typeof propertySchema.description !== "string" + ? { + ...describeProperties(propertySchema), + description: fallbackPropertyDescription(property), + } + : describeValue(propertySchema), + ]), + ), + ]; + }), + ); + +const describeValue = (value: unknown): unknown => { + if (Array.isArray(value)) return value.map(describeValue); + return isObject(value) ? describeProperties(value) : value; +}; + +const fallbackPropertyDescription = (property: string): string => { + const explicit = PROPERTY_DESCRIPTIONS[property]; + if (explicit !== undefined) return explicit; + const words = property.replaceAll("_", " "); + if (property.endsWith("_approved")) + return `Explicit operator approval for ${words.slice(0, -9)}.`; + if (property.endsWith("_offset")) + return `Zero-based index of the first ${words.slice(0, -7)} to return.`; + if (property.endsWith("_limit")) + return `Maximum number of ${words.slice(0, -6)} entries to return.`; + if (property.startsWith("max_")) + return `Maximum permitted ${words.slice(4)} for this operation.`; + if (property.startsWith("include_")) + return `Whether to include ${words.slice(8)} in the result.`; + if (property.startsWith("expected_")) + return `Expected ${words.slice(9)} used to reject stale or mismatched input.`; + if (property.endsWith("_sha256")) + return `Exact SHA-256 digest of ${words.slice(0, -7)}.`; + if (property.endsWith("_evidence_id")) + return `Exact Evidence v2 identifier for the ${words.slice(0, -12)} observation.`; + if (property.endsWith("_evidence_ids")) + return `Ordered Evidence v2 identifiers for the ${words.slice(0, -13)} observations.`; + if (property.endsWith("_path")) + return `Local filesystem path for ${words.slice(0, -5)}.`; + if (property.endsWith("_uri")) + return `Canonical URI for ${words.slice(0, -4)}.`; + if (property.endsWith("_bytes")) + return `Bounded byte count for ${words.slice(0, -6)}.`; + if (property.endsWith("_root") || property.endsWith("_roots")) + return `Approved canonical filesystem ${words}.`; + if (property.startsWith("is_") || property.startsWith("has_")) + return `Whether ${words}.`; + return `Value for ${words}.`; +}; + +const isObject = (value: unknown): value is Readonly> => + typeof value === "object" && value !== null && !Array.isArray(value); diff --git a/src/doctorRuntime.ts b/src/doctorRuntime.ts index e1a0cda1b..94d60b374 100644 --- a/src/doctorRuntime.ts +++ b/src/doctorRuntime.ts @@ -71,7 +71,7 @@ const inspectJavaScriptReplay = async (): Promise => { detail: config.error.message, remediation: "Fix the reported REA_JAVASCRIPT_REPLAY_* configuration.", }; - if (!config.value.javascriptReplayPolicy.enabled) + if (config.value.javascriptReplayPolicy.status === "disabled") return { name: "javascript-replay", ok: true, diff --git a/src/domain/androidApplication.ts b/src/domain/androidApplication.ts index 6f2758e24..7df044d39 100644 --- a/src/domain/androidApplication.ts +++ b/src/domain/androidApplication.ts @@ -202,6 +202,8 @@ const retain = >( maximum: number, ): { [Key in keyof Groups]: Component[] } => { let remaining = maximum; + // SAFETY: the projection preserves every key from Groups and replaces only + // each readonly Component array with a bounded mutable Component array. return Object.fromEntries( Object.entries(groups).map(([key, values]) => { const selected = [...values] diff --git a/src/domain/appleApplication.ts b/src/domain/appleApplication.ts index 72908cd94..6e6b078c1 100644 --- a/src/domain/appleApplication.ts +++ b/src/domain/appleApplication.ts @@ -201,6 +201,8 @@ const retainComponents = >( maximum: number, ): { [Key in keyof Groups]: Component[] } => { let remaining = maximum; + // SAFETY: the projection preserves every key from Groups and replaces only + // each readonly Component array with a bounded mutable Component array. return Object.fromEntries( Object.entries(groups).map(([key, values]) => { const retained = [...values] diff --git a/src/domain/binaryTarget.ts b/src/domain/binaryTarget.ts index da2363340..de73b7de4 100644 --- a/src/domain/binaryTarget.ts +++ b/src/domain/binaryTarget.ts @@ -13,45 +13,13 @@ import { extname, isAbsolute, join, relative, resolve, sep } from "node:path"; import { promisify } from "node:util"; import { BinaryTargetError } from "./errors.js"; +import type { BinaryArchitecture, BinaryTarget } from "./binaryTargetTypes.js"; import { err, ok, type Result } from "./result.js"; import { zipPackageFormatForPath } from "./zipPackageFormat.js"; -const execFileAsync = promisify(execFile); +export type { BinaryArchitecture, BinaryTarget } from "./binaryTargetTypes.js"; -/** Provider-neutral CPU families detected from supported executable headers. */ -export type BinaryArchitecture = "x86" | "x86_64" | "arm" | "arm64"; -/** - * Canonical local target identity and provider-neutral file classification. - * Provider adapters translate this metadata into their own open options. - */ -export interface BinaryTarget { - readonly path: string; - readonly sourcePath?: string; - readonly sha256: string; - readonly kind: "executable" | "database" | "archive" | "artifact"; - readonly format: - | "analysis-database" - | "mach-o" - | "elf" - | "pe" - | "zip" - | "ipa" - | "apk" - | "msix" - | "appx" - | "asar" - | "dmg" - | "pkg" - | "plist" - | "javascript" - | "source-map"; - readonly architecture?: BinaryArchitecture; - readonly availableArchitectures?: readonly BinaryArchitecture[]; - /** Provider-neutral PE image role observed from COFF characteristics. */ - readonly executableRole?: "application" | "shared-library" | "non-executable"; - /** Whether a PE declares a non-empty CLI header data-directory entry. */ - readonly managed?: boolean; -} +const execFileAsync = promisify(execFile); /** * Resolve and classify a readable local target before a provider is selected. @@ -87,14 +55,16 @@ export const parseBinaryTarget = async ( format: "analysis-database", }); const artifactFormat = await detectArtifactFormat(path, handle); - if (artifactFormat !== undefined) - return ok({ + if (artifactFormat !== undefined) { + const identity = { path, sourcePath: canonical, sha256: await sha256Handle(handle), - kind: isArchiveFormat(artifactFormat) ? "archive" : "artifact", - format: artifactFormat, - }); + }; + return isArchiveFormat(artifactFormat) + ? ok({ ...identity, kind: "archive", format: artifactFormat }) + : ok({ ...identity, kind: "artifact", format: artifactFormat }); + } const detected = await readExecutableMetadata(handle, hostArchitecture); if (!detected.ok) return err(new BinaryTargetError(path, detected.error)); return ok({ @@ -165,7 +135,12 @@ const namedArtifactFormat = ( return /\.(?:m?js|cjs)$/u.test(lowerPath) ? "javascript" : undefined; }; -const isArchiveFormat = (format: BinaryTarget["format"]): boolean => +const isArchiveFormat = ( + format: Exclude< + BinaryTarget["format"], + "analysis-database" | "mach-o" | "elf" | "pe" + >, +): format is Extract["format"] => ["zip", "ipa", "apk", "msix", "appx", "asar", "dmg", "pkg"].includes(format); const sha256Handle = async (handle: FileHandle): Promise => { @@ -268,14 +243,22 @@ const decodeXml = (value: string): string => .replaceAll(""", '"') .replaceAll("'", "'"); -type ExecutableMetadata = Pick< - BinaryTarget, - | "format" - | "architecture" - | "availableArchitectures" - | "executableRole" - | "managed" ->; +type ExecutableMetadata = + | { + readonly format: "mach-o" | "elf"; + readonly architecture: BinaryArchitecture; + readonly availableArchitectures: readonly BinaryArchitecture[]; + } + | { + readonly format: "pe"; + readonly architecture: BinaryArchitecture; + readonly availableArchitectures: readonly BinaryArchitecture[]; + readonly executableRole: + | "application" + | "shared-library" + | "non-executable"; + readonly managed: boolean; + }; const readExecutableMetadata = async ( handle: FileHandle, diff --git a/src/domain/binaryTargetTypes.ts b/src/domain/binaryTargetTypes.ts new file mode 100644 index 000000000..12c70fec3 --- /dev/null +++ b/src/domain/binaryTargetTypes.ts @@ -0,0 +1,65 @@ +/** Provider-neutral CPU families detected from supported executable headers. */ +export type BinaryArchitecture = "x86" | "x86_64" | "arm" | "arm64"; + +interface BinaryTargetIdentity { + readonly path: string; + readonly sourcePath?: string; + readonly sha256: string; +} + +type NonExecutableMetadata = { + readonly architecture?: never; + readonly availableArchitectures?: never; + readonly executableRole?: never; + readonly managed?: never; +}; + +type ExecutableTarget = BinaryTargetIdentity & { + readonly kind: "executable"; + readonly architecture: BinaryArchitecture; + readonly availableArchitectures: readonly BinaryArchitecture[]; +}; + +/** + * Canonical local target identity and provider-neutral file classification. + * Each variant carries only metadata established for that exact file kind. + */ +export type BinaryTarget = + | (ExecutableTarget & { + readonly format: "mach-o" | "elf"; + readonly executableRole?: never; + readonly managed?: never; + }) + | (ExecutableTarget & { + readonly format: "pe"; + /** Provider-neutral PE image role observed from COFF characteristics. */ + readonly executableRole: + | "application" + | "shared-library" + | "non-executable"; + /** Whether the PE declares a non-empty CLI header data-directory entry. */ + readonly managed: boolean; + }) + | (BinaryTargetIdentity & + NonExecutableMetadata & { + readonly kind: "database"; + readonly format: "analysis-database"; + }) + | (BinaryTargetIdentity & + NonExecutableMetadata & { + readonly kind: "archive"; + readonly format: + | "zip" + | "ipa" + | "apk" + | "msix" + | "appx" + | "asar" + | "dmg" + | "pkg"; + }) + | (BinaryTargetIdentity & + NonExecutableMetadata & { + readonly kind: "artifact"; + readonly format: "plist" | "javascript" | "source-map"; + }); diff --git a/src/domain/browserCaptureComparison.ts b/src/domain/browserCaptureComparison.ts index fdfbb957b..52affa89b 100644 --- a/src/domain/browserCaptureComparison.ts +++ b/src/domain/browserCaptureComparison.ts @@ -11,92 +11,41 @@ import { compareWebCaptures, captureSnapshotSchema, webCaptureDiffSchema, - type CompareWebCapturesInput, type WebCaptureDiff, } from "./webCaptureDiff.js"; -/** Top-level MCP shape for legacy page or step-indexed scenario comparison. */ -export const browserCaptureComparisonWireSchema = z - .strictObject({ - before: captureSnapshotSchema - .optional() - .describe("Earlier passive web-page capture; pair with after."), - after: captureSnapshotSchema - .optional() - .describe("Later passive web-page capture; pair with before."), - before_scenario: compareBrowserScenariosInputSchema.shape.before_scenario - .optional() - .describe("Earlier browser scenario capture; pair with after_scenario."), - after_scenario: compareBrowserScenariosInputSchema.shape.after_scenario - .optional() - .describe("Later browser scenario capture; pair with before_scenario."), +const maxChangesSchema = z + .number() + .int() + .min(1) + .max(20_000) + .default(2_000) + .describe("Maximum normalized change records to retain."); + +/** Top-level MCP shape for exactly one complete passive or scenario pair. */ +export const browserCaptureComparisonInputSchema = z.union([ + z.strictObject({ + before: captureSnapshotSchema.describe("Earlier passive web-page capture."), + after: captureSnapshotSchema.describe("Later passive web-page capture."), + max_changes: maxChangesSchema, + }), + z.strictObject({ + before_scenario: + compareBrowserScenariosInputSchema.shape.before_scenario.describe( + "Earlier browser scenario capture.", + ), + after_scenario: + compareBrowserScenariosInputSchema.shape.after_scenario.describe( + "Later browser scenario capture.", + ), normalization: compareBrowserScenariosInputSchema.shape.normalization.describe( - "Scenario-only exact-literal normalization policy.", + "Exact-literal normalization policy.", ), - max_changes: z - .number() - .int() - .min(1) - .max(20_000) - .default(2_000) - .describe("Maximum normalized change records to retain."), - }) - .superRefine((input, context) => { - const hasPassive = input.before !== undefined || input.after !== undefined; - const hasScenario = - input.before_scenario !== undefined || input.after_scenario !== undefined; - if (hasPassive === hasScenario) - context.addIssue({ - code: "custom", - message: - "Provide exactly one complete pair: before/after or before_scenario/after_scenario", - }); - if (hasPassive && (input.before === undefined || input.after === undefined)) - context.addIssue({ - code: "custom", - message: "Passive comparison requires both before and after", - }); - if ( - hasScenario && - (input.before_scenario === undefined || - input.after_scenario === undefined) - ) - context.addIssue({ - code: "custom", - message: - "Browser scenario comparison requires both before_scenario and after_scenario", - }); - if (hasPassive && input.normalization.rules.length > 0) - context.addIssue({ - code: "custom", - path: ["normalization"], - message: - "Literal normalization rules apply only to browser scenario captures", - }); - }); + max_changes: maxChangesSchema, + }), +]); -/** Parsed legacy page snapshots or step-indexed browser scenarios. */ -export const browserCaptureComparisonInputSchema = - browserCaptureComparisonWireSchema.transform((input) => { - if ( - input.before_scenario !== undefined && - input.after_scenario !== undefined - ) - return { - before_scenario: input.before_scenario, - after_scenario: input.after_scenario, - normalization: input.normalization, - max_changes: input.max_changes, - } satisfies CompareBrowserScenariosInput; - if (input.before !== undefined && input.after !== undefined) - return { - before: input.before, - after: input.after, - max_changes: input.max_changes, - } satisfies CompareWebCapturesInput; - throw new TypeError("Capture comparison pair refinement failed"); - }); /** Parsed browser capture comparison input. */ export type BrowserCaptureComparisonInput = z.output< typeof browserCaptureComparisonInputSchema diff --git a/src/domain/browserObservation.ts b/src/domain/browserObservation.ts index 406dd86f6..5021a9f96 100644 --- a/src/domain/browserObservation.ts +++ b/src/domain/browserObservation.ts @@ -207,103 +207,126 @@ const DEFAULT_BROWSER_INSPECTION_LIMITS = { max_total_websocket_shape_bytes: 1_024 * 1_024, } as const; +const inspectWebPageInputFacts = { + ...approvedBrowserInput, + target_id: z.string().trim().min(1).max(256), + observation_ms: z.number().int().min(0).max(10_000).default(500), + include_accessibility_text: z.boolean().default(false), + include_console_text: z.boolean().default(false), + console_text_approved: z.boolean().default(false), + include_json_body_shapes: z.boolean().default(false), + json_body_schema_approved: z.boolean().default(false), + include_websocket_shapes: z.boolean().default(false), + websocket_shape_approved: z.boolean().default(false), + include_storage_keys: z.boolean().default(false), + include_storage_fingerprints: z.boolean().default(false), + limits: browserInspectionLimitsSchema.default( + DEFAULT_BROWSER_INSPECTION_LIMITS, + ), +} as const; + +const inspectWebPageWithoutSourceSchema = z.strictObject({ + ...inspectWebPageInputFacts, + include_script_sources: z.literal(false).default(false), + source_capture_approved: z.literal(false).default(false), +}); + +const inspectWebPageWithSourceShapeSchema = z.strictObject({ + ...inspectWebPageInputFacts, + include_script_sources: z.literal(true).default(true), + source_capture_approved: z.literal(true), +}); + +type InspectWebPageShape = + | z.output + | z.output; + +const refineInspectWebPageInput = ( + input: InspectWebPageShape, + context: z.RefinementCtx, +): void => { + if (input.include_storage_fingerprints && !input.include_storage_keys) + context.addIssue({ + code: "custom", + path: ["include_storage_fingerprints"], + message: "Storage fingerprints require storage key capture", + }); + if ( + input.limits.max_script_source_bytes > + input.limits.max_total_script_source_bytes + ) + context.addIssue({ + code: "custom", + path: ["limits", "max_script_source_bytes"], + message: "Per-script source limit cannot exceed the total source limit", + }); + for (const [include, approved, path, message] of [ + [ + input.include_console_text, + input.console_text_approved, + "console_text_approved", + "Console text capture requires separate approval", + ], + [ + input.include_json_body_shapes, + input.json_body_schema_approved, + "json_body_schema_approved", + "JSON body schema capture requires separate approval", + ], + [ + input.include_websocket_shapes, + input.websocket_shape_approved, + "websocket_shape_approved", + "WebSocket shape capture requires separate approval", + ], + ] as const) + if (include && !approved) + context.addIssue({ code: "custom", path: [path], message }); + if ( + input.limits.max_console_text_field_bytes > + input.limits.max_total_console_text_bytes + ) + context.addIssue({ + code: "custom", + path: ["limits", "max_console_text_field_bytes"], + message: + "Per-field console text limit cannot exceed the total text limit", + }); + if (input.limits.max_json_body_bytes > input.limits.max_total_json_body_bytes) + context.addIssue({ + code: "custom", + path: ["limits", "max_json_body_bytes"], + message: "Per-body JSON limit cannot exceed the total body limit", + }); + if ( + input.limits.max_websocket_shape_bytes > + input.limits.max_total_websocket_shape_bytes + ) + context.addIssue({ + code: "custom", + path: ["limits", "max_websocket_shape_bytes"], + message: "Per-frame WebSocket limit cannot exceed the total frame limit", + }); + if ( + input.limits.max_ax_text_field_bytes > input.limits.max_total_ax_text_bytes + ) + context.addIssue({ + code: "custom", + path: ["limits", "max_ax_text_field_bytes"], + message: + "Per-field accessibility text limit cannot exceed the total text limit", + }); +}; + +/** Source-capturing inspection input, reusable by static bundle analysis. */ +export const inspectWebPageWithSourceInputSchema = + inspectWebPageWithSourceShapeSchema.superRefine(refineInspectWebPageInput); + /** Public input for one passive, bounded inspection of an existing page. */ -export const inspectWebPageInputSchema = z - .object({ - ...approvedBrowserInput, - target_id: z.string().trim().min(1).max(256), - observation_ms: z.number().int().min(0).max(10_000).default(500), - include_accessibility_text: z.boolean().default(false), - include_console_text: z.boolean().default(false), - console_text_approved: z.boolean().default(false), - include_json_body_shapes: z.boolean().default(false), - json_body_schema_approved: z.boolean().default(false), - include_websocket_shapes: z.boolean().default(false), - websocket_shape_approved: z.boolean().default(false), - include_script_sources: z.boolean().default(false), - include_storage_keys: z.boolean().default(false), - include_storage_fingerprints: z.boolean().default(false), - limits: browserInspectionLimitsSchema.default( - DEFAULT_BROWSER_INSPECTION_LIMITS, - ), - }) - .superRefine((input, context) => { - if (input.include_storage_fingerprints && !input.include_storage_keys) - context.addIssue({ - code: "custom", - path: ["include_storage_fingerprints"], - message: "Storage fingerprints require storage key capture", - }); - if ( - input.limits.max_script_source_bytes > - input.limits.max_total_script_source_bytes - ) - context.addIssue({ - code: "custom", - path: ["limits", "max_script_source_bytes"], - message: "Per-script source limit cannot exceed the total source limit", - }); - for (const [include, approved, path, message] of [ - [ - input.include_console_text, - input.console_text_approved, - "console_text_approved", - "Console text capture requires separate approval", - ], - [ - input.include_json_body_shapes, - input.json_body_schema_approved, - "json_body_schema_approved", - "JSON body schema capture requires separate approval", - ], - [ - input.include_websocket_shapes, - input.websocket_shape_approved, - "websocket_shape_approved", - "WebSocket shape capture requires separate approval", - ], - ] as const) - if (include && !approved) - context.addIssue({ code: "custom", path: [path], message }); - if ( - input.limits.max_console_text_field_bytes > - input.limits.max_total_console_text_bytes - ) - context.addIssue({ - code: "custom", - path: ["limits", "max_console_text_field_bytes"], - message: - "Per-field console text limit cannot exceed the total text limit", - }); - if ( - input.limits.max_json_body_bytes > input.limits.max_total_json_body_bytes - ) - context.addIssue({ - code: "custom", - path: ["limits", "max_json_body_bytes"], - message: "Per-body JSON limit cannot exceed the total body limit", - }); - if ( - input.limits.max_websocket_shape_bytes > - input.limits.max_total_websocket_shape_bytes - ) - context.addIssue({ - code: "custom", - path: ["limits", "max_websocket_shape_bytes"], - message: - "Per-frame WebSocket limit cannot exceed the total frame limit", - }); - if ( - input.limits.max_ax_text_field_bytes > - input.limits.max_total_ax_text_bytes - ) - context.addIssue({ - code: "custom", - path: ["limits", "max_ax_text_field_bytes"], - message: - "Per-field accessibility text limit cannot exceed the total text limit", - }); - }); +export const inspectWebPageInputSchema = z.union([ + inspectWebPageWithoutSourceSchema.superRefine(refineInspectWebPageInput), + inspectWebPageWithSourceInputSchema, +]); export type ListBrowserTargetsInput = z.infer< typeof listBrowserTargetsInputSchema diff --git a/src/domain/callPath.ts b/src/domain/callPath.ts index f5c178e2e..48b9bf62c 100644 --- a/src/domain/callPath.ts +++ b/src/domain/callPath.ts @@ -230,8 +230,9 @@ const parseSnapshots = ( const assertCompatible = ( snapshots: ReadonlyMap, ): void => { - const first = snapshots.values().next().value as FunctionSnapshot | undefined; - if (first === undefined) return; + const firstEntry = snapshots.values().next(); + if (firstEntry.done) return; + const first = firstEntry.value; for (const snapshot of snapshots.values()) { if ( snapshot.subject.digest.sha256 !== first.subject.digest.sha256 || diff --git a/src/domain/customProtocolCapture.ts b/src/domain/customProtocolCapture.ts index 84ccfa62b..6e0a4aa11 100644 --- a/src/domain/customProtocolCapture.ts +++ b/src/domain/customProtocolCapture.ts @@ -166,8 +166,8 @@ export function failedAuthEvents( export function authFlowDuration( events: readonly AuthFlowEvent[], ): number | null { - if (events.length === 0) return null; - const first = events[0]!; - const last = events[events.length - 1]!; + const first = events.at(0); + const last = events.at(-1); + if (first === undefined || last === undefined) return null; return last.at_ms - first.at_ms; } diff --git a/src/domain/electronObservation.ts b/src/domain/electronObservation.ts index 4561a4c9f..b61a787de 100644 --- a/src/domain/electronObservation.ts +++ b/src/domain/electronObservation.ts @@ -36,50 +36,54 @@ export type ListElectronTargetsInput = z.infer< >; /** Input for passive structural inspection of one Electron file page. */ +const inspectElectronPageFacts = { + ...approvedElectronInput, + target_id: z.string().trim().min(1).max(256), + observation_ms: z.number().int().min(0).max(10_000).default(100), + limits: z + .object({ + max_frames: z.number().int().min(1).max(1_000).default(200), + max_dom_nodes: z.number().int().min(1).max(10_000).default(2_000), + max_scripts: z.number().int().min(1).max(2_000).default(500), + max_resources: z.number().int().min(1).max(10_000).default(2_000), + max_workers: z.number().int().min(1).max(5_000).default(500), + max_script_source_bytes: z + .number() + .int() + .min(1) + .max(4 * 1_024 * 1_024) + .default(1_024 * 1_024), + max_total_script_source_bytes: z + .number() + .int() + .min(1) + .max(16 * 1_024 * 1_024) + .default(4 * 1_024 * 1_024), + }) + .default({ + max_frames: 200, + max_dom_nodes: 2_000, + max_scripts: 500, + max_resources: 2_000, + max_workers: 500, + max_script_source_bytes: 1_024 * 1_024, + max_total_script_source_bytes: 4 * 1_024 * 1_024, + }), +} as const; export const inspectElectronPageInputSchema = z - .object({ - ...approvedElectronInput, - target_id: z.string().trim().min(1).max(256), - observation_ms: z.number().int().min(0).max(10_000).default(100), - include_script_sources: z.boolean().default(false), - source_capture_approved: z.boolean().default(false), - limits: z - .object({ - max_frames: z.number().int().min(1).max(1_000).default(200), - max_dom_nodes: z.number().int().min(1).max(10_000).default(2_000), - max_scripts: z.number().int().min(1).max(2_000).default(500), - max_resources: z.number().int().min(1).max(10_000).default(2_000), - max_workers: z.number().int().min(1).max(5_000).default(500), - max_script_source_bytes: z - .number() - .int() - .min(1) - .max(4 * 1_024 * 1_024) - .default(1_024 * 1_024), - max_total_script_source_bytes: z - .number() - .int() - .min(1) - .max(16 * 1_024 * 1_024) - .default(4 * 1_024 * 1_024), - }) - .default({ - max_frames: 200, - max_dom_nodes: 2_000, - max_scripts: 500, - max_resources: 2_000, - max_workers: 500, - max_script_source_bytes: 1_024 * 1_024, - max_total_script_source_bytes: 4 * 1_024 * 1_024, - }), - }) + .union([ + z.object({ + ...inspectElectronPageFacts, + include_script_sources: z.literal(false).default(false), + source_capture_approved: z.literal(false).default(false), + }), + z.object({ + ...inspectElectronPageFacts, + include_script_sources: z.literal(true), + source_capture_approved: z.literal(true), + }), + ]) .superRefine((input, context) => { - if (input.include_script_sources && !input.source_capture_approved) - context.addIssue({ - code: "custom", - path: ["source_capture_approved"], - message: "Electron script source capture requires separate approval", - }); if ( input.limits.max_script_source_bytes > input.limits.max_total_script_source_bytes diff --git a/src/domain/electronStaticAnalysisValues.ts b/src/domain/electronStaticAnalysisValues.ts index 09d6cb0af..d391c43d2 100644 --- a/src/domain/electronStaticAnalysisValues.ts +++ b/src/domain/electronStaticAnalysisValues.ts @@ -93,7 +93,10 @@ export const collectContextBridgeMembers = ( unknown: 1, omitted: 0, }; - const state = { members: [] as string[], unknown: 0 }; + const state: { members: string[]; unknown: number } = { + members: [], + unknown: 0, + }; collectMembersAt(node, "", 0, state); const members = [...new Set(state.members)].sort(compareCodePoints); return { diff --git a/src/domain/eventProcessTree.ts b/src/domain/eventProcessTree.ts index f03763605..5f91c15af 100644 --- a/src/domain/eventProcessTree.ts +++ b/src/domain/eventProcessTree.ts @@ -209,7 +209,8 @@ export function getDescendants( const result: number[] = []; const queue: number[] = [rootPid]; while (queue.length > 0) { - const pid = queue.shift()!; + const pid = queue.shift(); + if (pid === undefined) break; if (visited.has(pid)) continue; visited.add(pid); const node = byPid.get(pid); diff --git a/src/domain/functionComparisonNormalization.ts b/src/domain/functionComparisonNormalization.ts index c4efc9078..82386a54b 100644 --- a/src/domain/functionComparisonNormalization.ts +++ b/src/domain/functionComparisonNormalization.ts @@ -177,15 +177,22 @@ export const sorted = (values: readonly unknown[]): readonly unknown[] => export const combineCoverage = ( left: FunctionCollection, right: FunctionCollection, -): FunctionCollection => ({ - items: [...left.items, ...right.items], - total: - left.total === null || right.total === null - ? null - : left.total + right.total, - complete: left.complete && right.complete, - truncated: left.truncated || right.truncated, -}); +): FunctionCollection => { + const base = { + items: [...left.items, ...right.items], + total: + left.total === null || right.total === null + ? null + : left.total + right.total, + }; + return left.complete && right.complete + ? { ...base, complete: true, truncated: false } + : { + ...base, + complete: false, + truncated: left.truncated || right.truncated, + }; +}; export const project = ( collection: FunctionCollection, diff --git a/src/domain/functionDossierEvidence.ts b/src/domain/functionDossierEvidence.ts index 2628c90e0..8356d4908 100644 --- a/src/domain/functionDossierEvidence.ts +++ b/src/domain/functionDossierEvidence.ts @@ -24,12 +24,14 @@ type DossierCollectionField = (typeof DOSSIER_COLLECTION_FIELDS)[number]; type DossierItem = FunctionDossier[Field]["items"][number]; -export interface FunctionCollection { +type FunctionCoverage = + | { readonly complete: true; readonly truncated: false } + | { readonly complete: false; readonly truncated: boolean }; + +export type FunctionCollection = { readonly items: readonly Item[]; readonly total: number | null; - readonly complete: boolean; - readonly truncated: boolean; -} +} & FunctionCoverage; type FunctionCollections = { readonly [Field in DossierCollectionField]: FunctionCollection< @@ -46,9 +48,10 @@ export interface FunctionSnapshot { readonly pseudocode: { readonly text: string; readonly total: number; - readonly complete: boolean; - readonly truncated: boolean; - }; + } & ( + | { readonly complete: true; readonly truncated: false } + | { readonly complete: false; readonly truncated: true } + ); readonly collections: FunctionCollections; readonly instructionScan: FunctionDossier["instruction_scan"]; readonly limitations: readonly string[]; @@ -172,8 +175,9 @@ const mergePseudocode = ( return { text: orderedValues(characters).join(""), total, - complete, - truncated: !complete, + ...(complete + ? { complete: true as const, truncated: false as const } + : { complete: false as const, truncated: true as const }), }; }; @@ -210,8 +214,12 @@ const mergeCollection = ( return { items: orderedValues(items), total, - complete, - truncated: scanLimited || (!unavailable && !complete), + ...(complete + ? { complete: true as const, truncated: false as const } + : { + complete: false as const, + truncated: scanLimited || !unavailable, + }), }; }; diff --git a/src/domain/hopperValues.ts b/src/domain/hopperValues.ts index 81c32137e..1d3977d59 100644 --- a/src/domain/hopperValues.ts +++ b/src/domain/hopperValues.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import { jsonValueSchema, type JsonValue } from "./jsonValue.js"; +import type { JsonValue } from "./jsonValue.js"; import { AnalysisOutputError, HopperProtocolError } from "./errors.js"; import { err, ok, type Result } from "./result.js"; import { nativeApiBoundarySchema } from "./nativeApiBoundary.js"; @@ -62,31 +62,24 @@ const segmentSchema = z.object({ writable: z.boolean().nullable().default(null), executable: z.boolean().nullable().default(null), }); -const addressedPageSchema = z - .object({ - items: z.array(z.object({ address: z.string(), value: z.string() })), - offset: z.number().int().min(0), - limit: z.number().int().min(1), - total: z.number().int().min(0), - next_offset: z.number().int().min(0).nullable(), - has_more: z.boolean(), - }) - .superRefine((value, context) => { - if (value.has_more && value.next_offset === null) { - context.addIssue({ - code: "custom", - message: "a page with more results must provide next_offset", - path: ["next_offset"], - }); - } - if (!value.has_more && value.next_offset !== null) { - context.addIssue({ - code: "custom", - message: "a complete page must not provide next_offset", - path: ["next_offset"], - }); - } - }); +const addressedPageFacts = { + items: z.array(z.object({ address: z.string(), value: z.string() })), + offset: z.number().int().min(0), + limit: z.number().int().min(1), + total: z.number().int().min(0), +} as const; +const addressedPageSchema = z.discriminatedUnion("has_more", [ + z.object({ + ...addressedPageFacts, + has_more: z.literal(true), + next_offset: z.number().int().min(0), + }), + z.object({ + ...addressedPageFacts, + has_more: z.literal(false), + next_offset: z.null(), + }), +]); const unavailableAnalysisFactSchema = z .object({ available: z.literal(false), reason: z.string() }) .strict(); @@ -111,16 +104,25 @@ export const localVariableSchema = z provenance: z.string().min(1), }) .strict(); -const boundedSchema = (item: T) => - z - .object({ - items: z.array(item), - total: z.number().int().min(0).nullable(), - returned: z.number().int().min(0), - truncated: z.boolean(), - next_offset: z.number().int().min(0).nullable(), - }) - .strict() +const boundedSchema = (item: T) => { + const boundedFacts = { + items: z.array(item), + total: z.number().int().min(0).nullable(), + returned: z.number().int().min(0), + } as const; + return z + .discriminatedUnion("truncated", [ + z.strictObject({ + ...boundedFacts, + truncated: z.literal(false), + next_offset: z.null(), + }), + z.strictObject({ + ...boundedFacts, + truncated: z.literal(true), + next_offset: z.number().int().min(0).nullable(), + }), + ]) .superRefine((value, context) => { if (value.returned !== value.items.length) { context.addIssue({ @@ -136,14 +138,8 @@ const boundedSchema = (item: T) => path: ["total"], }); } - if (value.next_offset !== null && !value.truncated) { - context.addIssue({ - code: "custom", - message: "a continuation requires truncated output", - path: ["next_offset"], - }); - } }); +}; /** Provider-neutral bounded raw-instruction window for one analyzed function. */ export const functionInstructionWindowSchema = z @@ -201,14 +197,22 @@ export const functionDossierSchema = z }) .strict(), pseudocode: z - .object({ - text: z.string(), - total_chars: z.number().int().min(0), - returned_chars: z.number().int().min(0), - truncated: z.boolean(), - next_offset: z.number().int().min(0).nullable(), - }) - .strict() + .discriminatedUnion("truncated", [ + z.strictObject({ + text: z.string(), + total_chars: z.number().int().min(0), + returned_chars: z.number().int().min(0), + truncated: z.literal(false), + next_offset: z.null(), + }), + z.strictObject({ + text: z.string(), + total_chars: z.number().int().min(0), + returned_chars: z.number().int().min(0), + truncated: z.literal(true), + next_offset: z.number().int().min(0).nullable(), + }), + ]) .superRefine((value, context) => { if (value.returned_chars !== [...value.text].length) { context.addIssue({ @@ -224,13 +228,6 @@ export const functionDossierSchema = z path: ["total_chars"], }); } - if (value.next_offset !== null && !value.truncated) { - context.addIssue({ - code: "custom", - message: "a continuation requires truncated pseudocode", - path: ["next_offset"], - }); - } }), assembly: boundedSchema(z.string()), comments: boundedSchema( @@ -276,7 +273,7 @@ export const functionDossierSchema = z instruction_scan: z .object({ scanned: z.number().int().min(0), truncated: z.boolean() }) .strict(), - native_api: nativeApiBoundarySchema.optional(), + native_api: nativeApiBoundarySchema.nullable().default(null), limitations: z.array(z.string()).default([]), }) .strict(); @@ -290,7 +287,7 @@ export const parseFunctionDossier = ( ): Result => { const parsed = functionDossierSchema.safeParse(value); return parsed.success - ? ok(jsonValueSchema.parse(parsed.data)) + ? ok(parsed.data) : err( new AnalysisOutputError( "analyze_function", diff --git a/src/domain/inputIssueProjection.ts b/src/domain/inputIssueProjection.ts index 23e00223b..13214d198 100644 --- a/src/domain/inputIssueProjection.ts +++ b/src/domain/inputIssueProjection.ts @@ -16,6 +16,10 @@ const projectIssue = ( const path = issue.path.flatMap((part) => typeof part === "string" || typeof part === "number" ? [part] : [], ); + if (issue.code === "invalid_union") + return issue.errors.flatMap((branch) => + branch.flatMap((branchIssue) => projectIssue(branchIssue, input)), + ); if (issue.code === "unrecognized_keys") return issue.keys.map((key) => ({ path: [...path, key], @@ -62,7 +66,8 @@ const valueAtPath = ( let current = input; for (const part of path) { if (typeof current !== "object" || current === null) return undefined; - current = (current as Readonly>)[part]; + const next: unknown = Reflect.get(current, part); + current = next; } return current; }; diff --git a/src/domain/investigationWorkspace.ts b/src/domain/investigationWorkspace.ts index 083c4c134..7e90dc975 100644 --- a/src/domain/investigationWorkspace.ts +++ b/src/domain/investigationWorkspace.ts @@ -53,36 +53,35 @@ export type InvestigationRunOptions = z.infer< >; /** Explicit write approval and two local versions for an automatic run. */ -export const crossVersionInvestigationInputSchema = z - .object({ - approved: z.literal(true), - workspace_path: z.string().min(1).max(4_096), - workspace_name: z.string().trim().min(1).max(200).default("default"), - expected_workspace_revision: z.number().int().min(1).optional(), - replay_run_id: z - .string() - .regex(/^run_[a-f0-9]{64}$/u) - .optional(), - left_path: z.string().min(1).max(4_096), - right_path: z.string().min(1).max(4_096), - integrity_policy: z.enum(["fail", "record-and-continue"]).default("fail"), - integrity_continue_approved: z.boolean().default(false), +const crossVersionInvestigationFacts = { + approved: z.literal(true), + workspace_path: z.string().min(1).max(4_096), + workspace_name: z.string().trim().min(1).max(200).default("default"), + expected_workspace_revision: z.number().int().min(1).optional(), + replay_run_id: z + .string() + .regex(/^run_[a-f0-9]{64}$/u) + .optional(), + left_path: z.string().min(1).max(4_096), + right_path: z.string().min(1).max(4_096), + options: investigationRunOptionsSchema.default( + DEFAULT_INVESTIGATION_RUN_OPTIONS, + ), +} as const; +export const crossVersionInvestigationInputSchema = z.union([ + z.object({ + ...crossVersionInvestigationFacts, + integrity_policy: z.literal("fail").default("fail"), + integrity_continue_approved: z.literal(false).default(false), max_integrity_mismatches: z.number().int().min(1).max(100).default(10), - options: investigationRunOptionsSchema.default( - DEFAULT_INVESTIGATION_RUN_OPTIONS, - ), - }) - .superRefine((input, context) => { - if ( - input.integrity_policy === "record-and-continue" && - input.integrity_continue_approved !== true - ) - context.addIssue({ - code: "custom", - path: ["integrity_continue_approved"], - message: "record-and-continue requires explicit approval", - }); - }); + }), + z.object({ + ...crossVersionInvestigationFacts, + integrity_policy: z.literal("record-and-continue"), + integrity_continue_approved: z.literal(true), + max_integrity_mismatches: z.number().int().min(1).max(100).default(10), + }), +]); export type CrossVersionInvestigationInput = z.infer< typeof crossVersionInvestigationInputSchema diff --git a/src/domain/javascriptReplay.ts b/src/domain/javascriptReplay.ts index 0aa6da8fb..6ae3035f6 100644 --- a/src/domain/javascriptReplay.ts +++ b/src/domain/javascriptReplay.ts @@ -114,46 +114,61 @@ const determinismSchema = z }) .strict(); +const controlledReplayInputShape = { + left: replaySideSchema, + right: replaySideSchema.optional(), + cases: z.array(explicitCaseSchema).max(128).default([]), + generator: generatorSchema.optional(), + determinism: determinismSchema.default({ + clock_iso: "2000-01-01T00:00:00.000Z", + random_seed: 0, + locale: "en-US", + timezone: "UTC", + platform: "linux", + }), + limits: replayLimitsSchema.default({ + wall_time_ms: 3_000, + memory_bytes: 128 * 1024 * 1024, + tasks: 8, + cpu_quota_percent: 50, + tmpfs_bytes: 16 * 1024 * 1024, + module_bytes: 4 * 1024 * 1024, + input_bytes: 256 * 1024, + protocol_bytes: 16 * 1024 * 1024, + output_bytes: 512 * 1024, + stderr_bytes: 32 * 1024, + result_depth: 16, + result_nodes: 10_000, + }), + reproducer_export: z + .strictObject({ + path: absolutePathSchema, + approved: z.literal(true), + include_sources: z.boolean().default(false), + }) + .optional(), +} as const; + +/** Parse a replay request that can only construct a plan. */ +export const controlledReplayPlanInputSchema = z.strictObject({ + ...controlledReplayInputShape, + mode: z.literal("plan"), +}); + +/** Parse a replay request carrying literal approval for one exact plan. */ +export const controlledReplayExecutionInputSchema = z.strictObject({ + ...controlledReplayInputShape, + mode: z.literal("execute"), + approved: z.literal(true), + plan_digest: digestSchema, +}); + +/** Parse a controlled replay request into its legal plan or execution state. */ export const controlledReplayInputSchema = z - .object({ - mode: z.enum(["plan", "execute"]), - left: replaySideSchema, - right: replaySideSchema.optional(), - cases: z.array(explicitCaseSchema).max(128).default([]), - generator: generatorSchema.optional(), - determinism: determinismSchema.default({ - clock_iso: "2000-01-01T00:00:00.000Z", - random_seed: 0, - locale: "en-US", - timezone: "UTC", - platform: "linux", - }), - limits: replayLimitsSchema.default({ - wall_time_ms: 3_000, - memory_bytes: 128 * 1024 * 1024, - tasks: 8, - cpu_quota_percent: 50, - tmpfs_bytes: 16 * 1024 * 1024, - module_bytes: 4 * 1024 * 1024, - input_bytes: 256 * 1024, - protocol_bytes: 16 * 1024 * 1024, - output_bytes: 512 * 1024, - stderr_bytes: 32 * 1024, - result_depth: 16, - result_nodes: 10_000, - }), - approved: z.boolean().default(false), - plan_digest: digestSchema.optional(), - reproducer_export: z - .object({ - path: absolutePathSchema, - approved: z.boolean(), - include_sources: z.boolean().default(false), - }) - .strict() - .optional(), - }) - .strict() + .discriminatedUnion("mode", [ + controlledReplayPlanInputSchema, + controlledReplayExecutionInputSchema, + ]) .superRefine((value, context) => { if (value.cases.length === 0 && value.generator === undefined) context.addIssue({ @@ -167,15 +182,6 @@ export const controlledReplayInputSchema = z path: ["generator", "count"], message: "Explicit and generated replay cases must total at most 128", }); - if ( - value.mode === "execute" && - (value.approved !== true || value.plan_digest === undefined) - ) - context.addIssue({ - code: "custom", - path: ["approved"], - message: "Execution requires literal approval and a plan digest", - }); }); const moduleCommitmentSchema = z @@ -216,7 +222,7 @@ const replayPlanSchema = z filesystem: z .object({ host_writes: z.literal(false), - private_tmpfs_bytes: z.number().int(), + private_tmpfs_bytes: z.number().int().nonnegative(), }) .strict(), runtime: z @@ -273,34 +279,45 @@ const replayPlanSchema = z }) .strict(); -const replayOutcomeSchema = z +const replayOutcomeFacts = { + case_id: z.string(), + input_sha256: digestSchema, +} as const; +const replayExceptionSchema = z .object({ - case_id: z.string(), - outcome: z.enum([ - "return", - "exception", - "serialization_error", - "denied", - "timeout", - "oom", - "crash", - "cancelled", - "protocol_error", - ]), - value: z.json().optional(), - exception: z - .object({ - name: z.string(), - message: z.string(), - stack: z.string().nullable(), - }) - .strict() - .optional(), - input_sha256: digestSchema, - output_sha256: digestSchema.nullable(), - truncated: z.boolean(), + name: z.string(), + message: z.string(), + stack: z.string().nullable(), }) .strict(); +const replayOutcomeSchema = z.discriminatedUnion("outcome", [ + z.strictObject({ + ...replayOutcomeFacts, + outcome: z.literal("return"), + value: z.json(), + output_sha256: digestSchema, + truncated: z.literal(false), + }), + z.strictObject({ + ...replayOutcomeFacts, + outcome: z.enum(["exception", "serialization_error", "denied"]), + exception: z.object(replayExceptionSchema.shape).strict(), + output_sha256: digestSchema, + truncated: z.literal(false), + }), + z.strictObject({ + ...replayOutcomeFacts, + outcome: z.enum(["timeout", "oom", "crash", "cancelled"]), + output_sha256: z.null(), + truncated: z.literal(false), + }), + z.strictObject({ + ...replayOutcomeFacts, + outcome: z.literal("protocol_error"), + output_sha256: z.null(), + truncated: z.literal(true), + }), +]); export const replayExecutionResultSchema = z .object({ @@ -360,31 +377,37 @@ export const replayEvidenceSchema = evidenceEnvelopeSchema .omit({ normalized_result: true }) .extend({ normalized_result: replayExecutionResultSchema }); -export const controlledReplayOutputSchema = z - .object({ - phase: z.enum(["plan", "execute"]), - plan: replayPlanSchema.nullable(), - source_evidence: z.array(replayEvidenceSchema), - evidence: replayEvidenceSchema.nullable(), - }) - .strict() - .superRefine((value, context) => { - if ( - (value.phase === "plan" && - (value.plan === null || - value.evidence !== null || - value.source_evidence.length !== 0)) || - (value.phase === "execute" && - (value.plan !== null || - value.evidence === null || - value.source_evidence.length === 0)) - ) - context.addIssue({ - code: "custom", - message: "Replay output phase does not match its payload", - }); - }); +/** A replay plan result with no claimed runtime observation. */ +export const controlledReplayPlanOutputSchema = z.strictObject({ + phase: z.literal("plan"), + plan: replayPlanSchema, + source_evidence: z + .array(replayEvidenceSchema) + .length(0) + .brand<"NoReplayEvidence">(), + evidence: z.null(), +}); + +/** An executed replay result with its required source and aggregate Evidence. */ +export const controlledReplayExecutionOutputSchema = z.strictObject({ + phase: z.literal("execute"), + plan: z.null(), + source_evidence: z.array(replayEvidenceSchema).min(1), + evidence: replayEvidenceSchema, +}); + +/** Parse replay output into its legal plan or execution state. */ +export const controlledReplayOutputSchema = z.discriminatedUnion("phase", [ + controlledReplayPlanOutputSchema, + controlledReplayExecutionOutputSchema, +]); export type ControlledReplayInput = z.infer; +export type ControlledReplayExecutionInput = z.infer< + typeof controlledReplayExecutionInputSchema +>; +export type ControlledReplayExecutionOutput = z.infer< + typeof controlledReplayExecutionOutputSchema +>; export type ReplayPlan = z.infer; export type ReplayExecutionResult = z.infer; diff --git a/src/domain/javascriptRuntimeReconciliationGraph.ts b/src/domain/javascriptRuntimeReconciliationGraph.ts index 441e92f7e..2d9ba26f9 100644 --- a/src/domain/javascriptRuntimeReconciliationGraph.ts +++ b/src/domain/javascriptRuntimeReconciliationGraph.ts @@ -24,10 +24,8 @@ interface GraphCoverageFacts { readonly projectionOmissions: number; readonly knownOmissions: number; readonly omissionsKnown: boolean; - readonly inputTruncated: boolean; + readonly inputStatus: "complete" | "partial" | "truncated"; readonly outputTruncated: boolean; - readonly truncated: boolean; - readonly complete: boolean; } /** Combined graph plus omissions introduced while merging its observations. */ @@ -66,7 +64,7 @@ export const buildReconciledApplicationGraph = ( "Runtime presence is bounded to passive capture windows and does not prove feature execution.", "Cross-layer observed_as edges are inferences; digest equality proves byte identity only.", "Source-map relationships retain their original static authority and are not promoted into runtime matches.", - ...(facts.inputTruncated + ...(facts.inputStatus === "truncated" ? [ "One or more source graphs or passive captures were incomplete or truncated.", ] @@ -154,6 +152,12 @@ const graphCoverageFacts = ( const inputTruncated = input.layers.some(({ graph }) => graph.coverage.truncated) || captureTruncated; + const inputComplete = + input.layers.every(({ graph }) => graph.coverage.status === "complete") && + input.captures.every( + ({ inspection }) => + inspection.completeness.status === "complete_within_window", + ); const outputTruncated = projectionOmissions > 0; const sourceOmissions = input.layers.reduce( (total, { graph }) => total + (graph.coverage.omitted_count ?? 0), @@ -167,17 +171,12 @@ const graphCoverageFacts = ( projectionOmissions, knownOmissions: projectionOmissions + sourceOmissions, omissionsKnown, - inputTruncated, + inputStatus: inputTruncated + ? "truncated" + : inputComplete + ? "complete" + : "partial", outputTruncated, - truncated: inputTruncated || outputTruncated, - complete: - !inputTruncated && - !outputTruncated && - input.layers.every(({ graph }) => graph.coverage.status === "complete") && - input.captures.every( - ({ inspection }) => - inspection.completeness.status === "complete_within_window", - ), }; }; @@ -186,15 +185,15 @@ const graphCoverage = ( facts: GraphCoverageFacts, nodeCount: number, ): JavaScriptApplicationGraph["coverage"] => - facts.complete + facts.inputStatus === "complete" && !facts.outputTruncated ? { status: "complete", truncated: false, omitted_count: 0, limits: [] } - : facts.truncated + : facts.inputStatus === "truncated" || facts.outputTruncated ? { status: "partial", truncated: true, omitted_count: facts.omissionsKnown ? facts.knownOmissions : null, limits: [ - ...(facts.inputTruncated + ...(facts.inputStatus === "truncated" ? [ { name: "runtime-reconciliation-input-coverage", diff --git a/src/domain/javascriptRuntimeReconciliationMatching.ts b/src/domain/javascriptRuntimeReconciliationMatching.ts index 04fac64da..f3bfbddb5 100644 --- a/src/domain/javascriptRuntimeReconciliationMatching.ts +++ b/src/domain/javascriptRuntimeReconciliationMatching.ts @@ -81,14 +81,16 @@ const reconcileEntity = ( const combined = content.filter((candidate) => locatedKeys.has(candidateKey(candidate)), ); - if (combined.length === 1) - return matched(entity, combined[0]!, { + const combinedCandidate = combined.at(0); + if (combined.length === 1 && combinedCandidate !== undefined) + return matched(entity, combinedCandidate, { basis: "content-and-location", confidence: "high", reason: "content-and-location-match", }); - if (content.length === 1) { - const candidate = content[0]!; + const contentCandidate = content.at(0); + if (content.length === 1 && contentCandidate !== undefined) { + const candidate = contentCandidate; const digestBasis = candidate.digests.find( ({ sha256 }) => sha256 === entity.sourceSha256, )?.basis; @@ -123,8 +125,9 @@ const reconcileEntity = ( }); } - if (locations.length === 1) { - const located = locations[0]!; + const location = locations.at(0); + if (locations.length === 1 && location !== undefined) { + const located = location; return matched(entity, located.candidate, { basis: located.mapping.basis, confidence: "medium", @@ -314,52 +317,57 @@ const reconciliationEvidence = ( layer: ParsedStaticLayer, basis: JavaScriptRuntimeReconciliationItem["basis"], confidence: JavaScriptRuntimeReconciliationItem["confidence"], -): ApplicationGraphEvidence => ({ - authority: "cross-layer-reconciliation", - state: "inferred", - confidence: confidence === "medium" ? "medium" : "high", - artifact: - entity.sourceSha256 === null - ? { - available: false, - reason: "not-observed", - detail: "Runtime source bytes were not captured for this mapping.", - } - : { - available: true, - artifact_id: `art_${entity.sourceSha256}`, - sha256: entity.sourceSha256, - }, - location: entity.node.observations[0]!.evidence.location, - extractor: { - name: "rea-javascript-runtime-reconciliation", - version: "1", - operation: "reconcile_javascript_runtime", - executable_sha256: null, - }, - coverage: - layer.graph.coverage.status === "complete" && - entity.capture.scriptsCompleteWithinScope - ? { status: "complete", truncated: false, omitted_count: 0, limits: [] } - : { - status: "partial", - truncated: false, - omitted_count: null, - limits: [], - }, - limitations: [ - basis === "content-sha256" || - basis === "module-source-sha256" || - basis === "content-and-location" - ? "Equal content digests establish byte identity, not execution causality." - : "Location correspondence is inferred from an artifact root or caller-declared mapping.", - "Passive script parsing or target presence does not prove feature execution.", - ], - evidence_ids: [ - layer.evidence.evidence_id, - entity.capture.evidence.evidence_id, - ].sort(), -}); +): ApplicationGraphEvidence => { + const observation = entity.node.observations.at(0); + if (observation === undefined) + throw new TypeError("Runtime reconciliation entity has no observation"); + return { + authority: "cross-layer-reconciliation", + state: "inferred", + confidence: confidence === "medium" ? "medium" : "high", + artifact: + entity.sourceSha256 === null + ? { + available: false, + reason: "not-observed", + detail: "Runtime source bytes were not captured for this mapping.", + } + : { + available: true, + artifact_id: `art_${entity.sourceSha256}`, + sha256: entity.sourceSha256, + }, + location: observation.evidence.location, + extractor: { + name: "rea-javascript-runtime-reconciliation", + version: "1", + operation: "reconcile_javascript_runtime", + executable_sha256: null, + }, + coverage: + layer.graph.coverage.status === "complete" && + entity.capture.scriptsCompleteWithinScope + ? { status: "complete", truncated: false, omitted_count: 0, limits: [] } + : { + status: "partial", + truncated: false, + omitted_count: null, + limits: [], + }, + limitations: [ + basis === "content-sha256" || + basis === "module-source-sha256" || + basis === "content-and-location" + ? "Equal content digests establish byte identity, not execution causality." + : "Location correspondence is inferred from an artifact root or caller-declared mapping.", + "Passive script parsing or target presence does not prove feature execution.", + ], + evidence_ids: [ + layer.evidence.evidence_id, + entity.capture.evidence.evidence_id, + ].sort(), + }; +}; const strongestLocationBasis = ( values: readonly LocatedCandidate[], diff --git a/src/domain/javascriptRuntimeReconciliationResult.ts b/src/domain/javascriptRuntimeReconciliationResult.ts index dbdc22e1d..78d8b2993 100644 --- a/src/domain/javascriptRuntimeReconciliationResult.ts +++ b/src/domain/javascriptRuntimeReconciliationResult.ts @@ -27,8 +27,7 @@ interface ReconciliationProjection { interface CompletionFlags { readonly outputTruncated: boolean; - readonly inputTruncated: boolean; - readonly inputPartial: boolean; + readonly inputStatus: "complete" | "partial" | "truncated"; } /** Build and verify the deterministic caller-visible reconciliation result. */ @@ -150,36 +149,44 @@ const reconciliationCoverage = ( completion: CompletionFlags, ): JavaScriptRuntimeReconciliationResult["coverage"] => ({ status: - completion.outputTruncated || completion.inputTruncated + completion.outputTruncated || completion.inputStatus === "truncated" ? "truncated" - : completion.inputPartial + : completion.inputStatus === "partial" ? "partial" : "complete-within-inputs", - truncated: completion.outputTruncated || completion.inputTruncated, + truncated: + completion.outputTruncated || completion.inputStatus === "truncated", omitted_runtime_entities: input.runtime.omittedEntities, omitted_reconciliation_items: input.matching.omittedItems, omitted_static_load_states: input.loadStates.omittedStates, omitted_graph_items: input.omittedGraphItems, }); -const completionFlags = (input: ReconciliationProjection): CompletionFlags => ({ - outputTruncated: - input.runtime.omittedEntities > 0 || - input.matching.omittedItems > 0 || - input.loadStates.omittedStates > 0 || - input.omittedGraphItems > 0, - inputTruncated: +const completionFlags = (input: ReconciliationProjection): CompletionFlags => { + const inputTruncated = input.layers.some(({ graph }) => graph.coverage.truncated) || input.captures.some(({ inspection }) => inspection.completeness.conditions.includes("truncated"), - ), - inputPartial: + ); + const inputPartial = input.layers.some(({ graph }) => graph.coverage.status !== "complete") || input.captures.some( ({ inspection }) => inspection.completeness.status !== "complete_within_window", - ), -}); + ); + return { + outputTruncated: + input.runtime.omittedEntities > 0 || + input.matching.omittedItems > 0 || + input.loadStates.omittedStates > 0 || + input.omittedGraphItems > 0, + inputStatus: inputTruncated + ? "truncated" + : inputPartial + ? "partial" + : "complete", + }; +}; const reconciliationLimitations = (completion: CompletionFlags): string[] => uniqueSorted([ @@ -189,7 +196,7 @@ const reconciliationLimitations = (completion: CompletionFlags): string[] => "Not-observed means absent from the bounded captures in scope, never globally unloaded.", "Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.", "Source-map authority remains separate from passive runtime authority.", - ...(completion.inputPartial + ...(completion.inputStatus !== "complete" ? ["One or more static graphs or passive captures were incomplete."] : []), ...(completion.outputTruncated diff --git a/src/domain/knownPageCoverage.ts b/src/domain/knownPageCoverage.ts index a6d65f60f..5659ed146 100644 --- a/src/domain/knownPageCoverage.ts +++ b/src/domain/knownPageCoverage.ts @@ -9,13 +9,19 @@ export interface KnownCollectionPage { } /** Fail-closed completeness derived from a known-total source page. */ -export interface KnownPageCoverageAssessment { - readonly complete: boolean; - readonly sourceComplete: boolean; +export type KnownPageCoverageAssessment = { readonly includedCount: number; readonly omittedCount: number; readonly sourceOmittedCount: number; -} +} & ( + | { + readonly complete: true; + readonly sourceComplete: true; + readonly omittedCount: 0; + readonly sourceOmittedCount: 0; + } + | { readonly complete: false; readonly sourceComplete: boolean } +); /** * Assess source-page and downstream-projection completeness without treating an @@ -37,11 +43,19 @@ export const assessKnownPageCoverage = ( page.returned === page.total && sourceOmittedCount === 0; const omittedCount = Math.max(0, page.total - retainedCount); - return { - complete: sourceComplete && omittedCount === 0, - sourceComplete, - includedCount: retainedCount, - omittedCount, - sourceOmittedCount, - }; + return sourceComplete && omittedCount === 0 + ? { + complete: true, + sourceComplete: true, + includedCount: retainedCount, + omittedCount: 0, + sourceOmittedCount: 0, + } + : { + complete: false, + sourceComplete, + includedCount: retainedCount, + omittedCount, + sourceOmittedCount, + }; }; diff --git a/src/domain/nativeApiBoundary.ts b/src/domain/nativeApiBoundary.ts index e63301cdf..fa27f5995 100644 --- a/src/domain/nativeApiBoundary.ts +++ b/src/domain/nativeApiBoundary.ts @@ -16,25 +16,35 @@ const inferenceEvidenceSchema = z }) .strict(); -const inferredBoundaryTypeSchema = z - .object({ - role: z.enum(["return", "parameter"]), - ordinal: z.number().int().min(0).nullable(), - name: z.string().min(1).nullable(), - data_type: z.string().min(1), - size_bytes: z.number().int().min(0).nullable(), - storage: z.string().min(1).nullable(), - confidence: inferenceConfidenceSchema, - evidence: z.array(inferenceEvidenceSchema).min(1), - decompiler_artifacts: z.array( - z.enum([ - "recovered-signature", - "register-or-stack-storage", - "compiler-generated-variable", - ]), - ), - }) - .strict(); +const inferredBoundaryTypeFacts = { + ordinal: z.number().int().min(0).nullable(), + name: z.string().min(1).nullable(), + data_type: z.string().min(1), + size_bytes: z.number().int().min(0).nullable(), + storage: z.string().min(1).nullable(), + confidence: inferenceConfidenceSchema, + evidence: z.array(inferenceEvidenceSchema).min(1), + decompiler_artifacts: z.array( + z.enum([ + "recovered-signature", + "register-or-stack-storage", + "compiler-generated-variable", + ]), + ), +} as const; + +const inferredReturnTypeSchema = z.strictObject({ + ...inferredBoundaryTypeFacts, + role: z.literal("return"), + ordinal: z.null(), + name: z.null(), +}); + +const inferredParameterTypeSchema = z.strictObject({ + ...inferredBoundaryTypeFacts, + role: z.literal("parameter"), + ordinal: z.number().int().min(0), +}); const jumpTableDataSourceSchema = z .object({ @@ -77,8 +87,8 @@ const availableNativeApiBoundarySchema = z provenance: z.string().min(1), signature_source: z.string().min(1), calling_convention: z.string().min(1), - return_type: inferredBoundaryTypeSchema, - parameters: z.array(inferredBoundaryTypeSchema), + return_type: inferredReturnTypeSchema, + parameters: z.array(inferredParameterTypeSchema), parameters_truncated: z.boolean(), jump_tables: z.array(inferredJumpTableSchema), jump_tables_truncated: z.boolean(), diff --git a/src/domain/nodeRuntimeCharacterization.ts b/src/domain/nodeRuntimeCharacterization.ts index cfe3dadfa..07514a5e7 100644 --- a/src/domain/nodeRuntimeCharacterization.ts +++ b/src/domain/nodeRuntimeCharacterization.ts @@ -1,8 +1,9 @@ import { z } from "zod"; import { - controlledReplayInputSchema, - controlledReplayOutputSchema, + controlledReplayExecutionOutputSchema, + controlledReplayPlanInputSchema, + controlledReplayPlanOutputSchema, } from "./javascriptReplay.js"; import { javascriptExportInstrumentationInputSchema, @@ -12,22 +13,24 @@ import { runtimeCharacterizationPlanSchema } from "./runtimeCharacterization.js" import { evidenceRecordSchema } from "./evidence.js"; const digestSchema = z.string().regex(/^[a-f0-9]{64}$/u); +const nodeCharacterizationExpectedEffectSchema = z.enum([ + "pure", + "observation-only", +]); +const nodeRuntimeCharacterizationPlanSchema = + runtimeCharacterizationPlanSchema.extend({ + expected_effect: nodeCharacterizationExpectedEffectSchema, + }); export const nodeCharacterizationPreparationInputSchema = z .strictObject({ preparation_approved: z.literal(true), selected_alias: z.string().min(1).max(200), - expected_effect: z.enum(["pure", "observation-only"]), + expected_effect: nodeCharacterizationExpectedEffectSchema, instrumentation: javascriptExportInstrumentationInputSchema, - replay: controlledReplayInputSchema, + replay: controlledReplayPlanInputSchema, }) .superRefine((input, context) => { - if (input.replay.mode !== "plan") - context.addIssue({ - code: "custom", - path: ["replay", "mode"], - message: "Characterization preparation requires replay plan mode", - }); const selected = input.replay.left.modules.filter( ({ alias }) => alias === input.selected_alias, ); @@ -68,20 +71,20 @@ export const nodeCharacterizationExecutionInputSchema = z.strictObject({ export const nodeCharacterizationPreparationOutputSchema = z.strictObject({ schema_version: z.literal(1), phase: z.literal("preparation"), - plan: runtimeCharacterizationPlanSchema, + plan: nodeRuntimeCharacterizationPlanSchema, transformation: javascriptExportTransformationManifestSchema, transformation_evidence: evidenceRecordSchema, - replay: controlledReplayOutputSchema, + replay: controlledReplayPlanOutputSchema, }); export const nodeCharacterizationExecutionOutputSchema = z.strictObject({ schema_version: z.literal(1), phase: z.literal("execution"), - plan: runtimeCharacterizationPlanSchema, + plan: nodeRuntimeCharacterizationPlanSchema, transformation: javascriptExportTransformationManifestSchema, transformation_evidence: evidenceRecordSchema, evidence: evidenceRecordSchema, - replay: controlledReplayOutputSchema, + replay: controlledReplayExecutionOutputSchema, }); export type NodeCharacterizationPreparationInput = z.infer< diff --git a/src/domain/processCaptureReactiveValidation.ts b/src/domain/processCaptureReactiveValidation.ts index d13de4e49..62a5a791c 100644 --- a/src/domain/processCaptureReactiveValidation.ts +++ b/src/domain/processCaptureReactiveValidation.ts @@ -206,14 +206,16 @@ const replayTransitions = ( (run.controls[controlIndex]?.after_capture_order ?? Number.MAX_SAFE_INTEGER) < observation.capture_order ) { - const control = run.controls[controlIndex]!; + const control = run.controls[controlIndex]; + if (control === undefined) break; advanceControl(control, controlIndex); controlIndex += 1; } advance({ kind: "observation", observation }); } for (; controlIndex < run.controls.length; controlIndex += 1) { - const control = run.controls[controlIndex]!; + const control = run.controls[controlIndex]; + if (control === undefined) break; advanceControl(control, controlIndex); } require(transitionIndex === @@ -237,10 +239,11 @@ const validateControls = ( require(admittedOrders.has( control.after_capture_order, ), `reactive_run.controls[${String(index)}].after_capture_order`, "reactive control cutoff must identify the last admitted observation"); + const previous = run.controls.at(index - 1); require(index === 0 || - control.after_capture_order >= - run.controls[index - 1]! - .after_capture_order, `reactive_run.controls[${String(index)}].after_capture_order`, "reactive control cutoffs must be ordered"); + (previous !== undefined && + control.after_capture_order >= + previous.after_capture_order), `reactive_run.controls[${String(index)}].after_capture_order`, "reactive control cutoffs must be ordered"); } }; diff --git a/src/domain/processCaptureValidation.ts b/src/domain/processCaptureValidation.ts index c6e9e1f34..5a5d818ed 100644 --- a/src/domain/processCaptureValidation.ts +++ b/src/domain/processCaptureValidation.ts @@ -18,9 +18,16 @@ type RequireInvariant = ( const orderedTimestamps = ( values: readonly { readonly at_ms: number }[], ): boolean => - values.every( - (value, index) => index === 0 || value.at_ms >= values[index - 1]!.at_ms, - ); + values.every((value, index) => { + const previous = values[index - 1]; + return previous === undefined || value.at_ms >= previous.at_ms; + }); + +const transitionsAreContiguous = ( + previous: ProcessCapture["replay_transitions"][number] | undefined, + current: ProcessCapture["replay_transitions"][number], +): boolean => + previous !== undefined && previous.state_after === current.state_before; const validateCommitments = ( capture: ProcessCapture, @@ -156,7 +163,7 @@ const shimPlans = (capture: ProcessCapture) => typeof shim.name === "string" && Array.isArray(shim.routes) ? shim.routes.map((route, routeIndex) => ({ - command: shim.name as string, + command: shim.name, route, routeIndex, })) @@ -295,9 +302,12 @@ const validateReplayEvents = ( if (index === 0) require(transition.state_before === machine?.initial_state, "replay_transitions", "first replay transition does not start at the declared initial state"); + const previous = capture.replay_transitions[index - 1]; if (index > 0) - require(capture.replay_transitions[index - 1]!.state_after === - transition.state_before, "replay_transitions", "replay transition states are not contiguous"); + require(transitionsAreContiguous( + previous, + transition, + ), "replay_transitions", "replay transition states are not contiguous"); } }; diff --git a/src/domain/processComparison.ts b/src/domain/processComparison.ts index e66c1f89e..6639afa54 100644 --- a/src/domain/processComparison.ts +++ b/src/domain/processComparison.ts @@ -248,8 +248,9 @@ const assertComparable = ( ...validateProcessCapture(left), ...validateProcessCapture(right), ]; - if (invalid.length > 0) - throw new TypeError(`Invalid Process Capture v4: ${invalid[0]!.path}`); + const firstInvalid = invalid.at(0); + if (firstInvalid !== undefined) + throw new TypeError(`Invalid Process Capture v4: ${firstInvalid.path}`); if ( left.schema_version !== right.schema_version || left.manifest.comparison_contract_sha256 !== diff --git a/src/domain/processObservation.ts b/src/domain/processObservation.ts index aa00d279f..a0a135d25 100644 --- a/src/domain/processObservation.ts +++ b/src/domain/processObservation.ts @@ -100,15 +100,15 @@ type ProjectedRecord = Omit< const atMilliseconds = (value: unknown): number | null => { if (typeof value !== "object" || value === null) return null; - for (const name of ["at_ms", "dispatched_at_ms"]) - if (name in value) { - const candidate = value[name as keyof typeof value]; - if (typeof candidate === "number" && Number.isSafeInteger(candidate)) - return candidate; - } + if ("at_ms" in value && isSafeMillisecond(value.at_ms)) return value.at_ms; + if ("dispatched_at_ms" in value && isSafeMillisecond(value.dispatched_at_ms)) + return value.dispatched_at_ms; return null; }; +const isSafeMillisecond = (value: unknown): value is number => + typeof value === "number" && Number.isSafeInteger(value); + /** Derive the stable capture-local identity for one normalized observation. */ export const processObservationSubject = ( source: ProcessObservationSource, diff --git a/src/domain/processReactiveMatching.ts b/src/domain/processReactiveMatching.ts index dd121164e..b0fc3688a 100644 --- a/src/domain/processReactiveMatching.ts +++ b/src/domain/processReactiveMatching.ts @@ -10,13 +10,14 @@ import { import type { ProcessReactiveSnapshot } from "./processReactiveRuntime.js"; /** Internal bounded trigger-match result used by the pure reducer. */ -export interface ProcessReactiveTriggerMatch { - readonly matched: boolean; +export type ProcessReactiveTriggerMatch = { readonly eventIds: readonly string[]; readonly consumeIds: readonly string[]; readonly lastOrder: number; - readonly overflow: boolean; -} +} & ( + | { readonly matched: true; readonly overflow: false } + | { readonly matched: false; readonly overflow: boolean } +); interface EvaluationBudget { remaining: number; @@ -203,13 +204,20 @@ const matchTerminalText = ( const mergeMatches = ( matches: readonly ProcessReactiveTriggerMatch[], -): ProcessReactiveTriggerMatch => ({ - matched: matches.every(({ matched }) => matched), - eventIds: [...new Set(matches.flatMap(({ eventIds }) => eventIds))], - consumeIds: [...new Set(matches.flatMap(({ consumeIds }) => consumeIds))], - lastOrder: Math.max(-1, ...matches.map(({ lastOrder }) => lastOrder)), - overflow: matches.some(({ overflow }) => overflow), -}); +): ProcessReactiveTriggerMatch => { + const base = { + eventIds: [...new Set(matches.flatMap(({ eventIds }) => eventIds))], + consumeIds: [...new Set(matches.flatMap(({ consumeIds }) => consumeIds))], + lastOrder: Math.max(-1, ...matches.map(({ lastOrder }) => lastOrder)), + }; + return matches.every(({ matched }) => matched) + ? { ...base, matched: true, overflow: false } + : { + ...base, + matched: false, + overflow: matches.some(({ overflow }) => overflow), + }; +}; const matchEarliestPrefix = ( trigger: ProcessReactiveTrigger, diff --git a/src/domain/processReactiveTransition.ts b/src/domain/processReactiveTransition.ts index 50fa92775..f231f0d24 100644 --- a/src/domain/processReactiveTransition.ts +++ b/src/domain/processReactiveTransition.ts @@ -43,6 +43,10 @@ const applyProcessReactiveTransition = (input: { >[]; readonly evaluations: readonly ProcessReactiveEvaluation[]; }): ProcessReactiveDecision => { + if (input.effectResults.length !== input.transition.actions.length) + throw new TypeError( + "Reactive transition effects do not match the admitted actions", + ); const outcome = input.transition.target.kind === "finish" ? input.transition.target.outcome @@ -66,13 +70,17 @@ const applyProcessReactiveTransition = (input: { const consumed = new Set(input.snapshot.consumed_event_ids); for (const eventId of input.consumeEventIds) consumed.add(eventId); const checkpoints = [...input.snapshot.checkpoints]; - for (const [index, action] of input.transition.actions.entries()) + for (const [index, action] of input.transition.actions.entries()) { + const effect = input.effectResults[index]; + if (effect === undefined) + throw new TypeError("Reactive transition effect is missing"); if (action.type === "checkpoint") checkpoints.push({ name: action.name, - event_id: input.effectResults[index]!.observation.event_id, - capture_order: input.effectResults[index]!.observation.capture_order, + event_id: effect.observation.event_id, + capture_order: effect.observation.capture_order, }); + } const completedCaptureOrder = Math.max( input.observation.capture_order, ...input.effectResults.map(({ observation }) => observation.capture_order), diff --git a/src/domain/processScenario.ts b/src/domain/processScenario.ts index 48a337547..74288a766 100644 --- a/src/domain/processScenario.ts +++ b/src/domain/processScenario.ts @@ -326,7 +326,9 @@ export const processScenarioSchema = z .strict() .superRefine((scenario, context) => { for (let index = 1; index < scenario.events.length; index += 1) { - if (scenario.events[index]!.at_ms < scenario.events[index - 1]!.at_ms) { + const event = scenario.events[index]; + const previous = scenario.events[index - 1]; + if (eventsOutOfOrder(event, previous)) { context.addIssue({ code: "custom", message: "events must be ordered by at_ms", @@ -408,6 +410,12 @@ export const processScenarioSchema = z }); }); +const eventsOutOfOrder = ( + event: { readonly at_ms: number } | undefined, + previous: { readonly at_ms: number } | undefined, +): boolean => + event !== undefined && previous !== undefined && event.at_ms < previous.at_ms; + /** Parsed instructions and resource bounds for one process experiment. */ export type ProcessScenario = z.infer; @@ -415,15 +423,20 @@ export type ProcessScenario = z.infer; export const parseProcessScenario = (input: unknown): ProcessScenario => processScenarioSchema.parse(input); -/** Operator-owned ceiling applied in addition to per-scenario approval. */ -export interface ProcessExecutionPolicy { - readonly enabled: boolean; - readonly executableRoots: readonly string[]; - readonly workingRoots: readonly string[]; +/** Complete operator-owned ceiling for enabled process capture. */ +export interface EnabledProcessExecutionPolicy { + readonly status: "enabled"; + readonly executableRoots: readonly [string, ...string[]]; + readonly workingRoots: readonly [string, ...string[]]; readonly allowedEnvironment: readonly string[]; - readonly allowExternalNetwork: boolean; + readonly networkAccess: "none" | "external"; } +/** Parsed operator-owned process-capture policy. */ +export type ProcessExecutionPolicy = + | { readonly status: "disabled" } + | EnabledProcessExecutionPolicy; + /** Explicit authorization result; denial reasons are safe to show callers. */ export type ProcessPolicyDecision = | { readonly allowed: true } @@ -449,9 +462,9 @@ export const authorizeProcessScenario = ( scenario: ProcessScenario, policy: ProcessExecutionPolicy, ): ProcessPolicyDecision => { - if (!policy.enabled) + if (policy.status === "disabled") return { allowed: false, reason: "process capture is disabled" }; - if (scenario.network_access === "host" && !policy.allowExternalNetwork) + if (scenario.network_access === "host" && policy.networkAccess === "none") return { allowed: false, reason: "host network access is not approved by operator policy", diff --git a/src/domain/processTraceComparison.ts b/src/domain/processTraceComparison.ts index c545295f3..874616eac 100644 --- a/src/domain/processTraceComparison.ts +++ b/src/domain/processTraceComparison.ts @@ -32,9 +32,10 @@ export const compareProcessTraces = ( ...validateProcessCapture(left), ...validateProcessCapture(right), ]; - if (captureIssues.length > 0) + const firstCaptureIssue = captureIssues.at(0); + if (firstCaptureIssue !== undefined) throw new TypeError( - `Invalid Process Capture v4: ${captureIssues[0]!.path}`, + `Invalid Process Capture v4: ${firstCaptureIssue.path}`, ); const specification = processTraceSpecificationSchema.parse(specificationInput); diff --git a/src/domain/protocolCapture.ts b/src/domain/protocolCapture.ts index 9c6dedd2c..9012e62d5 100644 --- a/src/domain/protocolCapture.ts +++ b/src/domain/protocolCapture.ts @@ -128,7 +128,7 @@ export function decodeJsonRpc(rawPayload: Uint8Array): { truncated: boolean; } { const text = new TextDecoder().decode(rawPayload); - const parsed = JSON.parse(text); + const parsed = jsonValueSchema.parse(JSON.parse(text)); const fields: DecodedField[] = []; if (typeof parsed === "object" && parsed !== null) { @@ -144,7 +144,7 @@ export function decodeJsonRpc(rawPayload: Uint8Array): { fields.push({ path: key, wire_type: "json", - value: value as never, + value, inferred: false, }); } @@ -164,7 +164,8 @@ export function decodeMessagePack(rawPayload: Uint8Array): { if (rawPayload.length === 0) { return { decoded_fields: [], truncated: false }; } - const tag = rawPayload[0]!; + const tag = rawPayload[0]; + if (tag === undefined) return { decoded_fields: [], truncated: false }; // Map type: 0x80-0x8f (fixmap), 0xde (map16), 0xdf (map32) if ((tag >= 0x80 && tag <= 0x8f) || tag === 0xde || tag === 0xdf) { fields.push({ @@ -217,10 +218,10 @@ export function decodeGrpcFrame(rawPayload: Uint8Array): { } const compressed = rawPayload[0] !== 0; const length = - (rawPayload[1]! << 24) | - (rawPayload[2]! << 16) | - (rawPayload[3]! << 8) | - rawPayload[4]!; + ((rawPayload[1] ?? 0) << 24) | + ((rawPayload[2] ?? 0) << 16) | + ((rawPayload[3] ?? 0) << 8) | + (rawPayload[4] ?? 0); return { decoded_fields: [ { diff --git a/src/domain/replayMachineRuntime.ts b/src/domain/replayMachineRuntime.ts index 84bf6ab53..825f5259b 100644 --- a/src/domain/replayMachineRuntime.ts +++ b/src/domain/replayMachineRuntime.ts @@ -40,7 +40,7 @@ const replayEventHeadersSchema = z }); const replayEventFields = { - at_ms: z.number().int().nonnegative().safe(), + at_ms: z.number().int().safe().nonnegative(), path: z.string().startsWith("/").max(8_192), headers: replayEventHeadersSchema, body: z.string().max(1_000_000), @@ -125,7 +125,8 @@ export type ReplayMachineDecision = const parseJson = (value: string): unknown => { try { - return JSON.parse(value) as unknown; + const parsed: unknown = JSON.parse(value); + return parsed; } catch { return undefined; } @@ -148,7 +149,8 @@ const atPath = ( !Object.hasOwn(current, segment) ) return undefined; - current = (current as Readonly>)[segment]; + const next: unknown = Reflect.get(current, segment); + current = next; } return current; }; diff --git a/src/domain/sourceToBundleComparison.ts b/src/domain/sourceToBundleComparison.ts index 64155fccd..5ca499e39 100644 --- a/src/domain/sourceToBundleComparison.ts +++ b/src/domain/sourceToBundleComparison.ts @@ -219,12 +219,10 @@ const comparisonCoverage = ( const scoringModel = (): SourceToBundleComparisonResult["scoring"] => ({ algorithm: "rea-source-to-bundle-signals/v1", minimum_candidate_score: 20, - weights: Object.entries(SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS).map( - ([signal, weight]) => ({ - signal: signal as keyof typeof SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS, - weight, - }), - ), + weights: SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS.map(([signal, weight]) => ({ + signal, + weight, + })), }); const classifyMapping = ( diff --git a/src/domain/sourceToBundleComparisonSchemas.ts b/src/domain/sourceToBundleComparisonSchemas.ts index a79e79032..22fef6e88 100644 --- a/src/domain/sourceToBundleComparisonSchemas.ts +++ b/src/domain/sourceToBundleComparisonSchemas.ts @@ -9,14 +9,14 @@ const evidenceIdSchema = z.string().regex(/^ev_[a-f0-9]{64}$/u); const nodeIdSchema = z.string().regex(/^jag_node_[a-f0-9]{64}$/u); const boundedTextSchema = z.string().min(1).max(4_096); -export const SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS = { - "exact-source-digest": 100, - "source-map-original-path": 70, - "current-path-exact": 60, - "current-path-suffix": 40, - "basename-match": 20, - "language-extension": 5, -} as const; +export const SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS = [ + ["exact-source-digest", 100], + ["source-map-original-path", 70], + ["current-path-exact", 60], + ["current-path-suffix", 40], + ["basename-match", 20], + ["language-extension", 5], +] as const; const sourceToBundleSignalKindSchema = z.enum([ "exact-source-digest", diff --git a/src/domain/sourceToBundleSignals.ts b/src/domain/sourceToBundleSignals.ts index f3d67ac4f..96957ee45 100644 --- a/src/domain/sourceToBundleSignals.ts +++ b/src/domain/sourceToBundleSignals.ts @@ -53,6 +53,15 @@ const PATH_PROPERTIES = [ ] as const; const MAX_PATH_SUFFIXES = 128; +const signalWeight = (kind: SourceToBundleSignal["kind"]): number => { + const entry = SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS.find( + ([signal]) => signal === kind, + ); + if (entry === undefined) + throw new TypeError(`Missing source-to-bundle signal weight: ${kind}`); + return entry[1]; +}; + /** Keep source-bearing application nodes in stable identifier order. */ export const sourceBearingNodes = ( nodes: readonly ApplicationNode[], @@ -227,7 +236,7 @@ const signal = ( currentValues: readonly string[], ): SourceToBundleSignal => ({ kind, - weight: SOURCE_TO_BUNDLE_SIGNAL_WEIGHTS[kind], + weight: signalWeight(kind), source_value: sourceValue, current_values: [...new Set(currentValues)].sort(compareText).slice(0, 64), }); diff --git a/src/domain/staticRuntimeCorrelation.ts b/src/domain/staticRuntimeCorrelation.ts index 123c1c007..1cc4c1c12 100644 --- a/src/domain/staticRuntimeCorrelation.ts +++ b/src/domain/staticRuntimeCorrelation.ts @@ -148,7 +148,9 @@ type Mapping = z.infer; type CorrelationItem = z.infer; type ComparisonStatus = z.infer; -const EXPECTED = { +type ComparisonIdentity = readonly [string | readonly string[], string, string]; + +const EXPECTED: Readonly> = { compare_artifacts: [ "rea.artifact-comparison/v1", "rea-artifact-comparison", @@ -164,7 +166,7 @@ const EXPECTED = { "rea-process", "REA deterministic process harness", ], -} as const; +}; /** Correlate only caller-declared static/runtime hypotheses. */ export const correlateStaticAndRuntime = ( @@ -307,11 +309,12 @@ const selectStatic = ( const matches = result.dimensions.filter( ({ dimension }) => dimension === selector.dimension, ); - if (matches.length !== 1) + const match = matches.at(0); + if (matches.length !== 1 || match === undefined) throw new TypeError("Function selector must resolve exactly once"); return { - status: matches[0]!.status, - conclusion_kind: matches[0]!.conclusion_kind, + status: match.status, + conclusion_kind: match.conclusion_kind, }; } if (evidence.operation !== "compare_artifacts") @@ -332,11 +335,12 @@ const selectStatic = ( const matches = result.changes.items.filter( ({ logical_path: path }) => path === selector.logical_path, ); - if (matches.length !== 1) + const match = matches.at(0); + if (matches.length !== 1 || match === undefined) throw new TypeError( "Artifact selector must resolve exactly one reported delta", ); - const status = matches[0]!.classification; + const status = match.classification; return { status, conclusion_kind: @@ -402,7 +406,7 @@ const parseRuntime = (input: unknown): Evidence => { }; const assertComparisonIdentity = (evidence: Evidence): void => { - const expected = EXPECTED[evidence.operation as keyof typeof EXPECTED]; + const expected = EXPECTED[evidence.operation]; if ( expected === undefined || !(Array.isArray(expected[0]) diff --git a/src/domain/webBundleAnalysis.ts b/src/domain/webBundleAnalysis.ts index 3c88bbf85..58bd068a1 100644 --- a/src/domain/webBundleAnalysis.ts +++ b/src/domain/webBundleAnalysis.ts @@ -1,6 +1,6 @@ import { z } from "zod"; -import { inspectWebPageInputSchema } from "./browserObservation.js"; +import { inspectWebPageWithSourceInputSchema } from "./browserObservation.js"; import { webTextArtifactSchema } from "./webContentArtifact.js"; const webBundleLimitsSchema = z.object({ @@ -24,12 +24,8 @@ const webBundleLimitsSchema = z.object({ }); /** Capture-and-analyze input with separate source and source-map approvals. */ -export const analyzeWebBundleInputSchema = inspectWebPageInputSchema - .safeExtend({ - include_script_sources: z.literal(true).default(true), - source_capture_approved: z.literal(true), - fetch_source_maps: z.boolean().default(false), - source_map_fetch_approved: z.boolean().default(false), +const analyzeWebBundleFactsSchema = + inspectWebPageWithSourceInputSchema.safeExtend({ analysis_limits: webBundleLimitsSchema.default({ max_findings: 1_000, max_ast_nodes: 250_000, @@ -39,14 +35,19 @@ export const analyzeWebBundleInputSchema = inspectWebPageInputSchema max_source_map_mappings: 10_000, max_original_sources: 2_000, }), - }) + }); +export const analyzeWebBundleInputSchema = z + .union([ + analyzeWebBundleFactsSchema.safeExtend({ + fetch_source_maps: z.literal(false).default(false), + source_map_fetch_approved: z.literal(false).default(false), + }), + analyzeWebBundleFactsSchema.safeExtend({ + fetch_source_maps: z.literal(true), + source_map_fetch_approved: z.literal(true), + }), + ]) .superRefine((input, context) => { - if (input.fetch_source_maps && !input.source_map_fetch_approved) - context.addIssue({ - code: "custom", - path: ["source_map_fetch_approved"], - message: "Source-map network fetch requires separate approval", - }); if ( input.analysis_limits.max_source_map_bytes > input.analysis_limits.max_total_source_map_bytes diff --git a/src/domain/webCaptureDiff.ts b/src/domain/webCaptureDiff.ts index ca267d88c..81b92cec8 100644 --- a/src/domain/webCaptureDiff.ts +++ b/src/domain/webCaptureDiff.ts @@ -405,22 +405,25 @@ const accessibilityProjection = ( includeText: boolean, includeNodes: boolean, ): unknown => { - const result = { - total_nodes: accessibility.total_nodes, - } as { total_nodes: number; nodes?: readonly unknown[] }; - if (!includeNodes) return result; + if (!includeNodes) return { total_nodes: accessibility.total_nodes }; const nodeIndexes = new Map( accessibility.nodes.map((node, index) => [node.node_id, index]), ); - result.nodes = accessibility.nodes.map((node) => ({ - parent_index: - node.parent_id === null ? null : (nodeIndexes.get(node.parent_id) ?? -1), - role: node.role, - ignored: node.ignored, - states: node.states, - ...(includeText ? { name: node.name, description: node.description } : {}), - })); - return result; + return { + total_nodes: accessibility.total_nodes, + nodes: accessibility.nodes.map((node) => ({ + parent_index: + node.parent_id === null + ? null + : (nodeIndexes.get(node.parent_id) ?? -1), + role: node.role, + ignored: node.ignored, + states: node.states, + ...(includeText + ? { name: node.name, description: node.description } + : {}), + })), + }; }; const storageKeysComparable = (inspection: WebPageInspection): boolean => diff --git a/src/dotnet/ManagedNativeBoundaryInspector.ts b/src/dotnet/ManagedNativeBoundaryInspector.ts index 915d9eca3..180ab9a40 100644 --- a/src/dotnet/ManagedNativeBoundaryInspector.ts +++ b/src/dotnet/ManagedNativeBoundaryInspector.ts @@ -110,12 +110,12 @@ const emptyInspection = ( const readBoundaryInventory = ( bytes: Buffer, pe: ManagedPeLayout, + cli: NonNullable, limits: ManagedNativeBoundaryInspectionLimits, ): { readonly layout: ManagedMetadataLayout; readonly inventory: Inventory; } => { - const cli = pe.cli!; const metadataOffset = pe.rvaToOffset( cli.metadata.rva, cli.metadata.size, @@ -189,7 +189,7 @@ export const inspectManagedNativeBoundariesBytes = ( let layout: ManagedMetadataLayout; let inventory: Inventory; try { - ({ layout, inventory } = readBoundaryInventory(bytes, pe, limits)); + ({ layout, inventory } = readBoundaryInventory(bytes, pe, pe.cli, limits)); } catch (cause: unknown) { if (!(cause instanceof ManagedReaderFailure)) throw cause; return emptyInspection(target, bytes, "malformed", [cause.issue]); diff --git a/src/generatedMcpToolCatalog.ts b/src/generatedMcpToolCatalog.ts index 7d334579b..d4dc98f9e 100644 --- a/src/generatedMcpToolCatalog.ts +++ b/src/generatedMcpToolCatalog.ts @@ -30,7 +30,7 @@ interface GeneratedPayload { } const GENERATED_PAYLOAD_JSON = - '{"auxiliaryProviders":[{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"inventory_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"inspect_artifact","outputContractVersion":1,"pagination":"none","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":true,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"extract_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null}],"identity":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"}},{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_macho","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_signature","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_plist","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"list_architectures","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":30000},"operation":"demangle_swift","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null}],"identity":{"id":"native-macos","name":"macOS native inspection utilities","version":null}},{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability inventories PE/CLI identity only; inspect_managed_members admits bounded metadata members, signatures, and CIL anchors.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability decodes bounded PE/CLI metadata members, signatures, and file-backed method bodies; decompiled C# and cross-build matching are separate future contracts.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_members","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability inventories managed declarations for native boundaries only; native exports, thunks, and addresses require separate native-provider evidence.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_native_boundaries","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null}],"identity":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"}}],"catalog":[{"analysisOperation":"address_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve the primary analyzed name at a code or data address. Headless providers require an explicit address; GUI providers may default to their current cursor. Null means the provider has no primary name at that address.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"address_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Primary structured result returned by this operation."}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Address Name"},{"analysisOperation":"comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read the regular analysis comment at an address, defaulting to the current cursor. This is read-only and returns null when no comment exists; use set_comment to persist a finding.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Primary structured result returned by this operation."}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Comment"},{"analysisOperation":"current_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return Hopper\'s current cursor address for the selected document. Use only for interactive navigation state; prefer explicit addresses in reproducible investigations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Address"},{"analysisOperation":"current_procedure","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the analyzed procedure containing Hopper\'s current cursor. Use procedure_info or analyze_function next; this depends on GUI cursor state and is not an exhaustive lookup.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_procedure","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Procedure"},{"analysisOperation":"current_document","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the document currently selected by REA\'s Hopper bridge. Use list_documents before switching when several documents are open.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_document","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Document"},{"analysisOperation":"goto_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Move Hopper\'s GUI cursor to a hexadecimal address and return the resolved address. This changes navigation state but not analysis data; use explicit-address tools for headless workflows.","effects":{"accessesNetwork":false,"changesUiState":true,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"goto_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Goto Address"},{"analysisOperation":"inline_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read the inline instruction comment at an address, defaulting to the current cursor. Returns null when absent; use set_inline_comment to write one.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"inline_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Primary structured result returned by this operation."}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inline Comment"},{"analysisOperation":"list_bookmarks","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every bookmark in the selected Hopper document as address and name pairs. Use bookmarks as analyst-authored navigation aids; this does not discover code references.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_bookmarks","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Bookmarks"},{"analysisOperation":"list_documents","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List provider program or document identities. Hopper may expose several documents; a Ghidra headless session contains exactly its one imported Program.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_documents","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Documents"},{"analysisOperation":"list_names","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through analyzed memory and external symbols as address/value pairs. Provider metadata distinguishes Ghidra primary, dynamic, external, type, and source facts when available; follow next_offset before claiming exhaustive coverage.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_names","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Names"},{"analysisOperation":"list_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through analyzed procedures as address/value pairs after provider analysis. Ghidra metadata distinguishes thunks and external functions; follow next_offset for exhaustive coverage and use returned addresses in later function operations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0}],"properties":{"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_procedures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Procedures"},{"analysisOperation":"list_segments","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List segments or memory blocks using exclusive end addresses. Ghidra reports block permissions, address space, image base, initialization, and overlay facts; Hopper marks unavailable permissions explicitly.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_segments","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","items":{"additionalProperties":false,"properties":{"address_space":{"type":"string"},"end":{"type":"string"},"executable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"image_base":{"type":"string"},"initialized":{"type":"boolean"},"name":{"type":"string"},"overlay":{"type":"boolean"},"permissions":{"anyOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"source":{"const":"ghidra-memory-block","type":"string"}},"required":["available","source"],"type":"object"}]},"provenance":{"enum":["hopper-public-python-api","ghidra-memory-block"],"type":"string"},"readable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"sections":{"items":{"additionalProperties":false,"properties":{"address_space":{"type":"string"},"end":{"type":"string"},"executable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"image_base":{"type":"string"},"initialized":{"type":"boolean"},"name":{"type":"string"},"overlay":{"type":"boolean"},"permissions":{"anyOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"source":{"const":"ghidra-memory-block","type":"string"}},"required":["available","source"],"type":"object"}]},"provenance":{"enum":["hopper-public-python-api","ghidra-memory-block"],"type":"string"},"readable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"start":{"type":"string"},"writable":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","start","end","readable","writable","executable","permissions","provenance"],"type":"object"},"type":"array"},"start":{"type":"string"},"writable":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","start","end","readable","writable","executable","permissions","provenance","sections"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Segments"},{"analysisOperation":"list_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through provider-defined strings, or filter to one address, as address/value pairs. Ghidra reports charset, missing-terminator status, byte length, and explicit value truncation; follow next_offset for exhaustive results.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_strings","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Strings"},{"analysisOperation":"next_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the next analyzed object address after an explicit address or current cursor. This is a navigation primitive, not instruction-flow or CFG analysis.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"next_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Next Address"},{"analysisOperation":"prev_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the previous analyzed instruction start before an explicit address or current cursor. This is a navigation primitive and may fail at document boundaries.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"prev_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Prev Address"},{"analysisOperation":"procedure_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an unambiguous procedure symbol name or provider-normalized address to its canonical entry address. External address spaces remain explicit; use the result before xrefs, assembly, or decompilation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Address"},{"analysisOperation":"procedure_assembly","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return assembly for one analyzed procedure identified by symbol or hexadecimal address. Use when pseudocode loses calling-convention or instruction-level detail; output is currently returned as one unpaginated string.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_assembly","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Assembly"},{"analysisOperation":"procedure_callees","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the provider\'s resolved direct callees for one procedure identified by symbol or address. Unresolved indirect calls may be absent; use analyze_function and typed references to preserve available edge uncertainty.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callees","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Callees"},{"analysisOperation":"procedure_callers","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the provider\'s resolved direct callers for one procedure identified by symbol or address. Results reflect completed static analysis and may omit unresolved indirect references.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callers","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Callers"},{"analysisOperation":"procedure_info","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return bounded metadata for one procedure identified by symbol or address: entrypoint, signature, locals, size, and block count. Follow with decompilation or assembly for behavior.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_info","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"basicblock_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"entrypoint":{"type":"string"},"length":{"minimum":0,"type":"number"},"locals":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"provenance":{"minLength":1,"type":"string"}},"required":["description","provenance"],"type":"object"},"type":"array"},"name":{"type":"string"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","entrypoint","basicblock_count","length","signature","locals","classification"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Info"},{"analysisOperation":"read_function_instructions","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read one offset-paginated window of raw instructions for an analyzed procedure without decompilation, caller discovery, or whole-program string/name scans. Use this fast path for instruction-level orientation; follow next_offset when truncated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":64,"offset":0,"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"limit":{"default":64,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":100000,"minimum":0,"type":"integer"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"read_function_instructions","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"instruction_scan_truncated":{"type":"boolean"},"instructions":{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"instructions_scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"}},"required":["procedure","instructions","instructions_scanned","instruction_scan_truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Read Function Instructions"},{"analysisOperation":"read_bytes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read at most 4,096 analyzed bytes from one provider-normalized virtual address. The hexadecimal payload reports the exact returned length; incomplete reads remain explicit and unsupported provider APIs return typed capability unavailability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000","length":16}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"length":{"default":256,"description":"Value for length.","maximum":4096,"minimum":1,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"read_bytes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"address":{"type":"string"},"bytes_hex":{"pattern":"^(?:[a-f0-9]{2})*$","type":"string"},"complete":{"type":"boolean"},"requested_bytes":{"maximum":4096,"minimum":1,"type":"integer"},"returned_bytes":{"maximum":4096,"minimum":0,"type":"integer"}},"required":["address","requested_bytes","returned_bytes","bytes_hex","complete"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Read Bytes"},{"analysisOperation":"address_to_file_offset","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Map one provider-normalized virtual address to its original nonnegative file offset. Unmapped addresses fail explicitly, and providers without an authoritative mapping API return typed capability unavailability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"address_to_file_offset","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"address":{"type":"string"},"file_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["address","file_offset"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Address To File Offset"},{"analysisOperation":"procedure_references","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return a bounded set of raw incoming or outgoing reference edges for one procedure. Endpoint procedures are resolved only from provider containment; Ghidra preserves observed reference kinds while providers without kind authority mark them unavailable.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"direction":"outgoing","limit":100,"max_instructions":500,"offset":0,"procedure":"main"}],"properties":{"direction":{"default":"outgoing","description":"Direction in which to traverse or compare relationships.","enum":["incoming","outgoing"],"type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_references","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"direction":{"enum":["incoming","outgoing"],"type":"string"},"instruction_scan_truncated":{"type":"boolean"},"instructions_scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"references":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}},"required":["procedure","direction","references","instructions_scanned","instruction_scan_truncated"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure References"},{"analysisOperation":"procedure_pseudo_code","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decompile one analyzed procedure by symbol name or provider-normalized address. Returns provider-specific pseudocode, never original source or cross-provider text equivalence, and may return null; request procedure_assembly when instruction precision matters.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_pseudo_code","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Primary structured result returned by this operation."}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Pseudo Code"},{"analysisOperation":"resolve_containing_procedure","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an arbitrary address, including an interior instruction or exact external entry, to its provider-analyzed containing procedure. A negative result distinguishes outside segments from not in a procedure and is never guessed from nearby symbols.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"resolve_containing_procedure","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Resolve Containing Procedure"},{"analysisOperation":"search_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search analyzed procedure names using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic and offset-paginated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"case_sensitive":false,"limit":100,"mode":"literal","offset":0,"pattern":"main"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"pattern":{"description":"The literal text or bounded regex pattern to search for","maxLength":256,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_procedures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value","value_truncated"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Search Procedures"},{"analysisOperation":"search_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search analyzed strings using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic, offset-paginated, and explicitly truncated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"case_sensitive":false,"limit":100,"mode":"literal","offset":0,"pattern":"authorization failed"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"pattern":{"description":"The literal text or bounded regex pattern to search for","maxLength":256,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_strings","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value","value_truncated"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Search Strings"},{"analysisOperation":"set_address_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Assign an analyst name to one hexadecimal address and report Hopper\'s boolean result. This mutates analysis metadata; read it back with address_name before relying on it.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000","name":"entry"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"name":{"description":"Exact name used by this operation.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","name"],"type":"object"},"kind":"official-proxy","name":"set_address_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Address Name"},{"analysisOperation":"set_addresses_names","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Assign analyst names to an address/name map and return per-address success booleans. This mutates analysis metadata; use for bounded batches and verify failures individually.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"names":{"0x1000":"entry"}}],"properties":{"document":{"description":"The document name","type":"string"},"names":{"additionalProperties":{"type":"string"},"description":"Value for names.","propertyNames":{"type":"string"},"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["names"],"type":"object"},"kind":"official-proxy","name":"set_addresses_names","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":{"type":"boolean"},"description":"Primary structured result returned by this operation.","propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Addresses Names"},{"analysisOperation":"set_bookmark","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Create or replace a bookmark at a hexadecimal address. This mutates navigation metadata; verify with list_bookmarks and do not treat bookmarks as binary evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"name":{"description":"Exact name used by this operation.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"set_bookmark","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Bookmark"},{"analysisOperation":"set_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Write a regular analysis comment at a hexadecimal address and return whether readback matched. This mutates the Hopper document; use comments to record evidence IDs or reasoning.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000","comment":"validated entry point"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"comment":{"description":"Exact analyst comment text to write.","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Comment"},{"analysisOperation":"set_current_document","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Select an already-open Hopper document by exact document name. This changes subsequent default-document routing; call list_documents first and prefer explicit document inputs where reproducibility matters.","effects":{"accessesNetwork":false,"changesUiState":true,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"document":"fixture"}],"properties":{"document":{"description":"Exact provider document or program identity.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["document"],"type":"object"},"kind":"official-proxy","name":"set_current_document","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Current Document"},{"analysisOperation":"set_inline_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Write an inline instruction comment at a hexadecimal address and return whether readback matched. This mutates analysis metadata; confirm with inline_comment.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000","comment":"calls parser"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"comment":{"description":"Exact analyst comment text to write.","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_inline_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Inline Comment"},{"analysisOperation":"unset_bookmark","annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Remove the bookmark at a hexadecimal address and return whether it is absent. This mutates navigation metadata and does not alter binary bytes.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"unset_bookmark","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Unset Bookmark"},{"analysisOperation":"xrefs","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return analyzed references to a code or data address, defaulting to the current cursor. Use to connect strings, globals, selectors, and functions; bare addresses are untyped and indirect references may be incomplete.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"xrefs","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Xrefs"},{"analysisOperation":"swift_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover legacy-mangled Swift class procedures after exhaustively paging analyzed procedures. Returns at most 100 entries and scans at most 5,000 symbols; use analyze_swift_types for other Swift kinds.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pattern":""}],"properties":{"pattern":{"default":"","description":"Text or bounded pattern used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"swift_classes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"classes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"},"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["count","classes"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Swift Classes"},{"analysisOperation":"get_objc_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate Objective-C class labels after exhaustively paging names, optionally filtering by literal substring. Returns at most 100 classes; inspect matching metadata and references next.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pattern":""}],"properties":{"pattern":{"default":"","description":"Text or bounded pattern used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"get_objc_classes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"classes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"},"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["count","classes"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Objc Classes"},{"analysisOperation":"get_objc_protocols","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate Objective-C and Swift protocol labels after exhaustively paging names. Returns at most 100 entries; use xrefs or analyze_function to connect a protocol to implementations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"enhanced","name":"get_objc_protocols","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"protocols":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["count","protocols"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Objc Protocols"},{"analysisOperation":"batch_decompile","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decompile up to 20 explicit procedure symbols or addresses concurrently. Returns ordered per-item ok/error variants and aggregate counts; use analyze_function for a richer single-function dossier.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"addresses":[]}],"properties":{"addresses":{"default":[],"description":"Ordered provider-normalized procedure addresses to analyze.","items":{"description":"A provider-normalized procedure address","type":"string"},"maxItems":20,"type":"array"}},"type":"object"},"kind":"enhanced","name":"batch_decompile","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"failed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"pseudocode":{"minLength":1,"type":"string"},"status":{"const":"ok","type":"string"}},"required":["address","status","pseudocode"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]},"status":{"const":"error","type":"string"}},"required":["address","status","error"],"type":"object"}]},"type":"array"},"succeeded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","total","succeeded","failed"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Batch Decompile"},{"analysisOperation":"get_call_graph","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Traverse the bound provider\'s caller or callee relationships from one symbol or address for at most five levels. Every node has an ok/error status and failures use safe typed projections; unresolved indirect calls may be missing and results are not a whole-program CFG.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000","depth":2,"direction":"forward"}],"properties":{"address":{"description":"A provider-normalized procedure address","type":"string"},"depth":{"default":2,"description":"Value for depth.","maximum":5,"minimum":1,"type":"integer"},"direction":{"default":"forward","description":"Direction in which to traverse or compare relationships.","enum":["forward","backward"],"type":"string"}},"required":["address"],"type":"object"},"kind":"enhanced","name":"get_call_graph","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"calls":{"items":{"type":"string"},"type":"array"},"status":{"const":"ok","type":"string"}},"required":["address","status","calls"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]},"status":{"const":"error","type":"string"}},"required":["address","status","error"],"type":"object"}]},"type":"array"},"description":"Primary structured result returned by this operation.","propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Call Graph"},{"analysisOperation":"analyze_swift_types","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Categorize exhaustively paged procedure names into Swift classes, structs, enums, protocols, extensions, and other symbols. Scans at most 5,000 names and returns at most 50 entries per category.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"enhanced","name":"analyze_swift_types","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"categories":{"additionalProperties":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["count","items"],"type":"object"},"propertyNames":{"type":"string"},"type":"object"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","categories"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Swift Types"},{"analysisOperation":"find_xrefs_to_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an exact name through the bound provider\'s exhaustively paged name inventory and return a resolved or unresolved result. Unresolved names use the stable name_not_found reason; this compact xref workflow returns address-only projections.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"name":"malloc"}],"properties":{"name":{"description":"Exact name used by this operation.","type":"string"}},"required":["name"],"type":"object"},"kind":"enhanced","name":"find_xrefs_to_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"description":"Primary structured result returned by this operation.","oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"},"status":{"const":"resolved","type":"string"},"xrefs":{"items":{"type":"string"},"type":"array"}},"required":["status","name","address","xrefs"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"reason":{"const":"name_not_found","type":"string"},"status":{"const":"unresolved","type":"string"}},"required":["status","name","reason"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Find Xrefs To Name"},{"analysisOperation":"binary_overview","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Use immediately after opening a target to summarize document, exhaustive procedure/string counts, and a bounded segment sample. detail controls segment fields and limit controls only the returned segment sample.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"detail":"concise","limit":10}],"properties":{"detail":{"default":"concise","description":"Requested response detail level.","enum":["concise","detailed"],"type":"string"},"limit":{"default":10,"description":"Maximum number of results to return in this page.","maximum":50,"minimum":1,"type":"integer"}},"type":"object"},"kind":"enhanced","name":"binary_overview","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"detail":{"enum":["concise","detailed"],"type":"string"},"document":{"type":"string"},"procedure_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"segment_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"segments":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"length":{"minimum":0,"type":"number"},"name":{"type":"string"},"start":{"type":"string"}},"required":["name","start","end"],"type":"object"},"type":"array"},"string_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["document","detail","segments","segment_count","procedure_count","string_count"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Binary Overview"},{"analysisOperation":"analyze_function","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Preferred bounded analysis for one procedure symbol or address. Returns identity, provider-specific pseudocode, optional assembly, comments, calls, typed-or-explicitly-unavailable references, referenced strings/names, and local CFG blocks with exact truncation metadata. Providers with a structured decompiler model also expose native API boundary types, confidence, evidence, jump-table data/target addresses, and explicit decompiler-artifact labels.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"assembly_offset":0,"collection_offset":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"include_assembly":false,"limit":100,"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main","pseudocode_offset":0}],"properties":{"assembly_offset":{"default":0,"description":"Zero-based index of the first assembly to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"collection_offset":{"additionalProperties":false,"default":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"description":"Zero-based index of the first collection to return.","properties":{"basic_blocks":{"default":0,"description":"Value for basic blocks.","maximum":9007199254740991,"minimum":0,"type":"integer"},"callees":{"default":0,"description":"Value for callees.","maximum":9007199254740991,"minimum":0,"type":"integer"},"callers":{"default":0,"description":"Value for callers.","maximum":9007199254740991,"minimum":0,"type":"integer"},"comments":{"default":0,"description":"Value for comments.","maximum":9007199254740991,"minimum":0,"type":"integer"},"incoming_references":{"default":0,"description":"Value for incoming references.","maximum":9007199254740991,"minimum":0,"type":"integer"},"outgoing_references":{"default":0,"description":"Value for outgoing references.","maximum":9007199254740991,"minimum":0,"type":"integer"},"referenced_names":{"default":0,"description":"Value for referenced names.","maximum":9007199254740991,"minimum":0,"type":"integer"},"referenced_strings":{"default":0,"description":"Value for referenced strings.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"include_assembly":{"default":false,"description":"Whether to include assembly in the result.","type":"boolean"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_pseudocode_chars":{"default":20000,"description":"Maximum permitted pseudocode chars for this operation.","maximum":100000,"minimum":1,"type":"integer"},"procedure":{"description":"A procedure name or address","type":"string"},"pseudocode_offset":{"default":0,"description":"Zero-based index of the first pseudocode to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"analyze_function","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"assembly":{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"basic_blocks":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"start":{"type":"string"},"successors":{"items":{"type":"string"},"type":"array"}},"required":["start","end","successors"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"callees":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"callers":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"comments":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"kind":{"enum":["comment","inline"],"type":"string"},"text":{"type":"string"}},"required":["address","kind","text"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"incoming_references":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"instruction_scan":{"additionalProperties":false,"properties":{"scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["scanned","truncated"],"type":"object"},"limitations":{"default":[],"items":{"type":"string"},"type":"array"},"native_api":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"minLength":1,"type":"string"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["available","reason","residual_unknowns"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"calling_convention":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-and-stack-variables","compiler-generated-control-flow","pointer-arithmetic","pseudocode"],"type":"string"},"type":"array"},"jump_tables":{"items":{"additionalProperties":false,"properties":{"data_sources":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"confidence":{"enum":["low","medium","high"],"type":"string"},"entry_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"entry_size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"provenance":{"enum":["ghidra-decompiler-load-table","ghidra-dispatch-block-data-reference"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"data_sources_truncated":{"type":"boolean"},"dispatch_address":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mappings":{"items":{"additionalProperties":false,"properties":{"case_value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"confidence":{"enum":["low","medium","high"],"type":"string"},"data_addresses":{"items":{"minLength":1,"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"target_address":{"minLength":1,"type":"string"}},"required":["case_value","target_address","data_addresses","confidence","evidence"],"type":"object"},"type":"array"},"mappings_truncated":{"type":"boolean"}},"required":["dispatch_address","data_sources","data_sources_truncated","mappings","mappings_truncated","limitations"],"type":"object"},"type":"array"},"jump_tables_truncated":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"parameters":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"role":{"enum":["return","parameter"],"type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["role","ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts"],"type":"object"},"type":"array"},"parameters_truncated":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"pseudocode":{"additionalProperties":false,"properties":{"classification":{"const":"decompiler-generated-non-source","type":"string"},"compilable":{"const":false,"type":"boolean"}},"required":["classification","compilable"],"type":"object"},"return_type":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"role":{"enum":["return","parameter"],"type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["role","ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts"],"type":"object"},"signature_source":{"minLength":1,"type":"string"}},"required":["available","provenance","signature_source","calling_convention","return_type","parameters","parameters_truncated","jump_tables","jump_tables_truncated","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},"outgoing_references":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"locals":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"provenance":{"minLength":1,"type":"string"}},"required":["description","provenance"],"type":"object"},"type":"array"},"name":{"type":"string"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","classification","signature","locals"],"type":"object"},"pseudocode":{"additionalProperties":false,"properties":{"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"total_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["text","total_chars","returned_chars","truncated","next_offset"],"type":"object"},"referenced_names":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},"referenced_strings":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}},"required":["procedure","pseudocode","assembly","comments","callers","callees","incoming_references","outgoing_references","referenced_strings","referenced_names","basic_blocks","instruction_scan","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Function"},{"analysisOperation":"inspect_native_api","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Reconstruct one native function boundary through inspectable substeps. Returns structured inferred return/parameter types with confidence and evidence, jump-table dispatch/data/target mappings, explicit decompiler-artifact labels, unsupported branches, and residual unknowns.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main"}],"properties":{"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_pseudocode_chars":{"default":20000,"description":"Maximum permitted pseudocode chars for this operation.","maximum":100000,"minimum":1,"type":"integer"},"procedure":{"description":"A procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record unsupported native API branches durably","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"inspect_native_api","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"boundary":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"minLength":1,"type":"string"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["available","reason","residual_unknowns"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"calling_convention":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-and-stack-variables","compiler-generated-control-flow","pointer-arithmetic","pseudocode"],"type":"string"},"type":"array"},"jump_tables":{"items":{"additionalProperties":false,"properties":{"data_sources":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"confidence":{"enum":["low","medium","high"],"type":"string"},"entry_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"entry_size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"provenance":{"enum":["ghidra-decompiler-load-table","ghidra-dispatch-block-data-reference"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"data_sources_truncated":{"type":"boolean"},"dispatch_address":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mappings":{"items":{"additionalProperties":false,"properties":{"case_value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"confidence":{"enum":["low","medium","high"],"type":"string"},"data_addresses":{"items":{"minLength":1,"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"target_address":{"minLength":1,"type":"string"}},"required":["case_value","target_address","data_addresses","confidence","evidence"],"type":"object"},"type":"array"},"mappings_truncated":{"type":"boolean"}},"required":["dispatch_address","data_sources","data_sources_truncated","mappings","mappings_truncated","limitations"],"type":"object"},"type":"array"},"jump_tables_truncated":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"parameters":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"role":{"enum":["return","parameter"],"type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["role","ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts"],"type":"object"},"type":"array"},"parameters_truncated":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"pseudocode":{"additionalProperties":false,"properties":{"classification":{"const":"decompiler-generated-non-source","type":"string"},"compilable":{"const":false,"type":"boolean"}},"required":["classification","compilable"],"type":"object"},"return_type":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"role":{"enum":["return","parameter"],"type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["role","ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts"],"type":"object"},"signature_source":{"minLength":1,"type":"string"}},"required":["available","provenance","signature_source","calling_convention","return_type","parameters","parameters_truncated","jump_tables","jump_tables_truncated","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},"procedure":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["address","name"],"type":"object"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"substeps":{"items":{"additionalProperties":false,"properties":{"observations":{"items":{"minLength":1,"type":"string"},"type":"array"},"operation":{"enum":["analyze_function","project_native_api_boundary","preserve_residual_unknowns"],"type":"string"},"status":{"enum":["completed","unsupported"],"type":"string"}},"required":["operation","status","observations"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"unsupported_branches":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["schema_version","procedure","boundary","substeps","unsupported_branches","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Native Api"},{"analysisOperation":"trace_feature","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a bounded literal feature query through matching strings and procedures, xrefs, and truthful containing-procedure resolution. Returns the operation budget, truncation, and residual unknowns; unknown_registry_approved: true records them durably without inferring reference kinds.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"case_sensitive":false,"limit":20,"max_operations":20,"query":"license"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"limit":{"default":20,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_operations":{"default":20,"description":"Maximum permitted operations for this operation.","maximum":100,"minimum":1,"type":"integer"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"trace_feature","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"matches":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"type":{"enum":["string","procedure"],"type":"string"},"value":{"type":"string"}},"required":["type","address","value"],"type":"object"},"type":"array"},"operation_budget":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query":{"type":"string"},"references":{"items":{"additionalProperties":false,"properties":{"containing_procedure":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["target_address","source_address","containing_procedure"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"search_mode":{"const":"literal","type":"string"},"truncated":{"type":"boolean"}},"required":["query","search_mode","operations_used","operation_budget","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Feature"},{"analysisOperation":"find_code_for_string","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve one literal string query to bounded analyzed string entries, xrefs, and truthful containing-procedure candidates. Returns an Evidence ID, exact operation budget, truncation, and residual unknowns; it never infers reference kinds or runtime reachability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"case_sensitive":false,"limit":20,"max_operations":20,"query":"license"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"limit":{"default":20,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_operations":{"default":20,"description":"Maximum permitted operations for this operation.","maximum":100,"minimum":1,"type":"integer"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"find_code_for_string","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"matches":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"type":{"enum":["string","procedure"],"type":"string"},"value":{"type":"string"}},"required":["type","address","value"],"type":"object"},"type":"array"},"operation_budget":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query":{"type":"string"},"references":{"items":{"additionalProperties":false,"properties":{"containing_procedure":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["target_address","source_address","containing_procedure"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"search_mode":{"const":"literal","type":"string"},"truncated":{"type":"boolean"}},"required":["query","search_mode","operations_used","operation_budget","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Find Code For String"},{"analysisOperation":"trace_call_path","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a deterministic bounded caller or callee path from one exact procedure address, optionally stopping at a goal. Returns visited nodes, direct-call edges, one shortest traversal path, failures, frontier, consumed limits, an Evidence ID, and explicit residual unknowns without claiming unresolved indirect calls are absent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"direction":"forward","goal":"0x1100","max_depth":5,"max_nodes":100,"max_operations":100,"start":"0x1000"}],"properties":{"direction":{"default":"forward","description":"Direction in which to traverse or compare relationships.","enum":["forward","backward"],"type":"string"},"goal":{"description":"An optional provider-normalized destination address","type":"string"},"max_depth":{"default":5,"description":"Maximum permitted depth for this operation.","maximum":10,"minimum":1,"type":"integer"},"max_nodes":{"default":100,"description":"Maximum permitted nodes for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_operations":{"default":100,"description":"Maximum permitted operations for this operation.","maximum":500,"minimum":1,"type":"integer"},"start":{"description":"A provider-normalized procedure address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["start"],"type":"object"},"kind":"enhanced","name":"trace_call_path","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"direction":{"enum":["forward","backward"],"type":"string"},"edges":{"items":{"additionalProperties":false,"properties":{"discovery_depth":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["source_address","target_address","discovery_depth"],"type":"object"},"type":"array"},"failures":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]}},"required":["address","error"],"type":"object"},"type":"array"},"frontier":{"items":{"type":"string"},"type":"array"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}]},"goal_status":{"enum":["not_requested","reached","not_reached"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_depth":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_nodes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_operations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"nodes_visited":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["max_depth","max_nodes","max_operations","nodes_visited","operations_used"],"type":"object"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"depth":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["address","depth"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"start":{"type":"string"},"traversal_path":{"items":{"type":"string"},"type":"array"},"truncated":{"type":"boolean"}},"required":["start","goal","direction","goal_status","nodes","edges","traversal_path","failures","frontier","limits","truncated","residual_unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Call Path"},{"analysisOperation":"inspect_macho","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect Mach-O slices, load commands, imports, exports, dependencies, build metadata, segments, sections, permissions, and exact command provenance without launching Hopper.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"inspect_macho","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"architectures":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"cpu_subtype":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"name":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","cpu_type","cpu_subtype","file_offset","size","alignment"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"build_metadata":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"minimum_os":{"anyOf":[{"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"type":"string"},{"type":"null"}]},"sdk":{"anyOf":[{"type":"string"},{"type":"null"}]},"tools":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},"type":"array"}},"required":["platform","minimum_os","sdk","tools"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"dependencies":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"compatibility_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string"},"path":{"type":"string"}},"required":["path","kind","current_version","compatibility_version"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"endian":{"anyOf":[{"enum":["little","big"],"type":"string"},{"type":"null"}]},"entrypoints":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"file_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["file_offset"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"exports":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"reexport":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"weak":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","address","weak","reexport","source"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"file_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"items":{"type":"string"},"type":"array"},"format":{"const":"mach-o","type":"string"},"imports":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"reexport":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"weak":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","address","weak","reexport","source"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"load_commands":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"propertyNames":{"type":"string"},"type":"object"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"type":"string"}},"required":["index","kind","file_offset","fields"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"segments":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"file_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"initial_permissions":{"additionalProperties":false,"properties":{"execute":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"raw":{"anyOf":[{"type":"string"},{"type":"null"}]},"read":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read","write","execute","raw"],"type":"object"},"maximum_permissions":{"additionalProperties":false,"properties":{"execute":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"raw":{"anyOf":[{"type":"string"},{"type":"null"}]},"read":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read","write","execute","raw"],"type":"object"},"name":{"type":"string"},"sections":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flags":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"segment":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["segment","name","address","size","file_offset","alignment","flags"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"vm_address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"vm_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","vm_address","vm_size","file_offset","file_size","maximum_permissions","initial_permissions","sections"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"uuid":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_size":{"anyOf":[{"anyOf":[{"const":32,"type":"number"},{"const":64,"type":"number"}]},{"type":"null"}]}},"required":["format","endian","word_size","file_type","flags","uuid","entrypoints","architectures","build_metadata","load_commands","dependencies","imports","exports","segments","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Macho"},{"analysisOperation":"inspect_signature","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect the active artifact\'s code-signing identity, hashes, authorities, requirements, entitlements, hardened-runtime state, and bounded command provenance.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"inspect_signature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"authorities":{"items":{"type":"string"},"type":"array"},"cdhashes":{"items":{"type":"string"},"type":"array"},"designated_requirement":{"anyOf":[{"type":"string"},{"type":"null"}]},"entitlements":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"hardened_runtime":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"hash_algorithms":{"items":{"type":"string"},"type":"array"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"signed":{"type":"boolean"},"team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["signed","identifier","team_identifier","format","cdhashes","hash_algorithms","authorities","designated_requirement","entitlements","timestamp","hardened_runtime","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Signature"},{"analysisOperation":"inspect_plist","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Parse a plist at a bounded relative path beneath the active artifact container. Symlink and traversal escapes are rejected; output is normalized JSON rather than plutil text.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"relative_path":"Contents/Info.plist"}],"properties":{"relative_path":{"default":"Contents/Info.plist","description":"Local filesystem path for relative.","maxLength":1024,"minLength":1,"type":"string"}},"type":"object"},"kind":"native-provider","name":"inspect_plist","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"bundle":{"additionalProperties":false,"properties":{"executable":{"anyOf":[{"type":"string"},{"type":"null"}]},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"short_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["identifier","executable","name","version","short_version"],"type":"object"},"format":{"enum":["xml","binary","json","unknown"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"source_path":{"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["format","value","bundle","source_path","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Plist"},{"analysisOperation":"list_architectures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List thin or universal Mach-O slices with offsets, sizes, alignment, explicit coverage, and bounded native-tool provenance.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"list_architectures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"architectures":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"cpu_subtype":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"name":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","cpu_type","cpu_subtype","file_offset","size","alignment"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"}},"required":["architectures","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Architectures"},{"analysisOperation":"demangle_swift","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Demangle an ordered bounded batch of Swift symbols without requiring Hopper. Each input returns demangled, unchanged, or invalid status.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"symbols":["$s4Test3fooyyF"]}],"properties":{"symbols":{"description":"Ordered bounded Swift symbols to demangle.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":500,"minItems":1,"type":"array"}},"required":["symbols"],"type":"object"},"kind":"native-provider","name":"demangle_swift","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"symbols":{"items":{"additionalProperties":false,"properties":{"input":{"type":"string"},"output":{"type":"string"},"status":{"enum":["demangled","unchanged","invalid"],"type":"string"}},"required":["input","output","status"],"type":"object"},"type":"array"}},"required":["symbols","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Demangle Swift"},{"analysisOperation":"inventory_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"After open_binary binds a local archive, application package, or other artifact—or when one is already active—inventory it as a deterministic, content-addressed artifact graph. This tool accepts no path; in a target-free session open the target first. Returns bounded node and edge pages without extracting or mounting by default.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"edge_limit":{"default":100,"description":"Maximum number of edge entries to return.","maximum":500,"minimum":1,"type":"integer"},"edge_offset":{"default":0,"description":"Zero-based index of the first edge to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"integrity_continue_approved":{"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"default":"fail","description":"Value for integrity policy.","enum":["fail","record-and-continue"],"type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"},"node_limit":{"default":100,"description":"Maximum number of node entries to return.","maximum":500,"minimum":1,"type":"integer"},"node_offset":{"default":0,"description":"Zero-based index of the first node to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"occurrence_limit":{"default":100,"description":"Maximum number of occurrence entries to return.","maximum":500,"minimum":1,"type":"integer"},"occurrence_offset":{"default":0,"description":"Zero-based index of the first occurrence to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"artifact-provider","name":"inventory_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"edges":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"child_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"edge_id":{"pattern":"^edge_[a-f0-9]{64}$","type":"string"},"logical_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"producer":{"anyOf":[{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},{"type":"null"}]},"relation":{"enum":["contains","extracts","slice-of","embeds","loads","maps-source","derived-from"],"type":"string"}},"required":["edge_id","ordinal","parent_artifact_id","child_artifact_id","relation","occurrence_id","logical_path","producer"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"integrity_contradictions":{"default":[],"items":{"additionalProperties":false,"properties":{"contradiction_id":{"pattern":"^ic_[a-f0-9]{64}$","type":"string"},"declared_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"entry_kind":{"enum":["file","slice"],"type":"string"},"limitations":{"items":{"type":"string"},"minItems":1,"type":"array"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"observed_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"parent_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"provenance":{"const":"container-integrity-metadata-versus-observed-bytes","type":"string"},"trust":{"const":"observed-untrusted","type":"string"},"unpacked":{"type":"boolean"}},"required":["contradiction_id","occurrence_id","parent_artifact_id","logical_path","declared_sha256","observed_sha256","entry_kind","unpacked","trust","provenance","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_compression_ratio":{"maximum":100000,"minimum":1,"type":"number"},"max_depth":{"maximum":100,"minimum":0,"type":"integer"},"max_entries":{"maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["max_entries","max_total_bytes","max_entry_bytes","max_compression_ratio","max_depth","max_path_bytes"],"type":"object"},"manifest":{"additionalProperties":false,"properties":{"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","manifest_id","root_artifact_id","root_sha256","root_format","graph_sha256","node_count","occurrence_count","edge_count"],"type":"object"},"nodes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"content_state":{"enum":["materialized","embedded","virtual"],"type":"string"},"executable":{"type":"boolean"},"format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"kind":{"enum":["container","executable","dynamic-library","framework","native-addon","javascript","source-map","plist","entitlements","resource","universal-slice","package-metadata","unknown"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"media_type":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["artifact_id","kind","format","sha256","size","media_type","architecture","executable","content_state","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"occurrences":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"compressed_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"declared_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"encrypted":{"type":"boolean"},"entry_kind":{"enum":["file","directory","symlink","slice"],"type":"string"},"executable":{"type":"boolean"},"hash_status":{"enum":["verified","mismatched","not-hashed-limit","unavailable"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"parent_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"source_location":{"anyOf":[{"additionalProperties":false,"properties":{"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offset","length"],"type":"object"},{"type":"null"}]}},"required":["occurrence_id","artifact_id","parent_occurrence_id","logical_path","entry_kind","declared_size","compressed_size","executable","encrypted","hash_status","source_location","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"provenance":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},"maxItems":256,"type":"array"}},"required":["manifest","nodes","occurrences","edges","limits","provenance","integrity_contradictions","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inventory Artifact"},{"analysisOperation":"inspect_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"After open_binary binds a local archive, application package, or other artifact—or when one is already active—inspect it through one bounded, cancellable inventory substep. This tool accepts no path; in a target-free session open the target first. Returns the full substep Evidence and its ID, observations, derived relationships, hypotheses, contradictions, unexplored branches, limitations, and format-specific next probes. Any substep failure fails the whole call.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"integrity_continue_approved":{"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"default":"fail","description":"Value for integrity policy.","enum":["fail","record-and-continue"],"type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_hypotheses":{"default":20,"description":"Maximum permitted hypotheses for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_next_probes":{"default":20,"description":"Maximum permitted next probes for this operation.","maximum":50,"minimum":1,"type":"integer"},"max_observations":{"default":100,"description":"Maximum permitted observations for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_relationships":{"default":100,"description":"Maximum permitted relationships for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_substeps":{"const":1,"default":1,"description":"Maximum permitted substeps for this operation.","type":"number"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_unexplored_branches":{"default":20,"description":"Maximum permitted unexplored branches for this operation.","maximum":100,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"type":"object"},"kind":"artifact-provider","name":"inspect_artifact","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"contradictions":{"items":{"additionalProperties":false,"properties":{"contradiction_id":{"pattern":"^aic_[a-f0-9]{64}$","type":"string"},"declared_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"observed_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"statement":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["contradiction_id","statement","occurrence_id","declared_sha256","observed_sha256","evidence_id"],"type":"object"},"maxItems":100,"type":"array"},"coverage":{"additionalProperties":false,"properties":{"hypotheses_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hypotheses_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_probes_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_probes_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observations_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observations_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relationships_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relationships_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-substeps","partial","truncated"],"type":"string"},"substeps_completed":{"const":1,"type":"number"},"unexplored_branches_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unexplored_branches_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","substeps_completed","observations_retained","observations_omitted","relationships_retained","relationships_omitted","hypotheses_retained","hypotheses_omitted","unexplored_branches_retained","unexplored_branches_omitted","next_probes_retained","next_probes_omitted"],"type":"object"},"derived_relationships":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"logical_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"relation":{"enum":["contains","extracts","slice-of","embeds","loads","maps-source","derived-from"],"type":"string"},"relationship_id":{"pattern":"^air_[a-f0-9]{64}$","type":"string"},"source_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"target_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"}},"required":["relationship_id","relation","source_artifact_id","target_artifact_id","occurrence_id","logical_path","evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"hypotheses":{"items":{"additionalProperties":false,"properties":{"basis_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":8,"minItems":1,"type":"array"},"confidence":{"enum":["medium","low"],"type":"string"},"hypothesis_id":{"pattern":"^aih_[a-f0-9]{64}$","type":"string"},"limitation":{"maxLength":4096,"minLength":1,"type":"string"},"statement":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["hypothesis_id","statement","confidence","basis_evidence_ids","limitation"],"type":"object"},"maxItems":100,"type":"array"},"inspection_id":{"pattern":"^ai_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"next_probes":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"maxLength":128,"minLength":1,"type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},"maxItems":50,"type":"array"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["root-manifest","artifact","occurrence","integrity"],"type":"string"},"observation_id":{"pattern":"^aio_[a-f0-9]{64}$","type":"string"},"subject":{"maxLength":4096,"minLength":1,"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["observation_id","kind","subject","value","evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"schema_version":{"const":1,"type":"number"},"subject":{"additionalProperties":false,"properties":{"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"maxLength":128,"minLength":1,"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["manifest_id","root_artifact_id","root_sha256","root_format"],"type":"object"},"substeps":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"const":"inventory_artifact","type":"string"},"status":{"const":"completed","type":"string"},"substep_id":{"pattern":"^ais_[a-f0-9]{64}$","type":"string"}},"required":["substep_id","operation","status","evidence_id","evidence"],"type":"object"},"maxItems":1,"minItems":1,"type":"array"},"unexplored_branches":{"items":{"additionalProperties":false,"properties":{"branch_id":{"pattern":"^aib_[a-f0-9]{64}$","type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"next_probe":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"maxLength":128,"minLength":1,"type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},{"type":"null"}]},"reason":{"enum":["page-limit","format-specific-analysis-required","unknown-format"],"type":"string"}},"required":["branch_id","reason","detail","next_probe","evidence_id"],"type":"object"},"maxItems":100,"type":"array"}},"required":["schema_version","inspection_id","subject","substeps","observations","derived_relationships","hypotheses","contradictions","unexplored_branches","next_probes","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Artifact"},{"analysisOperation":"extract_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Extract selected graph artifacts beneath an explicit output root. Requires approval, rejects traversal and symlink escapes, never overwrites, enforces bomb limits, and verifies cleanup.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"occurrence_ids":["occ_0000000000000000000000000000000000000000000000000000000000000000"],"output_root":"/tmp/rea-extracted"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_ids":{"description":"Value for occurrence ids.","items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"maxItems":500,"minItems":1,"type":"array"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"output_root":{"description":"Approved canonical filesystem output root.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","output_root","occurrence_ids"],"type":"object"},"kind":"artifact-provider","name":"extract_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"artifacts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"bytes_written":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"created":{"type":"boolean"},"relative_path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["artifact_id","relative_path","sha256","bytes_written","created"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"cleanup":{"additionalProperties":false,"properties":{"attempted":{"type":"boolean"},"residual_paths":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":500,"type":"array"},"verified":{"type":"boolean"}},"required":["attempted","verified","residual_paths"],"type":"object"},"containment_verified":{"type":"boolean"},"extraction_manifest":{"additionalProperties":false,"properties":{"extraction_id":{"pattern":"^aex_[a-f0-9]{64}$","type":"string"},"files_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_root_alias":{"const":"$OUTPUT_ROOT","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_occurrence_ids":{"items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"maxItems":500,"minItems":1,"type":"array"},"source_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","extraction_id","source_manifest_id","selected_occurrence_ids","files_sha256","output_root_alias"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_compression_ratio":{"maximum":100000,"minimum":1,"type":"number"},"max_depth":{"maximum":100,"minimum":0,"type":"integer"},"max_entries":{"maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["max_entries","max_total_bytes","max_entry_bytes","max_compression_ratio","max_depth","max_path_bytes"],"type":"object"},"manifest":{"additionalProperties":false,"properties":{"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","manifest_id","root_artifact_id","root_sha256","root_format","graph_sha256","node_count","occurrence_count","edge_count"],"type":"object"},"output_root":{"minLength":1,"type":"string"},"provenance":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},"maxItems":256,"type":"array"}},"required":["manifest","extraction_manifest","output_root","artifacts","containment_verified","cleanup","limits","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Extract Artifact"},{"analysisOperation":"inspect_managed_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Open and classify an explicit managed PE/CLI path, or inspect the active managed target, then inventory exact assembly/module identity, target framework evidence, references, resources, and custom attributes without loading or executing target code. Returns bounded pages and explicit partial or malformed coverage.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"path":"/tmp/Example.dll"}],"properties":{"attribute_limit":{"default":100,"description":"Maximum number of attribute entries to return.","maximum":500,"minimum":1,"type":"integer"},"attribute_offset":{"default":0,"description":"Zero-based index of the first attribute to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"path":{"description":"Managed PE/CLI path to open before inspection; omit only when a managed target is already active","minLength":1,"type":"string"},"reference_limit":{"default":100,"description":"Maximum number of reference entries to return.","maximum":500,"minimum":1,"type":"integer"},"reference_offset":{"default":0,"description":"Zero-based index of the first reference to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"resource_limit":{"default":100,"description":"Maximum number of resource entries to return.","maximum":500,"minimum":1,"type":"integer"},"resource_offset":{"default":0,"description":"Zero-based index of the first resource to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"assembly":{"anyOf":[{"additionalProperties":false,"properties":{"culture":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"hash_algorithm":{"maximum":4294967295,"minimum":0,"type":"integer"},"name":{"type":"string"},"public_key":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["none","public-key","public-key-token"],"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"token":{"anyOf":[{"pattern":"^[a-f0-9]{16}$","type":"string"},{"type":"null"}]}},"required":["kind","byte_length","sha256","token"],"type":"object"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"version":{"pattern":"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$","type":"string"}},"required":["name","version","culture","flags","hash_algorithm","public_key","token","row_offset"],"type":"object"},{"type":"null"}]},"attributes":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"constructor_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"decoded_fixed_string":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"type_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["parent_token","constructor_token","type_name","value_length","value_sha256","decoded_fixed_string","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"classification":{"additionalProperties":false,"properties":{"container":{"const":"pe","type":"string"},"evidence":{"items":{"additionalProperties":false,"properties":{"code":{"minLength":1,"type":"string"},"detail":{"minLength":1,"type":"string"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["code","detail","file_offset"],"type":"object"},"type":"array"},"implementation":{"enum":["cil","cil-and-ready-to-run","cpp-cli-mixed","metadata-only","not-managed","unknown"],"type":"string"},"managed_architecture":{"enum":["anycpu","anycpu-prefer-32","x86","x86_64","arm","arm64","unknown"],"type":"string"},"runtime_family":{"enum":["dotnet-framework","modern-dotnet","unity-mono","mixed-clr-native","unknown"],"type":"string"},"status":{"enum":["managed","not-managed","malformed"],"type":"string"}},"required":["status","container","runtime_family","implementation","managed_architecture","evidence"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"stream_names":{"items":{"type":"string"},"type":"array"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","stream_names","table_row_counts"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"pe":{"additionalProperties":false,"properties":{"architecture":{"enum":["x86","x86_64","arm","arm64"],"type":"string"},"characteristics":{"maximum":65535,"minimum":0,"type":"integer"},"cli":{"anyOf":[{"additionalProperties":false,"properties":{"entry_point":{"additionalProperties":false,"properties":{"kind":{"enum":["metadata-token","native-rva","none"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","value"],"type":"object"},"flag_names":{"items":{"type":"string"},"type":"array"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"header_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"header_size":{"maximum":9007199254740991,"minimum":72,"type":"integer"},"managed_native_header_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"managed_native_header_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"metadata_rva":{"maximum":4294967295,"minimum":1,"type":"integer"},"metadata_size":{"maximum":4294967295,"minimum":1,"type":"integer"},"ready_to_run_signature":{"type":"boolean"},"resources_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"resources_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"runtime_version":{"type":"string"},"strong_name_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"strong_name_size":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["header_offset","header_size","runtime_version","flags","flag_names","entry_point","metadata_rva","metadata_size","resources_rva","resources_size","strong_name_rva","strong_name_size","managed_native_header_rva","managed_native_header_size","ready_to_run_signature"],"type":"object"},{"type":"null"}]},"machine":{"maximum":65535,"minimum":0,"type":"integer"},"machine_hex":{"pattern":"^0x[0-9a-f]{4}$","type":"string"},"optional_header":{"enum":["pe32","pe32-plus"],"type":"string"},"section_count":{"maximum":96,"minimum":1,"type":"integer"}},"required":["machine","machine_hex","architecture","optional_header","section_count","characteristics","cli"],"type":"object"},"references":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"culture":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"hash_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hash_value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"public_key_or_token":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["none","public-key","public-key-token"],"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"token":{"anyOf":[{"pattern":"^[a-f0-9]{16}$","type":"string"},{"type":"null"}]}},"required":["kind","byte_length","sha256","token"],"type":"object"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"version":{"pattern":"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$","type":"string"}},"required":["name","version","culture","flags","public_key_or_token","hash_value_sha256","hash_value_length","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"resources":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"data_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"data_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"declared_offset":{"maximum":4294967295,"minimum":0,"type":"integer"},"embedded":{"type":"boolean"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"implementation_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"visibility":{"enum":["public","private","unknown"],"type":"string"}},"required":["name","flags","visibility","implementation_token","embedded","declared_offset","data_length","data_sha256","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"schema_version":{"const":1,"type":"number"},"target_frameworks":{"items":{"type":"string"},"type":"array"}},"required":["schema_version","artifact","pe","classification","metadata","module","assembly","target_frameworks","references","resources","attributes","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Artifact"},{"analysisOperation":"inspect_managed_members","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect bounded PE/CLI metadata members, signatures, raw CIL hashes, limited member-result-v1 decoded-instruction-tuple hashes, separately reported exception regions, call edges, and field-access anchors without loading or executing target code. Metadata tokens are reported as build-local coordinates bound to the artifact SHA-256 and MVID; the v1 tuple hash does not resolve them or fully commit control flow.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"edge_limit":100,"method_limit":25}],"properties":{"edge_limit":{"default":250,"description":"Maximum number of edge entries to return.","maximum":1000,"minimum":1,"type":"integer"},"edge_offset":{"default":0,"description":"Zero-based index of the first edge to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"field_limit":{"default":100,"description":"Maximum number of field entries to return.","maximum":500,"minimum":1,"type":"integer"},"field_offset":{"default":0,"description":"Zero-based index of the first field to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"instruction_anchor_limit":{"default":100,"description":"Maximum number of instruction anchor entries to return.","maximum":500,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_method_body_bytes":{"default":1048576,"description":"Maximum permitted method body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_method_instructions":{"default":10000,"description":"Maximum permitted method instructions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"member_ref_limit":{"default":100,"description":"Maximum number of member ref entries to return.","maximum":500,"minimum":1,"type":"integer"},"member_ref_offset":{"default":0,"description":"Zero-based index of the first member ref to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"method_limit":{"default":100,"description":"Maximum number of method entries to return.","maximum":500,"minimum":1,"type":"integer"},"method_offset":{"default":0,"description":"Zero-based index of the first method to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"type_limit":{"default":100,"description":"Maximum number of type entries to return.","maximum":500,"minimum":1,"type":"integer"},"type_offset":{"default":0,"description":"Zero-based index of the first type to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_members","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"call_edges":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"caller":{"anyOf":[{"type":"string"},{"type":"null"}]},"caller_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"opcode":{"type":"string"},"target_kind":{"enum":["method-def","member-ref","method-spec","unknown"],"type":"string"},"target_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"target_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["caller_token","caller","opcode","target_token","target_kind","target_name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"field_accesses":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"field_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"method_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"opcode":{"type":"string"}},"required":["method_token","method","opcode","field_token","field_name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"fields":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"declaring_type_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","declaring_type_token","declaring_type","name","flags","signature"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"identity_scope":{"additionalProperties":false,"properties":{"requires_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"requires_mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"token_identity":{"const":"build-local","type":"string"}},"required":["token_identity","requires_artifact_sha256","requires_mvid"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"member_refs":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"parent_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","parent_token","name","signature"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","table_row_counts"],"type":"object"},"methods":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"body":{"additionalProperties":false,"properties":{"anchors":{"items":{"additionalProperties":false,"properties":{"il_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"opcode":{"minLength":1,"type":"string"},"operand":{"anyOf":[{"type":"string"},{"type":"null"}]},"operand_kind":{"enum":["none","branch","constant","field","method","signature","string","switch","token","type","variable","unknown"],"type":"string"}},"required":["il_offset","opcode","operand_kind","operand"],"type":"object"},"type":"array"},"decoded_instruction_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exception_regions":{"items":{"additionalProperties":false,"properties":{"class_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"filter_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"handler_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"handler_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"try_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"try_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["flags","try_offset","try_length","handler_offset","handler_length","class_token","filter_offset"],"type":"object"},"type":"array"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"header_format":{"enum":["tiny","fat","none","unknown"],"type":"string"},"il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"SHA-256 of exactly the raw il_size CIL bytes; excludes the method header, locals signature, alignment, and extra sections"},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"init_locals":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"instruction_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"local_var_sig_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"max_stack":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Member-result-v1 SHA-256 of UTF-8 JSON [opcode, operand_kind, operand] tuples for a complete decode; retains build-local tokens, omits switch targets, and excludes headers, locals, and exception regions"},"opcode_counts":{"additionalProperties":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"status":{"enum":["present","partial","absent","malformed","too-large"],"type":"string"},"truncated_instructions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","header_format","rva","file_offset","max_stack","init_locals","local_var_sig_token","il_size","il_sha256","normalized_il_sha256","instruction_count","decoded_instruction_count","truncated_instructions","opcode_counts","anchors","exception_regions","issue"],"type":"object"},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"declaring_type_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"impl_flags":{"maximum":65535,"minimum":0,"type":"integer"},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","declaring_type_token","declaring_type","name","rva","impl_flags","flags","signature","body"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"types":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"extends_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"field_list":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_row":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"last_row":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["first_row","last_row","count"],"type":"object"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"full_name":{"type":"string"},"method_list":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_row":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"last_row":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["first_row","last_row","count"],"type":"object"},"name":{"type":"string"},"namespace":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","namespace","name","full_name","flags","extends_token","field_list","method_list"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"}},"required":["schema_version","artifact","module","metadata","identity_scope","types","fields","methods","member_refs","call_edges","field_accesses","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Members"},{"analysisOperation":"inspect_managed_native_boundaries","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect PE/CLI ModuleRef, ImplMap/PInvoke declarations, CLI native-header indicators, and non-IL method implementation flags without loading or executing target code. Results are managed declarations and degraded native-boundary observations, not verified native exports or addresses.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"implementation_limit":50,"import_limit":50}],"properties":{"implementation_limit":{"default":100,"description":"Maximum number of implementation entries to return.","maximum":500,"minimum":1,"type":"integer"},"implementation_offset":{"default":0,"description":"Zero-based index of the first implementation to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"import_limit":{"default":100,"description":"Maximum number of import entries to return.","maximum":500,"minimum":1,"type":"integer"},"import_offset":{"default":0,"description":"Zero-based index of the first import to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"module_ref_limit":{"default":100,"description":"Maximum number of module ref entries to return.","maximum":500,"minimum":1,"type":"integer"},"module_ref_offset":{"default":0,"description":"Zero-based index of the first module ref to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_native_boundaries","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"cli_native":{"additionalProperties":false,"properties":{"il_only":{"type":"boolean"},"managed_native_header_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"managed_native_header_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"native_entry_point":{"type":"boolean"},"ready_to_run_signature":{"type":"boolean"},"requires_32bit":{"type":"boolean"},"strong_name_signed":{"type":"boolean"}},"required":["il_only","requires_32bit","strong_name_signed","native_entry_point","ready_to_run_signature","managed_native_header_rva","managed_native_header_size"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"identity_scope":{"additionalProperties":false,"properties":{"requires_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"requires_mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"token_identity":{"const":"build-local","type":"string"}},"required":["token_identity","requires_artifact_sha256","requires_mvid"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","table_row_counts"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"module_refs":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"native_implementations":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"body_interpretation":{"enum":["managed-cil","native-or-runtime","not-file-backed","unknown"],"type":"string"},"boundary_kind":{"enum":["pinvoke","native-body","runtime-provided","unmanaged-method","mixed-or-unknown"],"type":"string"},"code_type":{"enum":["il","native","optil","runtime","unknown"],"type":"string"},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"impl_flags":{"maximum":65535,"minimum":0,"type":"integer"},"managed_kind":{"enum":["managed","unmanaged","unknown"],"type":"string"},"name":{"type":"string"},"pinvoke_declared":{"type":"boolean"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","name","rva","flags","impl_flags","code_type","managed_kind","pinvoke_declared","boundary_kind","body_interpretation"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"pinvoke_imports":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"best_fit":{"enum":["assembly-default","enabled","disabled","unknown"],"type":"string"},"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"import_name":{"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"import_scope_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"mapping_flags":{"maximum":65535,"minimum":0,"type":"integer"},"mapping_flags_hex":{"pattern":"^0x[0-9a-f]{4}$","type":"string"},"member_kind":{"enum":["method","field","unknown"],"type":"string"},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"supports_last_error":{"type":"boolean"},"throw_on_unmappable_char":{"enum":["assembly-default","enabled","disabled","unknown"],"type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"verification":{"const":"managed-declaration-only","type":"string"}},"required":["token","row_offset","mapping_flags","mapping_flags_hex","member_token","member_kind","member_name","import_name","import_scope_token","import_scope_name","no_mangle","char_set","call_convention","supports_last_error","best_fit","throw_on_unmappable_char","verification"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"mixed_mode_or_native_header":{"type":"boolean"},"module_ref_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_implementation_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_import_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ready_to_run":{"type":"boolean"}},"required":["module_ref_count","pinvoke_import_count","native_implementation_count","ready_to_run","mixed_mode_or_native_header"],"type":"object"}},"required":["schema_version","artifact","module","metadata","identity_scope","cli_native","module_refs","pinvoke_imports","native_implementations","summary","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Native Boundaries"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two authenticated inspect_managed_members Evidence records using unique-only decoded-CIL-v1/signature and structural method-shape tiers. Names are reported as observations but are not used as a matching basis; metadata tokens remain build-local coordinates bound to each artifact SHA-256 and MVID, and the v1 tuple digest does not itself remap them.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_id":"ev_45a77d52db5dc9beaf59a9b8ee062c945fda709bd0d3a91fa4e972d85a848324","limits":{"max_candidates":25,"max_field_matches":50,"max_method_matches":100},"right_evidence_id":"ev_8d6450759b2bb695b3b41b0db8d7ddc4a3e9f64a52b93194bc59d2b564c2285c"}],"properties":{"left_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidates":50,"max_field_matches":5000,"max_method_matches":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidates":{"default":50,"description":"Maximum permitted candidates for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_field_matches":{"default":5000,"description":"Maximum permitted field matches for this operation.","maximum":50000,"minimum":0,"type":"integer"},"max_method_matches":{"default":10000,"description":"Maximum permitted method matches for this operation.","maximum":50000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"application","name":"compare_managed_members","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"algorithm":{"additionalProperties":false,"properties":{"name":{"const":"rea-managed-member-comparison","type":"string"},"name_matching":{"const":"not-used","type":"string"},"token_identity":{"const":"build-local","type":"string"},"version":{"const":1,"type":"number"}},"required":["name","version","token_identity","name_matching"],"type":"object"},"comparison_id":{"pattern":"^mmc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_status":{"enum":["complete","partial","unavailable"],"type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_status":{"enum":["complete","partial","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","left_status","right_status","omitted_methods","omitted_fields","omitted_candidates"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"fields":{"items":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_field_[a-f0-9]{64}$","type":"string"},"left":{"anyOf":[{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature","none"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"type":"array"},"confidence":{"enum":["exact","high","unknown"],"type":"string"},"status":{"enum":["matched","unmatched","ambiguous"],"type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"anyOf":[{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256"],"type":"object"},{"type":"null"}]},"status":{"enum":["unchanged","changed","added","removed","unknown"],"type":"string"}},"required":["item_id","status","left","right","match","evidence_links","limitations"],"type":"object"},"maxItems":50000,"type":"array"},"left":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"fields_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"methods_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","mvid","module_name","metadata_status","methods_total","fields_total"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"matching":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_il_signature":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"field_signature":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural_method_shape":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["exact_il_signature","structural_method_shape","field_signature","ambiguous","unmatched"],"type":"object"},"methods":{"items":{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"anyOf":[{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature","none"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"type":"array"},"confidence":{"enum":["exact","high","unknown"],"type":"string"},"status":{"enum":["matched","unmatched","ambiguous"],"type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"anyOf":[{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256"],"type":"object"},{"type":"null"}]},"status":{"enum":["unchanged","changed","added","removed","unknown"],"type":"string"}},"required":["item_id","status","left","right","match","dimensions","evidence_links","limitations"],"type":"object"},"maxItems":50000,"type":"array"},"right":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"fields_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"methods_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","mvid","module_name","metadata_status","methods_total","fields_total"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","changed","added","removed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","algorithm","left","right","summary","matching","methods","fields","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Managed Members"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Verify managed P/Invoke/native-boundary declarations against authenticated native export or function Evidence without executing managed code or translating managed metadata tokens into native addresses. The workflow preserves declaration-only, verified, inferred, contradicted, and unresolved states.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limits":{"max_candidates_per_import":25,"max_native_observations":20},"managed_boundaries_evidence_id":"ev_5e142d4464b916bcff63fb0835c686152b5b0473a9f1d5f5060d329b1b29739d","native_observation_evidence_ids":["ev_74758ad108882d5752dae4f8fa030c1ed6c7dd62857cb9d2d3a7ce931b52ee7c"]}],"properties":{"limits":{"additionalProperties":false,"default":{"max_candidates_per_import":25,"max_native_observations":20},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidates_per_import":{"default":25,"description":"Maximum permitted candidates per import for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_native_observations":{"default":20,"description":"Maximum permitted native observations for this operation.","maximum":50,"minimum":1,"type":"integer"}},"type":"object"},"managed_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"native_observation_evidence_ids":{"description":"Unique session-owned native observation Evidence IDs","items":{"description":"Session-owned inspect_macho or analyze_function Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":50,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["managed_boundaries_evidence_id","native_observation_evidence_ids"],"type":"object"},"kind":"application","name":"verify_managed_native_boundaries","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"algorithm":{"additionalProperties":false,"properties":{"name":{"const":"rea-managed-native-verification","type":"string"},"token_identity":{"const":"build-local","type":"string"},"token_to_address_mapping":{"const":"not-inferred","type":"string"},"version":{"const":1,"type":"number"}},"required":["name","version","token_identity","token_to_address_mapping"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_native_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","omitted_native_observations","omitted_candidates"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":51,"minItems":2,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"managed_boundary":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"coverage_state":{"enum":["complete","partial","unavailable"],"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"native_implementations_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_imports_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["evidence_id","artifact_sha256","artifact_path","mvid","metadata_status","pinvoke_imports_total","native_implementations_total","coverage_state"],"type":"object"},"native_implementations":{"additionalProperties":false,"properties":{"reason":{"maxLength":4096,"minLength":1,"type":"string"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unresolved","reason"],"type":"object"},"native_observations":{"additionalProperties":false,"properties":{"accepted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symbols":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"truncated":{"type":"boolean"},"unsupported":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","accepted","unsupported","symbols","truncated"],"type":"object"},"pinvoke_imports":{"items":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-export-name","exact-function-name","decorated-name-candidate","module-mismatch","no-native-candidate","unsupported-native-evidence"],"type":"string"},"candidates":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"module_path":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"source":{"enum":["macho-export","function-dossier"],"type":"string"}},"required":["evidence_id","operation","name","address","module_name","module_path","source"],"type":"object"},"maxItems":100,"type":"array"},"confidence":{"enum":["observed","inferred","unknown"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":51,"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"managed":{"additionalProperties":false,"properties":{"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"declaration_verification":{"const":"managed-declaration-only","type":"string"},"import_name":{"minLength":1,"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","member_token","member_name","import_name","import_scope_name","no_mangle","char_set","call_convention","declaration_verification"],"type":"object"},"matched_native":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"module_path":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"source":{"enum":["macho-export","function-dossier"],"type":"string"}},"required":["evidence_id","operation","name","address","module_name","module_path","source"],"type":"object"},{"type":"null"}]},"status":{"enum":["verified","inferred","unresolved","contradicted"],"type":"string"}},"required":["item_id","managed","status","basis","confidence","matched_native","candidates","evidence_links","limitations"],"type":"object"},"maxItems":50000,"type":"array"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"contradicted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inferred":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_body_unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["verified","inferred","unresolved","contradicted","native_body_unresolved"],"type":"object"},"verification_id":{"pattern":"^mnv_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","verification_id","algorithm","managed_boundary","native_observations","summary","pinvoke_imports","native_implementations","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Verify Managed Native Boundaries"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Import decompiler-produced managed reconstruction against authenticated inspect_managed_members Evidence. The workflow locks each method to artifact SHA-256, MVID, metadata token, signature hash, and the limited member-result-v1 decoded-IL tuple hash, records the decompiler identity and options, and marks C# or pseudocode as analyst inference rather than canonical byte observation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"decompiler":{"executable_sha256":null,"family":"ilspy","name":"ilspycmd","options":["--disable-updatecheck","--type","Example.Program"],"version":"9.1.0.7988"},"methods":[{"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","reconstruction":{"end_line":1,"kind":"decompiled-csharp","language":"csharp","source_path":"/examples/Example.Program.cs","start_line":1,"text":"internal static void Main() { }"},"signature_sha256":"3333333333333333333333333333333333333333333333333333333333333333","token":"0x06000001"}],"notes":["Synthetic example only; decompiler output is imported as inference."],"static_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"properties":{"decompiler":{"additionalProperties":false,"description":"Value for decompiler.","properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of executable."},"family":{"description":"Value for family.","enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":512,"minLength":1,"type":"string"},"options":{"default":[],"description":"Value for options.","items":{"maxLength":512,"type":"string"},"maxItems":50,"type":"array"},"version":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["name","version","family","executable_sha256"],"type":"object"},"methods":{"description":"Value for methods.","items":{"additionalProperties":false,"properties":{"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of normalized il."},"reconstruction":{"additionalProperties":false,"description":"Value for reconstruction.","properties":{"end_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Value for end line."},"kind":{"description":"Value for kind.","enum":["decompiled-csharp","decompiled-il","semantic-pseudocode"],"type":"string"},"language":{"description":"Value for language.","enum":["csharp","il","pseudocode"],"type":"string"},"source_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Local filesystem path for source."},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Value for start line."},"text":{"description":"Value for text.","maxLength":65536,"minLength":1,"type":"string"},"text_sha256":{"description":"Exact SHA-256 digest of text.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["kind","language","text"],"type":"object"},"signature_sha256":{"description":"Exact SHA-256 digest of signature.","pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"description":"Value for token.","pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","signature_sha256","normalized_il_sha256","reconstruction"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"notes":{"default":[],"description":"Value for notes.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"static_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["decompiler","methods","static_members_evidence_id"],"type":"object"},"kind":"application","name":"import_managed_reconstruction","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"decompiler":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"family":{"enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"maxLength":512,"minLength":1,"type":"string"},"options":{"default":[],"items":{"maxLength":512,"type":"string"},"maxItems":50,"type":"array"},"options_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["name","version","family","executable_sha256","options","options_sha256"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"executed":{"const":false,"type":"boolean"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"methods":{"items":{"additionalProperties":false,"properties":{"body_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reconstruction":{"additionalProperties":false,"properties":{"end_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"kind":{"enum":["decompiled-csharp","decompiled-il","semantic-pseudocode"],"type":"string"},"language":{"enum":["csharp","il","pseudocode"],"type":"string"},"line_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"text":{"maxLength":65536,"minLength":1,"type":"string"},"text_length":{"maximum":65536,"minimum":1,"type":"integer"},"text_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["kind","language","text","text_sha256","text_length","line_count","source_path","start_line","end_line"],"type":"object"},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"validation":{"additionalProperties":false,"properties":{"canonical_observation":{"const":false,"type":"boolean"},"confidence_floor":{"const":"inference","type":"string"},"exact_build_required":{"const":true,"type":"boolean"},"matched_static_member":{"const":true,"type":"boolean"}},"required":["matched_static_member","exact_build_required","canonical_observation","confidence_floor"],"type":"object"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256","body_sha256","il_size","reconstruction","validation"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"notes":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"phase":{"const":"reconstruction-import","type":"string"},"reconstruction_id":{"pattern":"^mre_[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"static_observation":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","artifact_path","byte_length","module_name","mvid","metadata_status"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"decompiled_csharp_methods":{"maximum":50,"minimum":0,"type":"integer"},"decompiled_il_methods":{"maximum":50,"minimum":0,"type":"integer"},"imported_methods":{"maximum":50,"minimum":1,"type":"integer"},"pseudocode_methods":{"maximum":50,"minimum":0,"type":"integer"},"total_text_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["imported_methods","decompiled_csharp_methods","decompiled_il_methods","pseudocode_methods","total_text_bytes"],"type":"object"}},"required":["schema_version","reconstruction_id","phase","executed","static_observation","decompiler","summary","methods","notes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Import Managed Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Prepare a separately authorized managed runtime-correlation admission plan from authenticated inspect_managed_members Evidence. The operation is default-disabled, requires the managed_runtime permission ceiling and grant, locks the exact artifact SHA-256, MVID, method signature, and limited member-result-v1 decoded-IL tuple hash, distinguishes attach/load/debugger/reflection/instrumentation effects, and records that no target code was executed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"bounds":{"allow_network":false,"allow_ui":false,"max_output_bytes":65536,"max_threads":32,"timeout_ms":5000},"host":{"architecture":"x86_64","clr_family":"dotnet","os":"linux"},"method":{"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","signature_sha256":"3333333333333333333333333333333333333333333333333333333333333333","token":"0x06000001"},"requested_effect":"attach","static_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"properties":{"bounds":{"additionalProperties":false,"default":{"allow_network":false,"allow_ui":false,"max_output_bytes":65536,"max_threads":32,"timeout_ms":5000},"description":"Value for bounds.","properties":{"allow_network":{"const":false,"default":false,"description":"Value for allow network.","type":"boolean"},"allow_ui":{"const":false,"default":false,"description":"Value for allow ui.","type":"boolean"},"max_output_bytes":{"default":65536,"description":"Maximum permitted output bytes for this operation.","maximum":1048576,"minimum":0,"type":"integer"},"max_threads":{"default":32,"description":"Maximum permitted threads for this operation.","maximum":256,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"type":"object"},"host":{"additionalProperties":false,"description":"Value for host.","properties":{"architecture":{"description":"Value for architecture.","enum":["x86","x86_64","arm","arm64"],"type":"string"},"clr_family":{"description":"Value for clr family.","enum":["dotnet","dotnet-framework","mono","unknown"],"type":"string"},"os":{"description":"Value for os.","enum":["linux","macos","windows"],"type":"string"}},"required":["os","clr_family","architecture"],"type":"object"},"method":{"additionalProperties":false,"description":"Value for method.","properties":{"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of normalized il."},"signature_sha256":{"description":"Exact SHA-256 digest of signature.","pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"description":"Value for token.","pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","signature_sha256","normalized_il_sha256"],"type":"object"},"requested_effect":{"description":"Value for requested effect.","enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"static_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["method","requested_effect","host","static_members_evidence_id"],"type":"object"},"kind":"application","name":"plan_managed_runtime_correlation","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"authority_model":{"additionalProperties":false,"properties":{"capability":{"const":"managed_runtime","type":"string"},"default_enabled":{"const":false,"type":"boolean"},"per_call_approval_required":{"const":true,"type":"boolean"},"permission_grant_id":{"minLength":1,"type":"string"}},"required":["capability","permission_grant_id","default_enabled","per_call_approval_required"],"type":"object"},"bounds":{"additionalProperties":false,"properties":{"allow_network":{"const":false,"default":false,"type":"boolean"},"allow_ui":{"const":false,"default":false,"type":"boolean"},"max_output_bytes":{"default":65536,"maximum":1048576,"minimum":0,"type":"integer"},"max_threads":{"default":32,"maximum":256,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"maximum":60000,"minimum":1,"type":"integer"}},"required":["timeout_ms","max_threads","max_output_bytes","allow_network","allow_ui"],"type":"object"},"correlation_id":{"pattern":"^mrc_[a-f0-9]{64}$","type":"string"},"effect_taxonomy":{"additionalProperties":false,"properties":{"attaches_process":{"type":"boolean"},"instruments_code":{"type":"boolean"},"invokes_target_code":{"const":false,"type":"boolean"},"loads_target":{"type":"boolean"},"uses_debugger":{"type":"boolean"},"uses_reflection":{"type":"boolean"}},"required":["attaches_process","loads_target","uses_debugger","uses_reflection","instruments_code","invokes_target_code"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"executed":{"const":false,"type":"boolean"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"method_lock":{"additionalProperties":false,"properties":{"body_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"body_status":{"enum":["present","partial","absent","malformed","too-large"],"type":"string"},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"exact_build_required":{"const":true,"type":"boolean"},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256","body_sha256","il_size","body_status","exact_build_required"],"type":"object"},"phase":{"const":"admission-plan","type":"string"},"requested_runtime":{"additionalProperties":false,"properties":{"effect":{"enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"executable_path":{"minLength":1,"type":"string"},"filesystem":{"const":"owned-artifacts-only","type":"string"},"host":{"additionalProperties":false,"properties":{"architecture":{"enum":["x86","x86_64","arm","arm64"],"type":"string"},"clr_family":{"enum":["dotnet","dotnet-framework","mono","unknown"],"type":"string"},"os":{"enum":["linux","macos","windows"],"type":"string"}},"required":["os","clr_family","architecture"],"type":"object"},"network":{"const":"none","type":"string"}},"required":["effect","host","executable_path","network","filesystem"],"type":"object"},"schema_version":{"const":1,"type":"number"},"static_observation":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","artifact_path","byte_length","module_name","mvid","metadata_status"],"type":"object"},"unsupported_until_executor_exists":{"const":true,"type":"boolean"}},"required":["schema_version","correlation_id","phase","executed","authority_model","static_observation","method_lock","requested_runtime","effect_taxonomy","bounds","unsupported_until_executor_exists","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Plan Managed Runtime Correlation"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Project authenticated managed artifact, member, and native-boundary Evidence into the provider-neutral application graph without executing managed code, loading assemblies, or translating managed metadata tokens to native addresses. The graph preserves managed static observations as managed-specific nodes linked to source Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limits":{"max_fields":100,"max_methods":100,"max_native_implementations":100,"max_pinvoke_imports":100,"max_types":100},"managed_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"properties":{"limits":{"additionalProperties":false,"default":{"max_fields":5000,"max_methods":10000,"max_native_implementations":5000,"max_pinvoke_imports":5000,"max_types":5000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_fields":{"default":5000,"description":"Maximum permitted fields for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_methods":{"default":10000,"description":"Maximum permitted methods for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_native_implementations":{"default":5000,"description":"Maximum permitted native implementations for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_pinvoke_imports":{"default":5000,"description":"Maximum permitted pinvoke imports for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_types":{"default":5000,"description":"Maximum permitted types for this operation.","maximum":100000,"minimum":0,"type":"integer"}},"type":"object"},"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"type":"object"},"kind":"application","name":"project_managed_application_graph","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"coverage":{"additionalProperties":false,"properties":{"omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_native_implementations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_pinvoke_imports":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_types":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","omitted_types","omitted_methods","omitted_fields","omitted_pinvoke_imports","omitted_native_implementations"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3,"minItems":1,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"projection_id":{"pattern":"^magp_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"source_evidence":{"additionalProperties":false,"properties":{"managed_artifact_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"managed_members_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"managed_native_boundaries_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["managed_artifact_evidence_id","managed_members_evidence_id","managed_native_boundaries_evidence_id"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"assemblies":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_implementations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_imports":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"types":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["graph_nodes","graph_edges","assemblies","modules","types","methods","fields","pinvoke_imports","native_implementations"],"type":"object"}},"required":["schema_version","projection_id","root_artifact_sha256","source_evidence","summary","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Project Managed Application Graph"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List bounded page targets from an approved user-owned loopback Chrome DevTools Protocol endpoint. Only targets whose current URL matches an approved exact origin are returned; URL credentials, query values, and fragments are redacted.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","limit":100,"offset":0}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["cdp_endpoint","allowed_origins","approved"],"type":"object"},"kind":"browser-provider","name":"list_browser_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"excluded":{"additionalProperties":false,"properties":{"disallowed_origin":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"non_page":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["disallowed_origin","unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"origin":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Browser Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one approved page target through CDP without evaluating JavaScript, navigating, clicking, closing, or mutating the page. Returns bounded DOM structure, accessibility, scripts, resources, attach-window network and console metadata, workers, and redacted storage inventory as Evidence v2.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"allOf":[{"if":{"properties":{"include_console_text":{"const":true,"description":"Whether include_console_text was requested"}},"required":["include_console_text"]},"then":{"properties":{"console_text_approved":{"const":true,"description":"Approval for include_console_text"}},"required":["console_text_approved"]}},{"if":{"properties":{"include_json_body_shapes":{"const":true,"description":"Whether include_json_body_shapes was requested"}},"required":["include_json_body_shapes"]},"then":{"properties":{"json_body_schema_approved":{"const":true,"description":"Approval for include_json_body_shapes"}},"required":["json_body_schema_approved"]}},{"if":{"properties":{"include_websocket_shapes":{"const":true,"description":"Whether include_websocket_shapes was requested"}},"required":["include_websocket_shapes"]},"then":{"properties":{"websocket_shape_approved":{"const":true,"description":"Approval for include_websocket_shapes"}},"required":["websocket_shape_approved"]}}],"examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","console_text_approved":false,"include_accessibility_text":false,"include_console_text":false,"include_json_body_shapes":false,"include_script_sources":false,"include_storage_fingerprints":false,"include_storage_keys":false,"include_websocket_shapes":false,"json_body_schema_approved":false,"limits":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"observation_ms":500,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS","websocket_shape_approved":false}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id"],"type":"object"},"kind":"browser-provider","name":"inspect_web_page","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"accessibility":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"ignored":{"type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"node_id":{"type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"states":{"default":[],"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}]}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored","states"],"type":"object"},"type":"array"},"text_capture":{"additionalProperties":false,"properties":{"excluded_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"properties":{"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"additionalProperties":false,"properties":{"coverage_started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"items":{"additionalProperties":false,"properties":{"argument_types":{"items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"text_capture":{"additionalProperties":false,"properties":{"retained_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"items":{"additionalProperties":false,"properties":{"argument_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"type":{"type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"type":"number"},"type":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"attribute_names":{"items":{"type":"string"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"type":"string"},"node_type":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"items":{"additionalProperties":false,"properties":{"frame_id":{"type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"agent_hints":{"items":{"additionalProperties":false,"properties":{"declaration":{"type":"string"},"mechanism":{"enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"items":{"additionalProperties":false,"properties":{"attribute":{"enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"type":"boolean"},"responses":{"items":{"additionalProperties":false,"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"csp":{"additionalProperties":false,"properties":{"directives":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"sources":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"items":{"additionalProperties":false,"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}]},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}]},"destination_scope":{"enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}]},"rel":{"items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"policies":{"additionalProperties":false,"properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}]},"coop":{"anyOf":[{"type":"string"},{"type":"null"}]},"corp":{"anyOf":[{"type":"string"},{"type":"null"}]},"permissions_policy_features":{"items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}]},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"type":"string"},"url":{"type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"additionalProperties":false,"properties":{"coverage_started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"type":"boolean"},"requests":{"items":{"additionalProperties":false,"properties":{"body_shapes":{"additionalProperties":false,"properties":{"request":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"response":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"status":{"enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"initiator":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"type":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","url","line","column"],"type":"object"},"method":{"type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"url":{"type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"items":{"additionalProperties":false,"properties":{"direction":{"enum":["sent","received"],"type":"string"},"opcode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"additionalProperties":false,"properties":{"format":{"enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}]},"request_id":{"type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"mime_type":{"type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"resource_key":{"pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"is_module":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"resource_reconciliation":{"oneOf":[{"additionalProperties":false,"properties":{"resource_key":{"type":"string"},"status":{"const":"exact","type":"string"}},"required":["status","resource_key"],"type":"object"},{"additionalProperties":false,"properties":{"candidate_resource_keys":{"items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"const":"no_exact_sanitized_url","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["script_key","frame_id","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"additionalProperties":false,"properties":{"cache_names":{"items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"items":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"identity_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","type":"string"},"fingerprints_complete":{"default":false,"type":"boolean"},"indexed_db_names":{"items":{"type":"string"},"type":"array"},"local_storage_keys":{"items":{"type":"string"},"type":"array"},"origin":{"type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"session_storage_keys":{"items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"values_redacted":{"const":true,"type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","content_fingerprints","fingerprint_algorithm","fingerprints_complete","values_redacted"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"origin":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"target_id":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","url","origin","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Web Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Capture explicitly approved JavaScript source from one approved CDP page and statically derive a bounded chunk graph, route and endpoint candidates, vendor fingerprints, page-declared WebMCP metadata, and optional separately approved source-map evidence. JavaScript is parsed but never executed.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"allOf":[{"if":{"properties":{"include_console_text":{"const":true,"description":"Whether include_console_text was requested"}},"required":["include_console_text"]},"then":{"properties":{"console_text_approved":{"const":true,"description":"Approval for include_console_text"}},"required":["console_text_approved"]}},{"if":{"properties":{"include_json_body_shapes":{"const":true,"description":"Whether include_json_body_shapes was requested"}},"required":["include_json_body_shapes"]},"then":{"properties":{"json_body_schema_approved":{"const":true,"description":"Approval for include_json_body_shapes"}},"required":["json_body_schema_approved"]}},{"if":{"properties":{"include_websocket_shapes":{"const":true,"description":"Whether include_websocket_shapes was requested"}},"required":["include_websocket_shapes"]},"then":{"properties":{"websocket_shape_approved":{"const":true,"description":"Approval for include_websocket_shapes"}},"required":["websocket_shape_approved"]}},{"if":{"properties":{"fetch_source_maps":{"const":true,"description":"Whether fetch_source_maps was requested"}},"required":["fetch_source_maps"]},"then":{"properties":{"source_map_fetch_approved":{"const":true,"description":"Approval for fetch_source_maps"}},"required":["source_map_fetch_approved"]}}],"examples":[{"allowed_origins":["https://app.example.test"],"analysis_limits":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","fetch_source_maps":false,"include_accessibility_text":false,"include_script_sources":true,"include_storage_keys":false,"observation_ms":500,"source_capture_approved":true,"source_map_fetch_approved":false,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"analysis_limits":{"additionalProperties":false,"default":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"description":"Value for analysis limits.","properties":{"max_ast_nodes":{"default":250000,"description":"Maximum permitted ast nodes for this operation.","maximum":2000000,"minimum":1,"type":"integer"},"max_findings":{"default":1000,"description":"Maximum permitted findings for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_original_sources":{"default":2000,"description":"Maximum permitted original sources for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_source_map_bytes":{"default":4194304,"description":"Maximum permitted source map bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_source_map_mappings":{"default":10000,"description":"Maximum permitted source map mappings for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_source_maps":{"default":100,"description":"Maximum permitted source maps for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_total_source_map_bytes":{"default":16777216,"description":"Maximum permitted total source map bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"}},"type":"object"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"fetch_source_maps":{"default":false,"description":"Value for fetch source maps.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"source_map_fetch_approved":{"default":false,"description":"Explicit operator approval for source map fetch.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved"],"type":"object"},"kind":"browser-provider","name":"analyze_web_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"capture":{"additionalProperties":false,"properties":{"scripts_analyzed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_artifacts":{"items":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text_available":{"const":true,"type":"boolean"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text_available"],"type":"object"},"type":"array"},"target_url":{"type":"string"}},"required":["target_url","scripts_observed","scripts_analyzed","source_artifacts"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"dropped_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete_within_limits","truncated","partial"],"type":"string"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","parsed_scripts","parse_failures","visited_ast_nodes","dropped_findings"],"type":"object"},"inferences":{"items":{"additionalProperties":false,"properties":{"basis":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"detector":{"type":"string"},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","artifact_sha256","line","column","detector"],"type":"object"},"minItems":1,"type":"array"},"confidence":{"enum":["low","medium","high"],"type":"string"},"kind":{"enum":["vendor_fingerprint","route_framework","bundle_runtime"],"type":"string"},"value":{"type":"string"}},"required":["kind","value","confidence","basis"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observations":{"additionalProperties":false,"properties":{"chunks":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"from_script_key":{"type":"string"},"kind":{"enum":["static_import","dynamic_import","require","worker_import"],"type":"string"},"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"resolved_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"specifier":{"type":"string"}},"required":["from_script_key","kind","specifier","resolved_url","location"],"type":"object"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"script_key":{"type":"string"},"url":{"type":"string"}},"required":["script_key","url","artifact_sha256","bytes"],"type":"object"},"type":"array"}},"required":["nodes","edges"],"type":"object"},"endpoints":{"items":{"additionalProperties":false,"properties":{"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"mechanism":{"type":"string"},"value":{"type":"string"}},"required":["value","mechanism","location"],"type":"object"},"type":"array"},"routes":{"items":{"additionalProperties":false,"properties":{"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"mechanism":{"type":"string"},"value":{"type":"string"}},"required":["value","mechanism","location"],"type":"object"},"type":"array"},"source_maps":{"additionalProperties":false,"properties":{"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dropped_script_keys":{"items":{"type":"string"},"type":"array"},"items":{"items":{"additionalProperties":false,"properties":{"artifact":{"anyOf":[{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},{"type":"null"}]},"declared_url":{"type":"string"},"limitation":{"anyOf":[{"type":"string"},{"type":"null"}]},"mappings":{"items":{"additionalProperties":false,"properties":{"generated_column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"generated_line":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"original_column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_line":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"type":"string"}},"required":["generated_line","generated_column","source","original_line","original_column","name"],"type":"object"},"type":"array"},"original_module_edges":{"items":{"additionalProperties":false,"properties":{"from_source":{"type":"string"},"kind":{"enum":["static_import","dynamic_import","require"],"type":"string"},"resolved_source":{"anyOf":[{"type":"string"},{"type":"null"}]},"specifier":{"type":"string"}},"required":["from_source","kind","specifier","resolved_source"],"type":"object"},"type":"array"},"original_sources":{"items":{"additionalProperties":false,"properties":{"artifact":{"anyOf":[{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},{"type":"null"}]},"source":{"type":"string"}},"required":["source","artifact"],"type":"object"},"type":"array"},"script_key":{"type":"string"},"status":{"enum":["included","fetch_failed","invalid","policy_filtered","truncated"],"type":"string"}},"required":["script_key","declared_url","status","artifact","original_sources","original_module_edges","mappings","limitation"],"type":"object"},"type":"array"},"processed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_requested","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","requested","processed","dropped","dropped_script_keys","items"],"type":"object"},"webmcp_declarations":{"items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"schema_property_names":{"items":{"type":"string"},"type":"array"},"trust":{"const":"page-declared-untrusted","type":"string"}},"required":["name","description","schema_property_names","trust","location"],"type":"object"},"type":"array"}},"required":["chunks","routes","endpoints","webmcp_declarations","source_maps"],"type":"object"},"schema_version":{"const":1,"type":"number"},"unknowns":{"items":{"additionalProperties":false,"properties":{"affected_script_keys":{"items":{"type":"string"},"type":"array"},"dimension":{"type":"string"},"reason":{"type":"string"}},"required":["dimension","reason","affected_script_keys"],"type":"object"},"type":"array"}},"required":["schema_version","capture","observations","inferences","unknowns","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Web Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Arm a bounded CDP observation window while the user operates the page. Allows approved same-origin reload and SPA navigation, records ordered navigation, redirect, lifecycle, and failure metadata, and stops before retaining an out-of-policy destination.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","max_timeline_events":2000,"observation_ms":10000,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"max_timeline_events":{"default":2000,"description":"Maximum permitted timeline events for this operation.","maximum":20000,"minimum":1,"type":"integer"},"observation_ms":{"default":10000,"description":"Value for observation ms.","maximum":60000,"minimum":1,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved"],"type":"object"},"kind":"browser-provider","name":"observe_web_session","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"target":{"additionalProperties":false,"properties":{"final_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"initial_url":{"type":"string"},"target_id":{"type":"string"}},"required":["target_id","initial_url","final_url"],"type":"object"},"timeline":{"items":{"additionalProperties":false,"properties":{"destination_scope":{"anyOf":[{"enum":["approved","outside_policy","unsupported"],"type":"string"},{"type":"null"}]},"detail":{"anyOf":[{"type":"string"},{"type":"null"}]},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"loader_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timestamp":{"minimum":0,"type":"number"},"type":{"enum":["navigation_requested","navigation_committed","same_origin_reload","same_document_navigation","redirect","load_failed","lifecycle","target_terminated"],"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["sequence","type","timestamp","frame_id","loader_id","request_id","url","destination_scope","detail"],"type":"object"},"type":"array"},"window":{"additionalProperties":false,"properties":{"armed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"end_reason":{"enum":["window_elapsed","target_left_scope","target_terminated"],"type":"string"},"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"requested_ms":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["armed_at","ended_at","requested_ms","end_reason"],"type":"object"}},"required":["schema_version","browser","target","window","timeline","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Observe Web Session"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inventory page-registered WebMCP tools using the experimental CDP WebMCP domain. Metadata is bounded and page-declared-untrusted; REA never registers or invokes discovered tools.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","max_schema_bytes":262144,"max_schema_depth":20,"max_schema_nodes":5000,"max_tools":500,"observation_ms":100,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"max_schema_bytes":{"default":262144,"description":"Maximum permitted schema bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_schema_depth":{"default":20,"description":"Maximum permitted schema depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_schema_nodes":{"default":5000,"description":"Maximum permitted schema nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_tools":{"default":500,"description":"Maximum permitted tools for this operation.","maximum":5000,"minimum":1,"type":"integer"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved"],"type":"object"},"kind":"browser-provider","name":"discover_webmcp_tools","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"status":{"enum":["available","unavailable"],"type":"string"},"target":{"additionalProperties":false,"properties":{"origin":{"type":"string"},"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"enum":["declarative","imperative"],"type":"string"},"description":{"type":"string"},"frame_id":{"type":"string"},"frame_url":{"type":"string"},"input_schema_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"name":{"type":"string"},"owner_origin":{"type":"string"},"registration_source":{"anyOf":[{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"url":{"type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}]},"tool_key":{"pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Discover Webmcp Tools"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Compare either passive web captures or step-indexed browser scenarios. Scenario comparison aligns exact step IDs, records deterministic literal normalization, and exposes bounded artifact-level changes plus alignment failures. Missing or truncated evidence never proves equality.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"after_scenario":{"browser":{"cleanup":"disconnected-external","mode":"connect","process_ownership":"external","product":"Chromium","version":"149"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"duration_ms":10,"events":{"dropped":0,"items":[],"retained":0},"limitations":[],"scenario":{"action_count":1,"allowed_origins":["https://app.example.test"],"secret_references":[],"start_origin":"https://app.example.test"},"schema_version":1,"steps":[{"action":"scenario_start","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":0,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"scenario_start","step_index":0},{"action":"click","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":10,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"open-settings","step_index":1}]},"before_scenario":{"browser":{"cleanup":"disconnected-external","mode":"connect","process_ownership":"external","product":"Chromium","version":"149"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"duration_ms":10,"events":{"dropped":0,"items":[],"retained":0},"limitations":[],"scenario":{"action_count":1,"allowed_origins":["https://app.example.test"],"secret_references":[],"start_origin":"https://app.example.test"},"schema_version":1,"steps":[{"action":"scenario_start","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":0,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"scenario_start","step_index":0},{"action":"click","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":10,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"open-settings","step_index":1}]},"max_changes":2000,"normalization":{"rules":[{"artifacts":["dom","accessibility"],"match":"build-123","replacement":"[BUILD_ID]","rule_id":"volatile-build-id"}]}}],"oneOf":[{"not":{"anyOf":[{"required":["before_scenario"]},{"required":["after_scenario"]}]},"required":["before","after"]},{"not":{"anyOf":[{"required":["before"]},{"required":["after"]}]},"required":["before_scenario","after_scenario"]}],"properties":{"after":{"additionalProperties":false,"description":"Later passive web-page capture; pair with before.","properties":{"inspection":{"additionalProperties":false,"description":"Value for inspection.","properties":{"accessibility":{"additionalProperties":false,"description":"Value for accessibility.","properties":{"nodes":{"description":"Value for nodes.","items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for description."},"ignored":{"description":"Value for ignored.","type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"node_id":{"description":"Value for node id.","type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent id."},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for role."},"states":{"default":[],"description":"Value for states.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"Value for value."}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored"],"type":"object"},"type":"array"},"text_capture":{"additionalProperties":false,"description":"Value for text capture.","properties":{"excluded_fields":{"description":"Value for excluded fields.","maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"description":"Value for truncated fields.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"description":"Value for capture window.","properties":{"ended_at":{"description":"Value for ended at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"description":"Value for started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"additionalProperties":false,"description":"Value for console.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"description":"Value for events.","items":{"additionalProperties":false,"properties":{"argument_types":{"description":"Value for argument types.","items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"text_capture":{"additionalProperties":false,"description":"Value for text capture.","properties":{"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"description":"Value for truncated values.","maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"description":"Value for values.","items":{"additionalProperties":false,"properties":{"argument_index":{"description":"Value for argument index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","type":"string"},"type":{"description":"Value for type.","type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"description":"Value for timestamp.","type":"number"},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"additionalProperties":false,"description":"Value for dom.","properties":{"nodes":{"description":"Value for nodes.","items":{"additionalProperties":false,"properties":{"attribute_names":{"description":"Value for attribute names.","items":{"type":"string"},"type":"array"},"index":{"description":"Value for index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"description":"Value for node name.","type":"string"},"node_type":{"description":"Value for node type.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"description":"Value for node value length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"description":"Value for parent index.","maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"description":"Value for frames.","items":{"additionalProperties":false,"properties":{"frame_id":{"description":"Value for frame id.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent frame id."},"url":{"description":"Value for url.","type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"description":"Value for metadata.","properties":{"agent_hints":{"description":"Value for agent hints.","items":{"additionalProperties":false,"properties":{"declaration":{"description":"Value for declaration.","type":"string"},"mechanism":{"description":"Value for mechanism.","enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"description":"Value for dom urls.","items":{"additionalProperties":false,"properties":{"attribute":{"description":"Value for attribute.","enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"description":"Value for node index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"description":"Value for excluded dom urls.","maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"description":"Value for headers allowlisted.","type":"boolean"},"responses":{"description":"Value for responses.","items":{"additionalProperties":false,"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for content encoding."},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for content length."},"csp":{"additionalProperties":false,"description":"Value for csp.","properties":{"directives":{"description":"Value for directives.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"sources":{"description":"Value for sources.","items":{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for value."}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"description":"Value for hash count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"description":"Value for nonce count.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"description":"Value for links.","items":{"additionalProperties":false,"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for as."},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for crossorigin."},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for href."},"rel":{"description":"Value for rel.","items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for type."}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"policies":{"additionalProperties":false,"description":"Value for policies.","properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coep."},"coop":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coop."},"corp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for corp."},"permissions_policy_features":{"description":"Value for permissions policy features.","items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for referrer policy."},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for x content type options."}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"description":"Value for request id.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"additionalProperties":false,"description":"Value for network.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"},"requests":{"description":"Value for requests.","items":{"additionalProperties":false,"properties":{"body_shapes":{"additionalProperties":false,"description":"Value for body shapes.","properties":{"request":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"additionalProperties":false,"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for request."},"response":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"additionalProperties":false,"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for encoded data length."},"initiator":{"additionalProperties":false,"description":"Value for initiator.","properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","url","line","column"],"type":"object"},"method":{"description":"Value for method.","type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"request_id":{"description":"Value for request id.","type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for resource type."},"status":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Current lifecycle or verification status."},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"description":"Value for websocket events.","items":{"additionalProperties":false,"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["sent","received"],"type":"string"},"opcode":{"description":"Value for opcode.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"additionalProperties":false,"properties":{"format":{"description":"Declared input artifact format.","enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"additionalProperties":false,"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for json shape."},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}],"description":"Value for payload shape."},"request_id":{"description":"Value for request id.","type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"description":"Value for resources.","items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for content size."},"mime_type":{"description":"Value for mime type.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_key":{"description":"Value for resource key.","pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"scripts":{"additionalProperties":false,"description":"Value for scripts.","properties":{"items":{"description":"Value for items.","items":{"additionalProperties":false,"properties":{"cdp_hash":{"description":"Value for cdp hash.","type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for frame id."},"is_module":{"description":"Whether is module.","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for language."},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_reconciliation":{"description":"Value for resource reconciliation.","oneOf":[{"additionalProperties":false,"properties":{"resource_key":{"description":"Value for resource key.","type":"string"},"status":{"const":"exact","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","resource_key"],"type":"object"},{"additionalProperties":false,"properties":{"candidate_resource_keys":{"description":"Value for candidate resource keys.","items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"const":"no_exact_sanitized_url","description":"Value for reason.","type":"string"},"status":{"const":"unmatched","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"description":"Value for script key.","pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"description":"Value for source.","oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"description":"Value for included.","type":"boolean"},"reason":{"description":"Value for reason.","type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"description":"Value for artifact.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","description":"Value for charset.","type":"string"},"media_type":{"description":"Value for media type.","maxLength":256,"minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"description":"Value for included.","type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for source map url."},"url":{"description":"Value for url.","type":"string"}},"required":["script_key","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"additionalProperties":false,"description":"Value for storage.","properties":{"cache_names":{"description":"Value for cache names.","items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"description":"Value for content fingerprints.","items":{"additionalProperties":false,"properties":{"complete":{"description":"Value for complete.","type":"boolean"},"identity_sha256":{"description":"Exact SHA-256 digest of identity.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"description":"Value for scope.","enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","description":"Value for fingerprint algorithm.","type":"string"},"fingerprints_complete":{"default":false,"description":"Value for fingerprints complete.","type":"boolean"},"indexed_db_names":{"description":"Value for indexed db names.","items":{"type":"string"},"type":"array"},"local_storage_keys":{"description":"Value for local storage keys.","items":{"type":"string"},"type":"array"},"origin":{"description":"Value for origin.","type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for quota."},"session_storage_keys":{"description":"Value for session storage keys.","items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for usage."},"values_redacted":{"const":true,"description":"Value for values redacted.","type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","values_redacted"],"type":"object"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"attached":{"description":"Value for attached.","type":"boolean"},"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"title":{"description":"Value for title.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"description":"Value for workers.","items":{"additionalProperties":false,"properties":{"attached":{"description":"Value for attached.","type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for opener target id."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for parent frame id."},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","url","origin","attached"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"},"webmcp":{"anyOf":[{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["available","unavailable"],"type":"string"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"additionalProperties":false,"description":"Value for tools.","properties":{"items":{"description":"Value for items.","items":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"description":"Value for annotations.","properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for autosubmit."},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for read only."},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for untrusted content."}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"description":"Value for declaration kind.","enum":["declarative","imperative"],"type":"string"},"description":{"description":"Value for description.","type":"string"},"frame_id":{"description":"Value for frame id.","type":"string"},"frame_url":{"description":"Value for frame url.","type":"string"},"input_schema_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"additionalProperties":false,"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for input schema shape."},"name":{"description":"Exact name used by this operation.","type":"string"},"owner_origin":{"description":"Value for owner origin.","type":"string"},"registration_source":{"anyOf":[{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"url":{"description":"Value for url.","type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}],"description":"Value for registration source."},"tool_key":{"description":"Value for tool key.","pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for webmcp."}},"required":["inspection"],"type":"object"},"after_scenario":{"additionalProperties":false,"description":"Later browser scenario capture; pair with before_scenario.","properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"cleanup":{"description":"Value for cleanup.","enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["launch","connect"],"type":"string"},"process_ownership":{"description":"Value for process ownership.","enum":["provider-owned","external"],"type":"string"},"product":{"description":"Value for product.","maxLength":1024,"minLength":1,"type":"string"},"version":{"description":"Value for version.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"equality_eligible":{"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"duration_ms":{"description":"Value for duration ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"events":{"additionalProperties":false,"description":"Value for events.","properties":{"dropped":{"description":"Value for dropped.","maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"description":"Value for items.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","description":"Value for kind.","type":"string"},"level":{"description":"Value for level.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","maxLength":65536,"type":"string"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","description":"Value for kind.","type":"string"},"message":{"description":"Value for message.","maxLength":65536,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}],"description":"Value for stack."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Value for failure."},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"description":"Value for kind.","enum":["request","response","request-failed"],"type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"anyOf":[{"maximum":599,"minimum":100,"type":"integer"},{"type":"null"}],"description":"Current lifecycle or verification status."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","method","url","resource_type","status","header_names","failure"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-opened","websocket-closed"],"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"anyOf":[{"maxLength":65536,"type":"string"},{"type":"null"}],"description":"Value for payload text."},"payload_type":{"description":"Value for payload type.","enum":["text","binary"],"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"description":"Value for truncated.","type":"boolean"},"url":{"additionalProperties":false,"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_type","payload_bytes","payload_text","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["frame-attached","frame-detached","frame-navigated","worker-created","worker-closed","popup-opened","popup-closed"],"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","description":"Value for kind.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"description":"Value for suggested filename.","maxLength":1024,"type":"string"},"url":{"additionalProperties":false,"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"description":"Value for start origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"steps":{"description":"Value for steps.","items":{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"additionalProperties":false,"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"additionalProperties":false,"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"additionalProperties":false,"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"equality_eligible":{"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"elapsed_ms":{"description":"Value for elapsed ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}],"description":"Structured, caller-actionable error when the operation fails."},"event_sequence_end":{"description":"Value for event sequence end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"description":"Value for event sequence start.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["completed","failed","cancelled"],"type":"string"},"step_id":{"description":"Value for step id.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","status","elapsed_ms","before_url","after_url","error","event_sequence_start","event_sequence_end","artifacts","completeness"],"type":"object"},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"before":{"additionalProperties":false,"description":"Earlier passive web-page capture; pair with after.","properties":{"inspection":{"additionalProperties":false,"description":"Value for inspection.","properties":{"accessibility":{"additionalProperties":false,"description":"Value for accessibility.","properties":{"nodes":{"description":"Value for nodes.","items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for description."},"ignored":{"description":"Value for ignored.","type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"node_id":{"description":"Value for node id.","type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent id."},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for role."},"states":{"default":[],"description":"Value for states.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"Value for value."}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored"],"type":"object"},"type":"array"},"text_capture":{"additionalProperties":false,"description":"Value for text capture.","properties":{"excluded_fields":{"description":"Value for excluded fields.","maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"description":"Value for truncated fields.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"description":"Value for capture window.","properties":{"ended_at":{"description":"Value for ended at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"description":"Value for started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"additionalProperties":false,"description":"Value for console.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"description":"Value for events.","items":{"additionalProperties":false,"properties":{"argument_types":{"description":"Value for argument types.","items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"text_capture":{"additionalProperties":false,"description":"Value for text capture.","properties":{"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"description":"Value for truncated values.","maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"description":"Value for values.","items":{"additionalProperties":false,"properties":{"argument_index":{"description":"Value for argument index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","type":"string"},"type":{"description":"Value for type.","type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"description":"Value for timestamp.","type":"number"},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"additionalProperties":false,"description":"Value for dom.","properties":{"nodes":{"description":"Value for nodes.","items":{"additionalProperties":false,"properties":{"attribute_names":{"description":"Value for attribute names.","items":{"type":"string"},"type":"array"},"index":{"description":"Value for index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"description":"Value for node name.","type":"string"},"node_type":{"description":"Value for node type.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"description":"Value for node value length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"description":"Value for parent index.","maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"description":"Value for frames.","items":{"additionalProperties":false,"properties":{"frame_id":{"description":"Value for frame id.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent frame id."},"url":{"description":"Value for url.","type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"description":"Value for metadata.","properties":{"agent_hints":{"description":"Value for agent hints.","items":{"additionalProperties":false,"properties":{"declaration":{"description":"Value for declaration.","type":"string"},"mechanism":{"description":"Value for mechanism.","enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"description":"Value for dom urls.","items":{"additionalProperties":false,"properties":{"attribute":{"description":"Value for attribute.","enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"description":"Value for node index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"description":"Value for excluded dom urls.","maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"description":"Value for headers allowlisted.","type":"boolean"},"responses":{"description":"Value for responses.","items":{"additionalProperties":false,"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for content encoding."},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for content length."},"csp":{"additionalProperties":false,"description":"Value for csp.","properties":{"directives":{"description":"Value for directives.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"sources":{"description":"Value for sources.","items":{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for value."}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"description":"Value for hash count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"description":"Value for nonce count.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"description":"Value for links.","items":{"additionalProperties":false,"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for as."},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for crossorigin."},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for href."},"rel":{"description":"Value for rel.","items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for type."}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"policies":{"additionalProperties":false,"description":"Value for policies.","properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coep."},"coop":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coop."},"corp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for corp."},"permissions_policy_features":{"description":"Value for permissions policy features.","items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for referrer policy."},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for x content type options."}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"description":"Value for request id.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"additionalProperties":false,"description":"Value for network.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"},"requests":{"description":"Value for requests.","items":{"additionalProperties":false,"properties":{"body_shapes":{"additionalProperties":false,"description":"Value for body shapes.","properties":{"request":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"additionalProperties":false,"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for request."},"response":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"additionalProperties":false,"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for encoded data length."},"initiator":{"additionalProperties":false,"description":"Value for initiator.","properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","url","line","column"],"type":"object"},"method":{"description":"Value for method.","type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"request_id":{"description":"Value for request id.","type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for resource type."},"status":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Current lifecycle or verification status."},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"description":"Value for websocket events.","items":{"additionalProperties":false,"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["sent","received"],"type":"string"},"opcode":{"description":"Value for opcode.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"additionalProperties":false,"properties":{"format":{"description":"Declared input artifact format.","enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"additionalProperties":false,"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for json shape."},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}],"description":"Value for payload shape."},"request_id":{"description":"Value for request id.","type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"description":"Value for resources.","items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for content size."},"mime_type":{"description":"Value for mime type.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_key":{"description":"Value for resource key.","pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"scripts":{"additionalProperties":false,"description":"Value for scripts.","properties":{"items":{"description":"Value for items.","items":{"additionalProperties":false,"properties":{"cdp_hash":{"description":"Value for cdp hash.","type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for frame id."},"is_module":{"description":"Whether is module.","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for language."},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_reconciliation":{"description":"Value for resource reconciliation.","oneOf":[{"additionalProperties":false,"properties":{"resource_key":{"description":"Value for resource key.","type":"string"},"status":{"const":"exact","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","resource_key"],"type":"object"},{"additionalProperties":false,"properties":{"candidate_resource_keys":{"description":"Value for candidate resource keys.","items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"const":"no_exact_sanitized_url","description":"Value for reason.","type":"string"},"status":{"const":"unmatched","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"description":"Value for script key.","pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"description":"Value for source.","oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"description":"Value for included.","type":"boolean"},"reason":{"description":"Value for reason.","type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"description":"Value for artifact.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","description":"Value for charset.","type":"string"},"media_type":{"description":"Value for media type.","maxLength":256,"minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"description":"Value for included.","type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for source map url."},"url":{"description":"Value for url.","type":"string"}},"required":["script_key","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"additionalProperties":false,"description":"Value for storage.","properties":{"cache_names":{"description":"Value for cache names.","items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"description":"Value for content fingerprints.","items":{"additionalProperties":false,"properties":{"complete":{"description":"Value for complete.","type":"boolean"},"identity_sha256":{"description":"Exact SHA-256 digest of identity.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"description":"Value for scope.","enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","description":"Value for fingerprint algorithm.","type":"string"},"fingerprints_complete":{"default":false,"description":"Value for fingerprints complete.","type":"boolean"},"indexed_db_names":{"description":"Value for indexed db names.","items":{"type":"string"},"type":"array"},"local_storage_keys":{"description":"Value for local storage keys.","items":{"type":"string"},"type":"array"},"origin":{"description":"Value for origin.","type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for quota."},"session_storage_keys":{"description":"Value for session storage keys.","items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for usage."},"values_redacted":{"const":true,"description":"Value for values redacted.","type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","values_redacted"],"type":"object"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"attached":{"description":"Value for attached.","type":"boolean"},"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"title":{"description":"Value for title.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"description":"Value for workers.","items":{"additionalProperties":false,"properties":{"attached":{"description":"Value for attached.","type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for opener target id."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for parent frame id."},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","url","origin","attached"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"},"webmcp":{"anyOf":[{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["available","unavailable"],"type":"string"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"additionalProperties":false,"description":"Value for tools.","properties":{"items":{"description":"Value for items.","items":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"description":"Value for annotations.","properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for autosubmit."},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for read only."},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for untrusted content."}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"description":"Value for declaration kind.","enum":["declarative","imperative"],"type":"string"},"description":{"description":"Value for description.","type":"string"},"frame_id":{"description":"Value for frame id.","type":"string"},"frame_url":{"description":"Value for frame url.","type":"string"},"input_schema_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"additionalProperties":false,"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for input schema shape."},"name":{"description":"Exact name used by this operation.","type":"string"},"owner_origin":{"description":"Value for owner origin.","type":"string"},"registration_source":{"anyOf":[{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"url":{"description":"Value for url.","type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}],"description":"Value for registration source."},"tool_key":{"description":"Value for tool key.","pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for webmcp."}},"required":["inspection"],"type":"object"},"before_scenario":{"additionalProperties":false,"description":"Earlier browser scenario capture; pair with after_scenario.","properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"cleanup":{"description":"Value for cleanup.","enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["launch","connect"],"type":"string"},"process_ownership":{"description":"Value for process ownership.","enum":["provider-owned","external"],"type":"string"},"product":{"description":"Value for product.","maxLength":1024,"minLength":1,"type":"string"},"version":{"description":"Value for version.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"equality_eligible":{"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"duration_ms":{"description":"Value for duration ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"events":{"additionalProperties":false,"description":"Value for events.","properties":{"dropped":{"description":"Value for dropped.","maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"description":"Value for items.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","description":"Value for kind.","type":"string"},"level":{"description":"Value for level.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","maxLength":65536,"type":"string"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","description":"Value for kind.","type":"string"},"message":{"description":"Value for message.","maxLength":65536,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}],"description":"Value for stack."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Value for failure."},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"description":"Value for kind.","enum":["request","response","request-failed"],"type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"anyOf":[{"maximum":599,"minimum":100,"type":"integer"},{"type":"null"}],"description":"Current lifecycle or verification status."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","method","url","resource_type","status","header_names","failure"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-opened","websocket-closed"],"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"anyOf":[{"maxLength":65536,"type":"string"},{"type":"null"}],"description":"Value for payload text."},"payload_type":{"description":"Value for payload type.","enum":["text","binary"],"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"description":"Value for truncated.","type":"boolean"},"url":{"additionalProperties":false,"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_type","payload_bytes","payload_text","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["frame-attached","frame-detached","frame-navigated","worker-created","worker-closed","popup-opened","popup-closed"],"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","description":"Value for kind.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"description":"Value for suggested filename.","maxLength":1024,"type":"string"},"url":{"additionalProperties":false,"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"description":"Value for start origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"steps":{"description":"Value for steps.","items":{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"additionalProperties":false,"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"additionalProperties":false,"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"additionalProperties":false,"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"equality_eligible":{"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"elapsed_ms":{"description":"Value for elapsed ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}],"description":"Structured, caller-actionable error when the operation fails."},"event_sequence_end":{"description":"Value for event sequence end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"description":"Value for event sequence start.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["completed","failed","cancelled"],"type":"string"},"step_id":{"description":"Value for step id.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","status","elapsed_ms","before_url","after_url","error","event_sequence_start","event_sequence_end","artifacts","completeness"],"type":"object"},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"max_changes":{"default":2000,"description":"Maximum normalized change records to retain.","maximum":20000,"minimum":1,"type":"integer"},"normalization":{"additionalProperties":false,"default":{"rules":[]},"description":"Scenario-only exact-literal normalization policy.","properties":{"rules":{"default":[],"description":"Value for rules.","items":{"additionalProperties":false,"properties":{"artifacts":{"description":"Artifact families whose durable string fields use this rule.","items":{"enum":["action_state","dom","accessibility","url","history","storage","events"],"type":"string"},"maxItems":7,"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","maxLength":4096,"minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","maxLength":4096,"type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","maxLength":64,"minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"maxItems":128,"type":"array"}},"type":"object"}},"type":"object"},"kind":"browser-provider","name":"compare_web_captures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"after_only":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":129,"type":"array"},"aligned_steps":{"maximum":129,"minimum":0,"type":"integer"},"before_only":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":129,"type":"array"},"failures":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate_before_step_id","duplicate_after_step_id","missing_before_step","missing_after_step","action_mismatch","capture_context_mismatch"],"type":"string"},"reason":{"maxLength":2048,"minLength":1,"type":"string"},"step_id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["code","step_id","reason"],"type":"object"},"maxItems":520,"type":"array"},"status":{"enum":["aligned","partial","failed"],"type":"string"}},"required":["status","aligned_steps","before_only","after_only","failures"],"type":"object"},"artifact_diffs":{"additionalProperties":false,"properties":{"omitted":{"maximum":1032,"minimum":0,"type":"integer"},"retained":{"maximum":1032,"minimum":0,"type":"integer"},"total":{"maximum":1032,"minimum":0,"type":"integer"}},"required":["total","retained","omitted"],"type":"object"},"comparison_kind":{"const":"browser_scenario","type":"string"},"limitations":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"normalization":{"additionalProperties":false,"properties":{"built_in_rules":{"items":{"enum":["ignore_step_elapsed_ms","ignore_event_sequence","ignore_event_step_index","compare_screenshot_content_digest","compare_normalized_text_content"],"type":"string"},"maxItems":5,"minItems":5,"type":"array"},"rules":{"items":{"additionalProperties":false,"properties":{"artifacts":{"description":"Artifact families whose durable string fields use this rule.","items":{"enum":["action_state","dom","accessibility","url","history","storage","events"],"type":"string"},"maxItems":7,"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","maxLength":4096,"minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","maxLength":4096,"type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","maxLength":64,"minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"maxItems":128,"type":"array"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["built_in_rules","rules","sha256"],"type":"object"},"overall_status":{"enum":["changed","unchanged","unknown"],"type":"string"},"schema_version":{"const":1,"type":"number"},"steps":{"items":{"additionalProperties":false,"properties":{"after_action":{"maxLength":64,"minLength":1,"type":"string"},"after_step_index":{"maximum":128,"minimum":0,"type":"integer"},"artifact_diffs":{"items":{"additionalProperties":false,"properties":{"after_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"after_state":{"enum":["captured","not_requested","missing","truncated"],"type":"string"},"artifact":{"enum":["action_state","screenshot","dom","accessibility","url","history","storage","events"],"type":"string"},"before_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"before_state":{"enum":["captured","not_requested","missing","truncated"],"type":"string"},"reason":{"anyOf":[{"maxLength":2048,"minLength":1,"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unknown"],"type":"string"}},"required":["artifact","status","before_state","after_state","before_sha256","after_sha256","reason"],"type":"object"},"maxItems":8,"type":"array"},"before_action":{"maxLength":64,"minLength":1,"type":"string"},"before_step_index":{"maximum":128,"minimum":0,"type":"integer"},"omitted_artifact_diffs":{"maximum":8,"minimum":0,"type":"integer"},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"step_id":{"maxLength":64,"minLength":1,"type":"string"}},"required":["step_id","before_step_index","after_step_index","before_action","after_action","status","artifact_diffs","omitted_artifact_diffs"],"type":"object"},"maxItems":129,"type":"array"}},"required":["schema_version","comparison_kind","overall_status","normalization","alignment","steps","artifact_diffs","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"after_target":{"additionalProperties":false,"properties":{"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url"],"type":"object"},"before_target":{"additionalProperties":false,"properties":{"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url"],"type":"object"},"dimensions":{"additionalProperties":false,"properties":{"accessibility":{"additionalProperties":false,"default":{"changes":[],"omitted_changes":0,"reason":"Dimension was not recorded by this version 1 capture diff.","status":"unknown","total_changes":0},"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"dom_structure":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"metadata":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"network":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"resources":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"scripts":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"storage":{"additionalProperties":false,"default":{"changes":[],"omitted_changes":0,"reason":"Dimension was not recorded by this version 1 capture diff.","status":"unknown","total_changes":0},"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"webmcp":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"}},"required":["dom_structure","scripts","resources","network","metadata","webmcp","accessibility","storage"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"overall_status":{"enum":["changed","unchanged","unknown"],"type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","overall_status","before_target","after_target","dimensions","limitations"],"type":"object"}],"description":"Primary structured result returned by this operation."}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Web Captures"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Capture the current visible viewport of one approved page as a bounded, content-addressed PNG artifact. Screenshot capture requires separate explicit approval and never scrolls, navigates, or evaluates page JavaScript.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","maximum_image_bytes":4194304,"screenshot_approved":true,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"maximum_image_bytes":{"default":4194304,"description":"Bounded byte count for maximum image.","maximum":8388608,"minimum":1,"type":"integer"},"screenshot_approved":{"const":true,"description":"Explicit operator approval for screenshot.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved","screenshot_approved"],"type":"object"},"kind":"browser-provider","name":"capture_web_screenshot","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"captured_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"target":{"additionalProperties":false,"properties":{"origin":{"type":"string"},"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url","origin"],"type":"object"},"viewport":{"additionalProperties":false,"properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["width","height"],"type":"object"}},"required":["schema_version","browser","target","captured_at","viewport","artifact","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Web Screenshot"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Compare two self-verifying PNG screenshot artifacts with bounded local pixel metrics. Returns exact changed-pixel ratios and channel deltas without OCR or external services.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"after":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c","uri":"rea://web-screenshot/sha256/153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"before":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c","uri":"rea://web-screenshot/sha256/153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"channel_threshold":0,"maximum_pixels":16000000}],"properties":{"after":{"additionalProperties":false,"description":"The later or right-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"before":{"additionalProperties":false,"description":"The earlier or left-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"channel_threshold":{"default":0,"description":"Value for channel threshold.","maximum":255,"minimum":0,"type":"integer"},"maximum_pixels":{"default":16000000,"description":"Value for maximum pixels.","maximum":32000000,"minimum":1,"type":"integer"}},"required":["before","after"],"type":"object"},"kind":"browser-provider","name":"compare_web_screenshots","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"after":{"additionalProperties":false,"properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["width","height"],"type":"object"},"before":{"additionalProperties":false,"properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["width","height"],"type":"object"},"changed_pixels":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"changed_ratio":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}]},"channel_threshold":{"maximum":255,"minimum":0,"type":"integer"},"compared_pixels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"maximum_channel_delta":{"anyOf":[{"maximum":255,"minimum":0,"type":"integer"},{"type":"null"}]},"mean_absolute_channel_delta":{"anyOf":[{"maximum":255,"minimum":0,"type":"number"},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"status":{"enum":["identical","different","dimension_mismatch"],"type":"string"}},"required":["schema_version","status","before","after","channel_threshold","compared_pixels","changed_pixels","changed_ratio","maximum_channel_delta","mean_absolute_channel_delta","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Web Screenshots"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run one approved, bounded browser scenario through Playwright. Launch mode owns and terminates a temporary browser profile; connect mode attaches to one exact loopback CDP target and disconnects without terminating the external browser. Only the fixed action vocabulary is accepted. Navigation, storage, requests, redirects, secrets, redaction, captures, and limits must be declared before execution. Returns step-indexed Evidence with screenshots, DOM, accessibility, URL/history/storage state, runtime events, explicit missing/truncated sections, and equality eligibility.","effects":{"accessesNetwork":true,"changesUiState":true,"idempotent":false,"launchesProcess":true,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"actions":[{"action":"wait_for","locator":{"kind":"test_id","value":"application-ready"},"state":"visible","step_id":"ready"}],"allowed_origins":["https://app.example.test"],"approved":true,"browser":{"cleanup":"close-and-delete-profile","executable_path":"/opt/chromium/chrome","headless":true,"mode":"launch","user_data":"temporary-owned"},"capture":{"after_each_step":["screenshot","url","accessibility"],"at_end":["dom","history","storage"],"events":["console","page-errors","network","websockets"]},"environment":{"color_scheme":"light","locale":"en-US","reduced_motion":"reduce","service_workers":"block","timezone":"UTC","viewport":{"device_scale_factor":1,"height":720,"width":1280}},"limits":{"action_timeout_ms":5000,"max_accessibility_nodes":10000,"max_dom_nodes":10000,"max_duration_ms":60000,"max_events":2000,"max_frames":100,"max_popups":10,"max_screenshot_bytes":4194304,"max_screenshots":16,"max_storage_entries":256,"max_total_metadata_bytes":4194304,"max_websockets":100,"max_workers":20,"navigation_timeout_ms":10000},"redaction":{"header_names":["authorization","cookie","proxy-authorization","set-cookie"],"query_parameter_names":[],"secret_values":"replace-with-secret-reference"},"request_replay":{"mode":"disabled"},"schema_version":1,"secrets":[],"start_url":{"query":[],"url":"https://app.example.test/"},"storage":{"cookies":[],"local_storage":[],"session_storage":[]}}],"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"action":{"const":"goto","description":"Value for action.","type":"string"},"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"wait_until":{"description":"Value for wait until.","enum":["commit","domcontentloaded","load"],"type":"string"}},"required":["step_id","action","destination","wait_until"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"click","description":"Value for action.","type":"string"},"button":{"default":"left","description":"Value for button.","enum":["left","middle","right"],"type":"string"},"click_count":{"default":1,"description":"Value for click count.","maximum":3,"minimum":1,"type":"integer"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"fill","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["step_id","action","locator","value"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"press","description":"Value for action.","type":"string"},"key":{"description":"Value for key.","maxLength":64,"minLength":1,"type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator","key"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"select_option","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["step_id","action","locator","value"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","enum":["check","uncheck"],"type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"wait_for","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"state":{"description":"Value for state.","enum":["attached","detached","visible","hidden"],"type":"string"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator","state"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"wait_for_timeout","description":"Value for action.","type":"string"},"duration_ms":{"description":"Value for duration ms.","maximum":60000,"minimum":1,"type":"integer"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["step_id","action","duration_ms"],"type":"object"}]},"maxItems":128,"minItems":1,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"browser":{"description":"Value for browser.","oneOf":[{"additionalProperties":false,"properties":{"cleanup":{"const":"close-and-delete-profile","description":"Value for cleanup.","type":"string"},"executable_path":{"description":"Local filesystem path for executable.","maxLength":4096,"minLength":1,"type":"string"},"headless":{"const":true,"description":"Value for headless.","type":"boolean"},"mode":{"const":"launch","description":"Operation mode that selects the requested behavior.","type":"string"},"user_data":{"const":"temporary-owned","description":"Value for user data.","type":"string"}},"required":["mode","executable_path","headless","user_data","cleanup"],"type":"object"},{"additionalProperties":false,"properties":{"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"cleanup":{"const":"disconnect-only","description":"Value for cleanup.","type":"string"},"mode":{"const":"connect","description":"Operation mode that selects the requested behavior.","type":"string"},"ownership":{"const":"external","description":"Value for ownership.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","cdp_endpoint","target_id","ownership","cleanup"],"type":"object"}]},"capture":{"additionalProperties":false,"description":"Value for capture.","properties":{"after_each_step":{"description":"Value for after each step.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"maxItems":6,"type":"array"},"at_end":{"description":"Value for at end.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"maxItems":6,"type":"array"},"events":{"description":"Value for events.","items":{"enum":["console","page-errors","network","websockets","frames","workers","popups","downloads"],"type":"string"},"type":"array"}},"required":["after_each_step","at_end","events"],"type":"object"},"environment":{"additionalProperties":false,"description":"Value for environment.","properties":{"color_scheme":{"description":"Value for color scheme.","enum":["light","dark","no-preference"],"type":"string"},"locale":{"description":"Value for locale.","maxLength":64,"minLength":2,"pattern":"^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$","type":"string"},"reduced_motion":{"description":"Value for reduced motion.","enum":["reduce","no-preference"],"type":"string"},"service_workers":{"const":"block","description":"Value for service workers.","type":"string"},"timezone":{"description":"Value for timezone.","maxLength":128,"minLength":1,"pattern":"^[A-Za-z0-9_+-]+(?:\\\\/[A-Za-z0-9_+-]+)*$","type":"string"},"viewport":{"additionalProperties":false,"description":"Value for viewport.","properties":{"device_scale_factor":{"default":1,"description":"Value for device scale factor.","maximum":4,"minimum":0.5,"type":"number"},"height":{"description":"Value for height.","maximum":4320,"minimum":240,"type":"integer"},"width":{"description":"Value for width.","maximum":7680,"minimum":320,"type":"integer"}},"required":["width","height"],"type":"object"}},"required":["viewport","locale","timezone","color_scheme","reduced_motion","service_workers"],"type":"object"},"limits":{"additionalProperties":false,"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"action_timeout_ms":{"description":"Value for action timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"max_accessibility_nodes":{"description":"Maximum permitted accessibility nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_dom_nodes":{"description":"Maximum permitted dom nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_duration_ms":{"description":"Maximum permitted duration ms for this operation.","maximum":300000,"minimum":100,"type":"integer"},"max_events":{"description":"Maximum permitted events for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_frames":{"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_popups":{"description":"Maximum permitted popups for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_screenshot_bytes":{"description":"Maximum permitted screenshot bytes for this operation.","maximum":8388608,"minimum":1,"type":"integer"},"max_screenshots":{"description":"Maximum permitted screenshots for this operation.","maximum":256,"minimum":0,"type":"integer"},"max_storage_entries":{"description":"Maximum permitted storage entries for this operation.","maximum":512,"minimum":0,"type":"integer"},"max_total_metadata_bytes":{"description":"Maximum permitted total metadata bytes for this operation.","maximum":67108864,"minimum":1024,"type":"integer"},"max_websockets":{"description":"Maximum permitted websockets for this operation.","maximum":10000,"minimum":0,"type":"integer"},"max_workers":{"description":"Maximum permitted workers for this operation.","maximum":1000,"minimum":0,"type":"integer"},"navigation_timeout_ms":{"description":"Value for navigation timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["max_duration_ms","action_timeout_ms","navigation_timeout_ms","max_events","max_frames","max_workers","max_popups","max_websockets","max_dom_nodes","max_accessibility_nodes","max_screenshots","max_screenshot_bytes","max_storage_entries","max_total_metadata_bytes"],"type":"object"},"redaction":{"additionalProperties":false,"description":"Value for redaction.","properties":{"header_names":{"description":"Value for header names.","items":{"maxLength":256,"minLength":1,"type":"string"},"maxItems":128,"type":"array"},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"minLength":1,"type":"string"},"maxItems":128,"type":"array"},"secret_values":{"const":"replace-with-secret-reference","description":"Value for secret values.","type":"string"}},"required":["secret_values"],"type":"object"},"request_replay":{"description":"Value for request replay.","oneOf":[{"additionalProperties":false,"properties":{"mode":{"const":"disabled","description":"Operation mode that selects the requested behavior.","type":"string"}},"required":["mode"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"const":"exact","description":"Operation mode that selects the requested behavior.","type":"string"},"routes":{"description":"Value for routes.","items":{"additionalProperties":false,"properties":{"method":{"description":"Value for method.","enum":["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"],"type":"string"},"request":{"additionalProperties":false,"description":"Value for request.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"response":{"description":"Value for response.","oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]},"headers":{"description":"Value for headers.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+\\\\-.^_`|~0-9A-Za-z]+$","type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"}},"required":["kind","status"],"type":"object"},{"additionalProperties":false,"properties":{"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"kind":{"const":"redirect","description":"Value for kind.","type":"string"},"status":{"anyOf":[{"const":301,"type":"number"},{"const":302,"type":"number"},{"const":303,"type":"number"},{"const":307,"type":"number"},{"const":308,"type":"number"}],"description":"Current lifecycle or verification status."}},"required":["kind","status","destination"],"type":"object"}]},"route_id":{"description":"Value for route id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["route_id","method","request","response"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"unmatched":{"description":"Value for unmatched.","enum":["abort","passthrough-approved-origins"],"type":"string"}},"required":["mode","unmatched","routes"],"type":"object"}]},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"secrets":{"default":[],"description":"Value for secrets.","items":{"additionalProperties":false,"properties":{"environment_variable":{"description":"Value for environment variable.","pattern":"^[A-Z_][A-Z0-9_]{0,127}$","type":"string"},"purpose":{"description":"Value for purpose.","enum":["input","storage","request-replay"],"type":"string"},"redaction":{"const":"replace-with-secret-reference","description":"Value for redaction.","type":"string"},"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["secret_id","environment_variable","purpose","redaction"],"type":"object"},"maxItems":64,"type":"array"},"start_url":{"additionalProperties":false,"description":"Value for start url.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"storage":{"additionalProperties":false,"description":"Value for storage.","properties":{"cookies":{"description":"Value for cookies.","items":{"additionalProperties":false,"properties":{"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value","destination","http_only","secure","same_site"],"type":"object"},"maxItems":128,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"additionalProperties":false,"properties":{"entries":{"description":"Value for entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":128,"type":"array"},"origin":{"description":"Value for origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"maxItems":32,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"additionalProperties":false,"properties":{"entries":{"description":"Value for entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":128,"type":"array"},"origin":{"description":"Value for origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"maxItems":32,"type":"array"}},"type":"object"}},"required":["schema_version","browser","start_url","allowed_origins","environment","actions","storage","request_replay","redaction","capture","limits","approved"],"type":"object"},"kind":"browser-provider","name":"capture_browser_scenario","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"browser":{"additionalProperties":false,"properties":{"cleanup":{"enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"enum":["launch","connect"],"type":"string"},"process_ownership":{"enum":["provider-owned","external"],"type":"string"},"product":{"maxLength":1024,"minLength":1,"type":"string"},"version":{"maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"equality_eligible":{"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"duration_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"events":{"additionalProperties":false,"properties":{"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","type":"string"},"level":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"maxLength":65536,"type":"string"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}]}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","type":"string"},"message":{"maxLength":65536,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}]},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"header_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"enum":["request","response","request-failed"],"type":"string"},"method":{"maxLength":32,"minLength":1,"type":"string"},"resource_type":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"anyOf":[{"maximum":599,"minimum":100,"type":"integer"},{"type":"null"}]},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","method","url","resource_type","status","header_names","failure"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"enum":["websocket-opened","websocket-closed"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"anyOf":[{"maxLength":65536,"type":"string"},{"type":"null"}]},"payload_type":{"enum":["text","binary"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_type","payload_bytes","payload_text","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"enum":["frame-attached","frame-detached","frame-navigated","worker-created","worker-closed","popup-opened","popup-closed"],"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}]}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"maxLength":1024,"type":"string"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"properties":{"action_count":{"maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"type":"number"},"steps":{"items":{"additionalProperties":false,"properties":{"action":{"maxLength":64,"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"properties":{"accessibility":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"current_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"items":{"additionalProperties":false,"properties":{"name":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"cookies":{"items":{"additionalProperties":false,"properties":{"domain":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"value_state":{"enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"local_storage":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"value_state":{"enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"session_storage":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"value_state":{"enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"equality_eligible":{"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}]},"event_sequence_end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"enum":["completed","failed","cancelled"],"type":"string"},"step_id":{"maxLength":64,"minLength":1,"type":"string"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","status","elapsed_ms","before_url","after_url","error","event_sequence_start","event_sequence_end","artifacts","completeness"],"type":"object"},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Browser Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List Electron file:// page targets from an approved user-owned loopback CDP endpoint. Every path is canonicalized and must remain contained by an approved filesystem root, including after symlink resolution.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/Applications/Example.app/Contents/Resources"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9223","limit":100,"offset":0}],"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["cdp_endpoint","allowed_file_roots","approved"],"type":"object"},"kind":"electron-provider","name":"list_electron_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"excluded":{"additionalProperties":false,"properties":{"non_page":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_root":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_root","unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}},"required":["target_id","type","title","file_path","attached"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Electron Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one approved Electron file page through CDP. Returns root-confined frames, DOM structure, resource paths, and scripts without evaluating renderer JavaScript or invoking Electron APIs; script contents require separate approval.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"allOf":[{"if":{"properties":{"include_script_sources":{"const":true,"description":"Whether include_script_sources was requested"}},"required":["include_script_sources"]},"then":{"properties":{"source_capture_approved":{"const":true,"description":"Approval for include_script_sources"}},"required":["source_capture_approved"]}}],"examples":[{"allowed_file_roots":["/Applications/Example.app/Contents/Resources"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":false,"limits":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"observation_ms":100,"source_capture_approved":false,"target_id":"TARGET_ID_FROM_LIST_ELECTRON_TARGETS"}],"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"include_script_sources":{"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":500,"description":"Maximum permitted scripts for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"default":false,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_file_roots","approved","target_id"],"type":"object"},"kind":"electron-provider","name":"inspect_electron_page","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"properties":{"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"dom":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"attribute_names":{"items":{"type":"string"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"type":"string"},"node_type":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"items":{"additionalProperties":false,"properties":{"file_path":{"type":"string"},"frame_id":{"type":"string"},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["frame_id","parent_frame_id","file_path"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"resources":{"items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"file_path":{"type":"string"},"mime_type":{"type":"string"},"resource_key":{"pattern":"^electron_resource_[a-f0-9]{64}$","type":"string"},"type":{"type":"string"}},"required":["resource_key","file_path","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":1,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"type":"string"},"file_path":{"type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"is_module":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"script_key":{"pattern":"^electron_script_[a-f0-9]{64}$","type":"string"},"source":{"oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"type":"boolean"}},"required":["included","artifact"],"type":"object"}]}},"required":["script_key","frame_id","file_path","cdp_hash","length","is_module","language","source"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}},"required":["target_id","type","title","file_path","attached"],"type":"object"},"workers":{"default":[],"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"opener_target_id":{"anyOf":[{"maxLength":256,"minLength":1,"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"maxLength":256,"minLength":1,"type":"string"},{"type":"null"}]},"target_id":{"maxLength":256,"minLength":1,"type":"string"},"type":{"maxLength":100,"minLength":1,"type":"string"}},"required":["target_id","type","file_path","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","scripts","resources","workers","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Electron Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Statically reconstruct one approved local ASAR or extracted JavaScript application without executing it. The default summary returns architecture/security counts, top evidence-backed findings, unknowns, and paged graph resource URIs; request detail=full only when the complete graph must be returned immediately. Identical inputs are deterministic, so do not repeat the call or reread full Evidence without a specific missing detail.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"detail":"summary","format":"auto","input_path":"/Applications/Example.app/Contents/Resources/app.asar","source_map_read_approved":false}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"detail":{"default":"summary","description":"summary returns bounded findings and paged graph resource URIs; full returns the complete graph only when explicitly required","enum":["summary","full"],"type":"string"},"format":{"default":"auto","description":"Declared input artifact format.","enum":["auto","asar","directory"],"type":"string"},"input_path":{"description":"Local filesystem path for input.","maxLength":16384,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_artifact_entry_bytes":134217728,"max_ast_nodes":2000000,"max_compression_ratio":1000,"max_depth":64,"max_entries":8000,"max_findings":8000,"max_modules":20000,"max_parse_milliseconds":30000,"max_path_bytes":4096,"max_source_map_sources":5000,"max_text_file_bytes":8388608,"max_text_files":5000,"max_total_artifact_bytes":536870912,"max_total_text_bytes":134217728},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_artifact_entry_bytes":{"default":134217728,"description":"Maximum permitted artifact entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_ast_nodes":{"default":2000000,"description":"Maximum permitted ast nodes for this operation.","maximum":20000000,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":64,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_entries":{"default":8000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_findings":{"default":8000,"description":"Maximum permitted findings for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_modules":{"default":20000,"description":"Maximum permitted modules for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_parse_milliseconds":{"default":30000,"description":"Maximum permitted parse milliseconds for this operation.","maximum":300000,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_source_map_sources":{"default":5000,"description":"Maximum permitted source map sources for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_text_file_bytes":{"default":8388608,"description":"Maximum permitted text file bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"},"max_text_files":{"default":5000,"description":"Maximum permitted text files for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_total_artifact_bytes":{"default":536870912,"description":"Maximum permitted total artifact bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_total_text_bytes":{"default":134217728,"description":"Maximum permitted total text bytes for this operation.","maximum":536870912,"minimum":1,"type":"integer"}},"type":"object"},"source_map_read_approved":{"default":false,"description":"Explicit operator approval for source map read.","type":"boolean"}},"required":["input_path","approved"],"type":"object"},"kind":"electron-provider","name":"analyze_javascript_application","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"node_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_kinds":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"}},"required":["kind","count"],"type":"object"},"type":"array"},"pages":{"additionalProperties":false,"properties":{"edges":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"nodes":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"page_limit":{"maximum":500,"minimum":1,"type":"integer"}},"required":["nodes","edges","page_limit"],"type":"object"},"roots":{"additionalProperties":false,"properties":{"items":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["items","total","truncated"],"type":"object"},"top_findings":{"items":{"additionalProperties":false,"properties":{"authority":{"type":"string"},"confidence":{"type":"string"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"$ref":"#/$defs/__schema0"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"state":{"type":"string"}},"required":["node_id","kind","label","authority","state","confidence","location"],"type":"object"},"type":"array"}},"required":["graph_id","node_count","edge_count","roots","node_kinds","top_findings","coverage","limitations","pages"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","summary","statistics","limitations","unknowns","graph"],"type":"object"},{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"node_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_kinds":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"}},"required":["kind","count"],"type":"object"},"type":"array"},"pages":{"additionalProperties":false,"properties":{"edges":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"nodes":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"page_limit":{"maximum":500,"minimum":1,"type":"integer"}},"required":["nodes","edges","page_limit"],"type":"object"},"roots":{"additionalProperties":false,"properties":{"items":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["items","total","truncated"],"type":"object"},"top_findings":{"items":{"additionalProperties":false,"properties":{"authority":{"type":"string"},"confidence":{"type":"string"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"$ref":"#/$defs/__schema0"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"state":{"type":"string"}},"required":["node_id","kind","label","authority","state","confidence","location"],"type":"object"},"type":"array"}},"required":["graph_id","node_count","edge_count","roots","node_kinds","top_findings","coverage","limitations","pages"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":2,"type":"number"},"semantic_graph":{"additionalProperties":false,"properties":{"coverage":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"fingerprints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query_tool":{"const":"trace_javascript_semantics","type":"string"},"relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_frontiers":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["graph_id","nodes","relations","unknown_frontiers","fingerprints","coverage","query_tool"],"type":"object"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","summary","statistics","limitations","unknowns","graph","semantic_graph"],"type":"object"}]},{"oneOf":[{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","graph","summary","statistics","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":2,"type":"number"},"semantic_graph":{"additionalProperties":false,"properties":{"application_graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"families":{"items":{"additionalProperties":false,"properties":{"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"omitted_relations":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"retained_relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial","unknown","unsupported"],"type":"string"},"unknown_ids":{"items":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"}},"required":["family","status","retained_relations","omitted_relations","unknown_ids"],"type":"object"},"maxItems":12,"minItems":12,"type":"array"},"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_nodes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"omitted_relations":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_nodes","omitted_relations","limits","families"],"type":"object"},"fingerprints":{"items":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea.javascript-semantic-function/v1","type":"string"},"components":{"additionalProperties":false,"properties":{"control_flow_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"effects":{"items":{"enum":["async","child-process","event","network","promise","resource","timer"],"type":"string"},"maxItems":7,"type":"array"},"literal_set_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"normalized_ast_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameter_arity":{"maximum":10000,"minimum":0,"type":"integer"},"relation_shape_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["parameter_arity","normalized_ast_sha256","control_flow_sha256","relation_shape_sha256","literal_set_sha256","effects"],"type":"object"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"fingerprint_id":{"pattern":"^jsrg_fingerprint_[a-f0-9]{64}$","type":"string"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"function_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"status":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["function_node_id","algorithm","status","components","limitations","evidence","fingerprint_id","fingerprint_sha256"],"type":"object"},"maxItems":20000,"type":"array"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"function_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"identity":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"role_key":{"maxLength":1024,"minLength":1,"type":"string"},"source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]}},"required":["artifact_sha256","module_path","source_range","role_key"],"type":"object"},"kind":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"relations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"relation_id":{"pattern":"^jsrg_relation_[a-f0-9]{64}$","type":"string"},"resolution":{"enum":["resolved","candidate"],"type":"string"},"source_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","resolution","properties","evidence","relation_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"root_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptSemanticRelationGraph","type":"string"},"schema_version":{"const":1,"type":"number"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reason":{"enum":["ambiguous-target","bound-reached","dynamic-call","dynamic-property","eval-or-generated-code","incomplete-module","missing-source","unsupported-syntax"],"type":"string"},"relation_kinds":{"items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":45,"minItems":1,"type":"array"},"unknown_id":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"}},"required":["node_id","family","relation_kinds","reason","detail","candidate_node_ids","evidence","unknown_id"],"type":"object"},"maxItems":100000,"type":"array"}},"required":["schema","schema_version","root_artifact_sha256","application_graph_id","root_node_ids","nodes","relations","fingerprints","unknowns","coverage","limitations","graph_id"],"type":"object"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","graph","summary","statistics","limitations","semantic_graph"],"type":"object"}]}],"description":"Primary structured result returned by this operation."}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Javascript Application"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Reconcile verified static JavaScript application graphs with existing passive web/Electron CDP, passive V8 Inspector, or provider-owned active Electron Evidence. Active Electron captures contribute an explicitly partial target-only runtime record; they never invent renderer scripts, frames, workers, or execution claims. Exact captured-source digests take priority over caller-declared file/URL mappings; target, frame, script, and worker ambiguity remains explicit, and source-map authority stays separate.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"runtime_observations":[{"authority":"external-service","confidence":"observed","environment":null,"evidence_id":"ev_e9ffe953ecde3cee6f8b1e2e2fc8be64bf58d17b3c680d1230587294f6b02c3a","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"browser":{"js_version":"1","product":"Electron/example","protocol_version":"1.3","revision":"example","user_agent":"Electron example"},"capture_window":{"ended_at":"2026-07-15T00:00:00.100Z","observation_ms":100,"started_at":"2026-07-15T00:00:00.000Z"},"completeness":{"attach_limited_sections":[],"conditions":["complete_within_window"],"dropped_events":{"console_events":0,"network_requests":0,"scripts":0,"timeline_events":0,"total":0,"webmcp_tools":0,"websocket_connections":0,"websocket_frames":0},"excluded":[],"policy_filtered_sections":[],"status":"complete_within_window","truncated_sections":[],"unavailable_sections":[]},"dom":{"nodes":[],"total_nodes":0},"frames":[],"limitations":["Example passive capture."],"resources":[],"schema_version":1,"scripts":{"items":[{"cdp_hash":"example","file_path":"/Applications/Example.app/Contents/Resources/app/renderer.js","frame_id":null,"is_module":true,"language":"JavaScript","length":29,"script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","source":{"artifact":{"bytes":29,"charset":"utf-8","media_type":"text/javascript","sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","text":"export const example = true;\\n","uri":"rea://web-content/sha256/c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"included":true}}],"total":1},"target":{"attached":false,"file_path":"/Applications/Example.app/Contents/Resources/app/index.html","target_id":"example-target","title":"Example","type":"page"},"workers":[]},"operation":"inspect_electron_page","parameters":{"allowed_file_roots":["/Applications/Example.app/Contents/Resources/app"],"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":true,"source_capture_approved":true,"target_id":"example-target"},"predicate_type":"rea.electron-page-inspection/v1","provider":{"id":"rea-cdp-electron","name":"REA Electron file-page CDP observation provider","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"static_layers":[{"analysis":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_9f1239eec535ee47ca0af92a544b16a3b4be7ce7478e0a7a6b6201b91cc39d5c","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_361585714eb0138287533474fede3727b19167348e3843c577f82b68337c7234","limitations":[],"nodes":[{"identity":{"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","stability":"global-exact","strategy":"content-digest"},"kind":"javascript-asset","node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","observations":[{"evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"artifact-bytes","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":[],"extractor":{"executable_sha256":null,"name":"rea-javascript-application","operation":"inventory-relevant-file","version":"1"},"limitations":[],"location":{"available":true,"value":{"kind":"artifact-path","path":"renderer.js"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"renderer.js","observation_id":"jag_observation_20b4d076ce370db14ae2b477915624c62e0c4a0c9e56803a2c5cb4fa60c16230","properties":{"bytes":29,"path":"renderer.js"}}]}],"root_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"schema":"JavaScriptApplicationGraph","schema_version":1},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","schema_version":1,"statistics":{"findings":0,"invalid_utf8_files":0,"limit_omitted_text_files":0,"modules":0,"nested_asar_containers":0,"omitted_text_files":0,"parse_failures":0,"parsed_javascript_files":1,"policy_filtered_text_files":0,"relevant_files":1,"text_bytes_read":29,"text_files_selected":1,"truncated_scopes":0,"visited_ast_nodes":1},"summary":{"browser_windows":0,"context_bridge_apis":0,"explicit_web_preferences":0,"exposed_api_members":0,"ipc":{"ambiguous_renderer_transmissions":0,"dynamic_channel_operations":0,"literal_channels":0,"main_handlers":0,"operations":0,"paired_renderer_transmissions":0,"renderer_listeners":0,"renderer_transmissions":0,"unpaired_literal_renderer_transmissions":0},"native_addon_bindings":0,"preload_entrypoints":0,"resolved_native_addon_bindings":0,"resolved_utility_entrypoints":0,"sender_validation_observations":0,"utility_processes":0}},"operation":"analyze_javascript_application","parameters":{"approved":true,"source_map_read_approved":false},"predicate_type":"rea.javascript-application-analysis/v1","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"schema_version":2,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"role":"application"}]}],"properties":{"limits":{"additionalProperties":false,"default":{"max_reconciliation_items":20000,"max_runtime_entities":10000,"max_static_load_states":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_reconciliation_items":{"default":20000,"description":"Maximum permitted reconciliation items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_runtime_entities":{"default":10000,"description":"Maximum permitted runtime entities for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_static_load_states":{"default":20000,"description":"Maximum permitted static load states for this operation.","maximum":50000,"minimum":1,"type":"integer"}},"type":"object"},"runtime_observations":{"description":"Value for runtime observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"static_layers":{"description":"Value for static layers.","items":{"additionalProperties":false,"properties":{"analysis":{"additionalProperties":false,"description":"Value for analysis.","properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"role":{"description":"Value for role.","enum":["application","cache","assets"],"type":"string"},"runtime_mappings":{"default":[],"description":"Value for runtime mappings.","items":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","maxLength":4096,"type":"string"},"kind":{"const":"file-root","description":"Value for kind.","type":"string"},"root":{"description":"Value for root.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","root"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","maxLength":4096,"type":"string"},"kind":{"const":"url-prefix","description":"Value for kind.","type":"string"},"prefix":{"description":"Value for prefix.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","prefix"],"type":"object"}]},"maxItems":32,"type":"array"}},"required":["role","analysis"],"type":"object"},"maxItems":8,"minItems":1,"type":"array"}},"required":["static_layers","runtime_observations"],"type":"object"},"kind":"electron-provider","name":"reconcile_javascript_runtime","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"coverage":{"additionalProperties":false,"properties":{"omitted_graph_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_reconciliation_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_runtime_entities":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_static_load_states":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_runtime_entities","omitted_reconciliation_items","omitted_static_load_states","omitted_graph_items"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":40,"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"reconciliation_id":{"pattern":"^jrr_[a-f0-9]{64}$","type":"string"},"reconciliations":{"items":{"additionalProperties":false,"properties":{"basis":{"enum":["content-and-location","content-sha256","module-source-sha256","artifact-path","operator-file-mapping","operator-url-mapping","none"],"type":"string"},"candidate_static_count":{"maximum":800000,"minimum":0,"type":"integer"},"candidate_static_nodes":{"items":{"additionalProperties":false,"properties":{"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["static_layer_id","static_node_id"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"entity_kind":{"enum":["target","frame","script","worker"],"type":"string"},"reason":{"enum":["content-and-location-match","unique-content-match","unique-location-match","ambiguous-static-candidates","captured-content-disagrees-with-static-location","no-static-content-match","no-authorized-location-mapping","runtime-frame-unattributed","static-or-runtime-coverage-incomplete","reconciliation-limit-reached"],"type":"string"},"reconciliation_id":{"pattern":"^jrr_item_[a-f0-9]{64}$","type":"string"},"runtime_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"runtime_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"static_layer_id":{"anyOf":[{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"static_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["matched","ambiguous","unmatched","unknown"],"type":"string"}},"required":["reconciliation_id","entity_kind","runtime_evidence_id","runtime_node_id","static_layer_id","static_node_id","status","basis","confidence","reason","candidate_static_count","candidate_static_nodes"],"type":"object"},"maxItems":50000,"type":"array"},"runtime_captures":{"items":{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["browser","electron","v8-inspector","electron-active"],"type":"string"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts_complete_within_scope":{"type":"boolean"},"target_key":{"maxLength":4096,"minLength":1,"type":"string"},"target_location":{"maxLength":4096,"minLength":1,"type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"workers":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["evidence_id","capture_sha256","kind","target_node_id","target_key","target_location","frames","scripts","workers","scripts_complete_within_scope"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"schema_version":{"const":1,"type":"number"},"source_map_authority":{"additionalProperties":false,"properties":{"limitation":{"maxLength":4096,"minLength":1,"type":"string"},"runtime_script_declarations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_layers_with_read_approval":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"used_for_primary_matching":{"const":false,"type":"boolean"}},"required":["used_for_primary_matching","static_layers_with_read_approval","runtime_script_declarations","limitation"],"type":"object"},"static_layers":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"format":{"enum":["asar","directory"],"type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"role":{"enum":["application","cache","assets"],"type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_mappings":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","maxLength":4096,"type":"string"},"kind":{"const":"file-root","type":"string"},"root":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","root","artifact_prefix"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","maxLength":4096,"type":"string"},"kind":{"const":"url-prefix","type":"string"},"prefix":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","prefix","artifact_prefix"],"type":"object"}]},"maxItems":32,"type":"array"}},"required":["layer_id","role","evidence_id","graph_id","root_artifact_sha256","input_path","format","runtime_mappings"],"type":"object"},"maxItems":8,"minItems":1,"type":"array"},"static_load_states":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["javascript-asset","javascript-chunk","javascript-module"],"type":"string"},"reason":{"enum":["runtime-script-correspondence","containing-asset-was-loaded","not-observed-in-bounded-capture","layer-outside-runtime-scope","static-or-runtime-coverage-incomplete"],"type":"string"},"runtime_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":10000,"type":"array"},"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"enum":["loaded","resident-in-loaded-asset","not-observed-in-capture","unknown"],"type":"string"}},"required":["static_layer_id","static_node_id","kind","status","runtime_node_ids","reason"],"type":"object"},"maxItems":50000,"type":"array"},"summary":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"matched":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_targets":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_workers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_loaded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_not_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_resident":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["runtime_targets","runtime_frames","runtime_scripts","runtime_workers","matched","ambiguous","unmatched","unknown","static_loaded","static_resident","static_not_observed","static_unknown"],"type":"object"}},"required":["schema_version","reconciliation_id","static_layers","runtime_captures","graph","summary","reconciliations","static_load_states","source_map_authority","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Reconcile Javascript Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Use this for an explicitly approved, provider-owned Electron run when passive CDP or Inspector observation cannot exercise application behavior. REA owns startup and teardown, accepts bounded click/wait actions plus window-targeted renderer reload/crash and synthetic open-url/second-instance delivery, and returns correlated window/WebContents/process/preload/session/navigation/shell/IPC evidence without retaining payload values. Results identify observed and unavailable event families, coverage status, action targets, and truncation. External shell, navigation, permission, download, popup, updater, and OS-integration effects are blocked and recorded. Use passive Electron tools for observation-only work.","effects":{"accessesNetwork":true,"changesUiState":true,"idempotent":false,"launchesProcess":true,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"actions":[{"kind":"click","selector":"#run","step_id":"exercise-ipc"}],"application_path":"/Applications/Example.app/Contents/Resources/main.js","application_root":"/Applications/Example.app/Contents/Resources","approved":true,"args":[],"executable_path":"/Applications/Electron.app/Contents/MacOS/Electron","limits":{"action_timeout_ms":5000,"max_actions":20,"max_duration_ms":60000,"max_ipc_events":2000,"max_processes":32,"max_windows":32},"schema_version":1}],"properties":{"actions":{"default":[],"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"click","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":512,"minLength":1,"type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind","selector"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":10000,"minimum":0,"type":"integer"},"kind":{"const":"wait","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind","duration_ms"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"renderer-reload","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"renderer-crash","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind"],"type":"object"},{"additionalProperties":false,"properties":{"delivery":{"description":"Value for delivery.","enum":["open-url","second-instance"],"type":"string"},"kind":{"const":"deep-link","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"url":{"description":"Value for url.","maxLength":4096,"minLength":1,"type":"string"}},"required":["step_id","kind","delivery","url"],"type":"object"}]},"maxItems":100,"type":"array"},"application_path":{"description":"Local filesystem path for application.","maxLength":16384,"minLength":1,"type":"string"},"application_root":{"description":"Approved canonical filesystem application root.","maxLength":16384,"minLength":1,"type":"string"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"args":{"default":[],"description":"Value for args.","items":{"maxLength":4096,"type":"string"},"maxItems":32,"type":"array"},"executable_path":{"description":"Local filesystem path for executable.","maxLength":16384,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"action_timeout_ms":5000,"max_actions":20,"max_duration_ms":60000,"max_ipc_events":2000,"max_processes":32,"max_runtime_events":5000,"max_windows":32},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"action_timeout_ms":{"default":5000,"description":"Value for action timeout ms.","maximum":30000,"minimum":1,"type":"integer"},"max_actions":{"default":20,"description":"Maximum permitted actions for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_duration_ms":{"default":60000,"description":"Maximum permitted duration ms for this operation.","maximum":120000,"minimum":1,"type":"integer"},"max_ipc_events":{"default":2000,"description":"Maximum permitted ipc events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_processes":{"default":32,"description":"Maximum permitted processes for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_runtime_events":{"default":5000,"description":"Maximum permitted runtime events for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_windows":{"default":32,"description":"Maximum permitted windows for this operation.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","executable_path","application_path","application_root","approved"],"type":"object"},"kind":"electron-provider","name":"capture_electron_scenario","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"actions":{"items":{"additionalProperties":false,"properties":{"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["click","wait","renderer-reload","renderer-crash","deep-link"],"type":"string"},"status":{"enum":["completed","failed","cancelled"],"type":"string"},"step_id":{"maxLength":128,"minLength":1,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":99,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","status","elapsed_ms","error"],"type":"object"},"maxItems":100,"type":"array"},"application":{"additionalProperties":false,"properties":{"application_path":{"maxLength":16384,"minLength":1,"type":"string"},"cleanup":{"const":"terminated-owned-process","type":"string"},"electron_version":{"maxLength":256,"minLength":1,"type":"string"},"executable_path":{"maxLength":16384,"minLength":1,"type":"string"},"process_ownership":{"const":"provider-owned","type":"string"}},"required":["executable_path","application_path","electron_version","process_ownership","cleanup"],"type":"object"},"coverage":{"additionalProperties":false,"default":{"observed_event_families":[],"observed_roles":[],"pre_capture_activity":"unavailable","status":"partial_attach","unavailable_event_families":[]},"properties":{"observed_event_families":{"items":{"maxLength":128,"type":"string"},"maxItems":32,"type":"array"},"observed_roles":{"items":{"maxLength":128,"type":"string"},"maxItems":16,"type":"array"},"pre_capture_activity":{"const":"unavailable","type":"string"},"status":{"enum":["complete","partial_attach","capture_truncated","hook_conflict","target_exited","cleanup_failed"],"type":"string"},"unavailable_event_families":{"items":{"maxLength":128,"type":"string"},"maxItems":32,"type":"array"}},"required":["status","observed_event_families","unavailable_event_families","observed_roles","pre_capture_activity"],"type":"object"},"ipc":{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"maxLength":64,"type":"string"},"maxItems":32,"type":"array"},"argument_shapes_truncated":{"default":false,"type":"boolean"},"artifact_path":{"anyOf":[{"maxLength":16384,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"capture_method":{"default":"api-wrapper","enum":["api-wrapper","event-emitter","process-hook"],"type":"string"},"channel":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"channel_truncated":{"default":false,"type":"boolean"},"correlation_id":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"direction":{"anyOf":[{"enum":["renderer-to-main","main-to-renderer","main-to-utility","utility-to-main"],"type":"string"},{"type":"null"}]},"error":{"type":"boolean"},"event":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"kind":{"enum":["main-handler-invocation","main-event-invocation","utility-process-fork","utility-process-message","ipc-main-to-renderer","ipc-utility-to-main","ipc-renderer-send","ipc-renderer-invoke","ipc-renderer-post-message"],"type":"string"},"phase":{"anyOf":[{"enum":["attempted","completed","blocked","failed","observed"],"type":"string"},{"type":"null"}]},"process_type":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"default":"electron-active-hook","maxLength":64,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","channel","channel_truncated","frame","argument_shapes","argument_shapes_truncated","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"maxItems":10000,"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["events","observed","retained","truncated"],"type":"object"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"processes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"name":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"service_name":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"type":{"maxLength":128,"minLength":1,"type":"string"}},"required":["pid","type","name","service_name"],"type":"object"},"maxItems":100,"type":"array"},"truncated":{"type":"boolean"}},"required":["items","truncated"],"type":"object"},"schema_version":{"const":1,"type":"number"},"timeline":{"additionalProperties":false,"default":{"events":[],"observed":0,"retained":0,"truncated":false},"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"maxLength":64,"type":"string"},"maxItems":32,"type":"array"},"argument_shapes_truncated":{"type":"boolean"},"artifact_path":{"anyOf":[{"maxLength":16384,"type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"capture_method":{"enum":["api-wrapper","event-emitter","process-hook"],"type":"string"},"channel":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"channel_truncated":{"type":"boolean"},"correlation_id":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"direction":{"anyOf":[{"enum":["renderer-to-main","main-to-renderer","main-to-utility","utility-to-main"],"type":"string"},{"type":"null"}]},"error":{"type":"boolean"},"event":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"kind":{"enum":["main-handler-invocation","main-event-invocation","utility-process-fork","utility-process-message","ipc-main-to-renderer","ipc-utility-to-main","ipc-renderer-send","ipc-renderer-invoke","ipc-renderer-post-message","app-lifecycle","window-lifecycle","web-contents-lifecycle","navigation","shell-attempt","process-lifecycle","permission","popup-attempt","download","protocol","preload","native-addon","updater","error"],"type":"string"},"phase":{"enum":["attempted","completed","blocked","failed","observed"],"type":"string"},"process_type":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"maxLength":64,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","event","phase","channel","channel_truncated","direction","sender","receiver","frame","target","argument_shapes","argument_shapes_truncated","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"maxItems":20000,"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["events","observed","retained","truncated"],"type":"object"},"windows":{"items":{"additionalProperties":false,"properties":{"destroyed":{"type":"boolean"},"title":{"maxLength":16384,"type":"string"},"url":{"maxLength":65536,"type":"string"},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"web_contents_id":{"maxLength":256,"type":"string"},"window_id":{"maxLength":256,"type":"string"}},"required":["window_id","web_contents_id","url","title","visible","destroyed"],"type":"object"},"maxItems":100,"type":"array"},"windows_truncated":{"type":"boolean"}},"required":["schema_version","application","actions","windows","windows_truncated","processes","ipc","timeline","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Electron Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List attachable Node/Electron V8 Inspector targets from one approved literal-loopback endpoint. Only targets inside exact canonical file roots or exact HTTP(S) origins are retained; excluded target locations never enter Evidence.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/opt/example-app"],"allowed_origins":[],"approved":true,"inspector_endpoint":"http://127.0.0.1:9229","limit":100,"offset":0}],"properties":{"allowed_file_roots":{"default":[],"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"inspector_endpoint":{"description":"Value for inspector endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["inspector_endpoint","approved"],"type":"object"},"kind":"runtime-provider","name":"list_javascript_runtime_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"excluded":{"additionalProperties":false,"properties":{"outside_file_roots":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_origins":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unconnectable":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_file_roots","outside_origins","unsupported_location","unconnectable"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"maxLength":1024,"minLength":1,"type":"string"},"protocol_version":{"maxLength":100,"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"protocol_type":{"maxLength":100,"minLength":1,"type":"string"},"target_id":{"maxLength":256,"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","runtime","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Javascript Runtime Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Attach passively to one exact approved Node/Electron V8 Inspector target and capture bounded Debugger.scriptParsed plus Runtime execution-context events. REA sends only Runtime.enable and Debugger.enable: it never evaluates, pauses, resumes, reads source, or instruments the target. require/import edges, EventEmitter activity, and Electron IPC remain explicit unknowns; reconcile the returned Evidence with static Application Graph Evidence using reconcile_javascript_runtime.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/opt/example-app"],"allowed_origins":[],"approved":true,"inspector_endpoint":"http://127.0.0.1:9229","limits":{"max_events":10000,"max_execution_contexts":1000,"max_location_bytes":16384,"max_scripts":2000,"max_total_metadata_bytes":4194304},"observation_ms":100,"runtime_kind":"node","target_id":"TARGET_ID_FROM_LIST_JAVASCRIPT_RUNTIME_TARGETS"}],"properties":{"allowed_file_roots":{"default":[],"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"inspector_endpoint":{"description":"Value for inspector endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_events":10000,"max_execution_contexts":1000,"max_location_bytes":16384,"max_scripts":2000,"max_total_metadata_bytes":4194304},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_events":{"default":10000,"description":"Maximum permitted events for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_execution_contexts":{"default":1000,"description":"Maximum permitted execution contexts for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_location_bytes":{"default":16384,"description":"Maximum permitted location bytes for this operation.","maximum":65536,"minimum":64,"type":"integer"},"max_scripts":{"default":2000,"description":"Maximum permitted scripts for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_metadata_bytes":{"default":4194304,"description":"Maximum permitted total metadata bytes for this operation.","maximum":33554432,"minimum":1024,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"runtime_kind":{"description":"Value for runtime kind.","enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["inspector_endpoint","approved","target_id","runtime_kind"],"type":"object"},"kind":"runtime-provider","name":"observe_javascript_runtime","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"capture":{"additionalProperties":false,"properties":{"events_dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"events_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"events_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_bytes_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"},"truncation_reasons":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"}},"required":["observation_ms","events_observed","events_retained","events_dropped","metadata_bytes_retained","truncated","truncation_reasons"],"type":"object"},"directly_observed":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"execution_contexts":{"items":{"additionalProperties":false,"properties":{"context_key":{"maxLength":64,"minLength":1,"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}]},"state":{"enum":["created","destroyed","cleared"],"type":"string"}},"required":["context_key","state","name","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"maxLength":1024,"minLength":1,"type":"string"},"protocol_version":{"maxLength":100,"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"schema_version":{"const":1,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"invalid_protocol_value":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_file_roots":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_origins":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_file_roots","outside_origins","unsupported_location","invalid_protocol_value"],"type":"object"},"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"anyOf":[{"maxLength":512,"type":"string"},{"type":"null"}]},"execution_context_key":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"is_module":{"type":"boolean"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"script_key":{"pattern":"^v8_script_[a-f0-9]{64}$","type":"string"},"status":{"const":"observed-loaded","type":"string"}},"required":["script_key","location","execution_context_key","cdp_hash","length","is_module","status"],"type":"object"},"type":"array"},"observed_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","observed_total","excluded"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"protocol_type":{"maxLength":100,"minLength":1,"type":"string"},"runtime_kind":{"enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},"runtime_kind_authority":{"const":"caller-declared-unverified","type":"string"},"target_id":{"maxLength":256,"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location","runtime_kind","runtime_kind_authority"],"type":"object"},"unavailable_without_instrumentation":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["schema_version","runtime","target","capture","scripts","execution_contexts","directly_observed","unavailable_without_instrumentation","unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Observe Javascript Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a typed literal seed through an authenticated JavaScript Application Graph supplied as full Evidence or an Evidence ID returned earlier in this session. Explicit direction, depth, node, edge, and path bounds apply. Original static, native, passive-runtime, inferred, and unknown authorities remain distinct; native addon handoffs never open a provider or execute the application.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","direction":"both","seed":{"case_sensitive":false,"kind":"module","match":"exact","value":"renderer.js"}}],"oneOf":[{"required":["application"]},{"required":["application_evidence_id"]}],"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"direction":{"default":"both","description":"Direction in which to traverse or compare relationships.","enum":["outgoing","incoming","both"],"type":"string"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_nodes":2000,"max_paths":100,"max_seed_matches":25},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_paths":{"default":100,"description":"Maximum permitted paths for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"native_observations":{"default":[],"description":"Value for native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"seed":{"additionalProperties":false,"description":"Value for seed.","properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"kind":{"description":"Value for kind.","enum":["node-id","route","string","api","channel","module","native-export"],"type":"string"},"match":{"anyOf":[{"enum":["exact","contains"],"type":"string"},{"type":"null"}],"default":null,"description":"Value for match."},"value":{"description":"Value for value.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"}},"required":["seed"],"type":"object"},"kind":"application","name":"trace_application_feature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"coverage":{"additionalProperties":false,"properties":{"frontier_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"type":"array"},"omitted_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_paths":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scanned_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-source","partial","truncated","no-match"],"type":"string"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","source_graph_status","scanned_nodes","total_seed_matches","omitted_seed_matches","omitted_nodes","omitted_edges","omitted_paths","frontier_node_ids"],"type":"object"},"direction":{"enum":["outgoing","incoming","both"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":65,"minItems":1,"type":"array"},"graph":{"anyOf":[{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"native_handoffs":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"export_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"native_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"maxItems":64,"type":"array"},"recommended_tools":{"items":{"enum":["open_binary","binary_overview","search_procedures","analyze_function","xrefs"],"type":"string"},"maxItems":5,"type":"array"},"requested_exports":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"status":{"enum":["evidence-linked","requires-provider-analysis"],"type":"string"}},"required":["native_node_id","artifact_sha256","artifact_path","export_node_ids","requested_exports","status","providers","evidence_ids","recommended_tools"],"type":"object"},"maxItems":10000,"type":"array"},"paths":{"items":{"additionalProperties":false,"properties":{"authorities":{"items":{"maxLength":128,"minLength":1,"type":"string"},"maxItems":16,"type":"array"},"contains_inference":{"type":"boolean"},"edge_ids":{"items":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"end_kind":{"maxLength":128,"minLength":1,"type":"string"},"end_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":65,"minItems":1,"type":"array"},"path_id":{"pattern":"^jatp_[a-f0-9]{64}$","type":"string"},"start_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["path_id","start_node_id","end_node_id","end_kind","node_ids","edge_ids","authorities","contains_inference"],"type":"object"},"maxItems":1000,"type":"array"},"schema_version":{"const":1,"type":"number"},"seed":{"additionalProperties":false,"properties":{"case_sensitive":{"default":false,"type":"boolean"},"kind":{"enum":["node-id","route","string","api","channel","module","native-export"],"type":"string"},"match":{"anyOf":[{"enum":["exact","contains"],"type":"string"},{"type":"null"}],"default":null},"value":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","value","match","case_sensitive"],"type":"object"},"seed_matches":{"items":{"additionalProperties":false,"properties":{"basis":{"enum":["node-id","label","identity","property"],"type":"string"},"field":{"maxLength":256,"minLength":1,"type":"string"},"kind":{"maxLength":128,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","kind","basis","field"],"type":"object"},"maxItems":1000,"type":"array"},"source_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"source_graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"summary":{"additionalProperties":false,"properties":{"inferred_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"matched_seeds":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_handoffs":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observed_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"terminal_paths":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traced_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traced_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unavailable_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["matched_seeds","traced_nodes","traced_edges","terminal_paths","native_handoffs","observed_facts","inferred_facts","unknown_facts","unavailable_facts"],"type":"object"},"trace_id":{"pattern":"^jatr_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","trace_id","source_evidence_id","source_graph_id","seed","direction","seed_matches","graph","paths","native_handoffs","summary","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Application Feature"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace bounded static JavaScript data-flow, direct call/return, and closure relations from authenticated analyze_javascript_application v2 Evidence. Queries declare direction and exact node, relation, depth, function, module, and page limits. Dynamic or unsupported semantics remain explicit unknowns; static reachability never claims runtime execution.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","query":{"direction":"backward-provenance","seed":{"kind":"semantic-node","node_id":"jsrg_node_0000000000000000000000000000000000000000000000000000000000000000"},"source_map_authority":{"authority":"none"}}}],"oneOf":[{"required":["application"]},{"required":["application_evidence_id"]}],"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"query":{"additionalProperties":false,"description":"Non-empty feature or text query to investigate.","properties":{"allowed_relations":{"description":"Value for allowed relations.","items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":44,"minItems":1,"type":"array"},"cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null,"description":"Value for cursor."},"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"expected":{"anyOf":[{"additionalProperties":false,"properties":{"classes":{"description":"Value for classes.","items":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"maxItems":24,"minItems":1,"type":"array"},"role":{"description":"Value for role.","enum":["source","sink"],"type":"string"}},"required":["role","classes"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for expected."},"include_ambiguous_dynamic_edges":{"default":false,"description":"Whether to include ambiguous dynamic edges in the result.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_functions":500,"max_modules":500,"max_nodes":2000,"max_seed_matches":25,"max_unknowns":1000,"page_size":200},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"description":"Maximum permitted functions for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"description":"Maximum permitted modules for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"description":"Maximum permitted unknowns for this operation.","maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"description":"Value for page size.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"seed":{"description":"Value for seed.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","description":"Value for kind.","type":"string"},"value":{"$ref":"#/$defs/__schema0","description":"Value for value."}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"description":"Exact SHA-256 digest of fingerprint.","pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]},"source_map_authority":{"additionalProperties":false,"default":{"authority":"none"},"description":"Value for source map authority.","properties":{"authority":{"const":"none","description":"Value for authority.","type":"string"}},"required":["authority"],"type":"object"}},"required":["seed","direction"],"type":"object"}},"required":["query"],"type":"object"},"kind":"application","name":"trace_javascript_semantics","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"accepted_limit_ranges":{"additionalProperties":false,"properties":{"max_depth":{"additionalProperties":false,"properties":{"maximum":{"const":64,"type":"number"},"minimum":{"const":0,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_edges":{"additionalProperties":false,"properties":{"maximum":{"const":100000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_functions":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_modules":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_nodes":{"additionalProperties":false,"properties":{"maximum":{"const":50000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_seed_matches":{"additionalProperties":false,"properties":{"maximum":{"const":1000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_unknowns":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":0,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"page_size":{"additionalProperties":false,"properties":{"maximum":{"const":1000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"}},"required":["max_seed_matches","max_nodes","max_edges","max_depth","max_functions","max_modules","max_unknowns","page_size"],"type":"object"},"applied_limits":{"additionalProperties":false,"properties":{"max_depth":{"default":12,"maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"maximum":1000,"minimum":1,"type":"integer"}},"required":["max_seed_matches","max_nodes","max_edges","max_depth","max_functions","max_modules","max_unknowns","page_size"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"frontier":{"items":{"additionalProperties":false,"properties":{"depth":{"maximum":65,"minimum":0,"type":"integer"},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"reason":{"enum":["max-depth","max-edges","max-functions","max-modules","max-nodes","max-seed-matches"],"type":"string"}},"required":["node_id","depth","reason"],"type":"object"},"maxItems":100000,"type":"array"},"status":{"enum":["complete","partial","truncated","unavailable"],"type":"string"}},"required":["status","frontier"],"type":"object"},"direction":{"enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"expected_match_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"function_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"identity":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"role_key":{"maxLength":1024,"minLength":1,"type":"string"},"source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]}},"required":["artifact_sha256","module_path","source_range","role_key"],"type":"object"},"kind":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"maxItems":3000,"type":"array"},"page":{"additionalProperties":false,"properties":{"next_cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"size":{"maximum":1000,"minimum":0,"type":"integer"}},"required":["offset","size","next_cursor"],"type":"object"},"query_id":{"pattern":"^jsrq_[a-f0-9]{64}$","type":"string"},"relations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"relation_id":{"pattern":"^jsrg_relation_[a-f0-9]{64}$","type":"string"},"resolution":{"enum":["resolved","candidate"],"type":"string"},"source_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","resolution","properties","evidence","relation_id","identifier_strategy"],"type":"object"},"maxItems":1000,"type":"array"},"schema_version":{"const":1,"type":"number"},"seed":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","type":"string"},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","type":"string"},"name":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","type":"string"},"value":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","type":"string"},"name":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","type":"string"}},"required":["kind","field"],"type":"object"}]},"seed_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"source_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"source_graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"status":{"enum":["found","no-match","ambiguous","partial","truncated","unsupported"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"relevant_unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_unknowns":{"maximum":10000,"minimum":0,"type":"integer"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_functions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_seed_matches","retained_seed_matches","traversed_nodes","traversed_relations","traversed_functions","traversed_modules","relevant_unknowns","retained_unknowns"],"type":"object"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reason":{"enum":["ambiguous-target","bound-reached","dynamic-call","dynamic-property","eval-or-generated-code","incomplete-module","missing-source","unsupported-syntax"],"type":"string"},"relation_kinds":{"items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":45,"minItems":1,"type":"array"},"unknown_id":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"}},"required":["node_id","family","relation_kinds","reason","detail","candidate_node_ids","evidence","unknown_id"],"type":"object"},"maxItems":100000,"type":"array"}},"required":["schema_version","query_id","source_graph_id","seed","direction","status","seed_node_ids","nodes","relations","unknowns","expected_match_node_ids","summary","coverage","page","applied_limits","accepted_limit_ranges","limitations","source_evidence_id","evidence_links"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Javascript Semantics"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two authenticated JavaScript Application Graph versions supplied as full Evidence or Evidence IDs returned earlier in this session. Uses unique-only exact digest, module source digest, source-map identity, structural fingerprint, and non-module semantic-key tiers. Reports added, removed, changed, ambiguous, and unknown entities plus a bounded changed_from graph without fuzzy or module-ordinal pairing.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"allOf":[{"oneOf":[{"required":["left"]},{"required":["left_evidence_id"]}]},{"oneOf":[{"required":["right"]},{"required":["right_evidence_id"]}]}],"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111"}],"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"type":"object"},"kind":"application","name":"compare_application_versions","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"comparison_id":{"pattern":"^javc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"omitted_candidate_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_comparison_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","left_graph_status","right_graph_status","omitted_comparison_items","omitted_candidate_references","omitted_graph_nodes","omitted_graph_edges","omitted_graph_observations"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"items":{"items":{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-node-identity","exact-content-digest","exact-module-source-digest","source-map-identity","structural-fingerprint","semantic-key","none"],"type":"string"},"candidate_left_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"candidate_right_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","unknown"],"type":"string"},"status":{"enum":["matched","unmatched","ambiguous"],"type":"string"}},"required":["status","basis","confidence","candidate_left_node_ids","candidate_right_node_ids"],"type":"object"},"node_kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"right_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","added","removed","changed","unknown"],"type":"string"}},"required":["item_id","status","node_kind","left_node_id","right_node_id","match","dimensions","evidence_links","limitations"],"type":"object"},"maxItems":50000,"type":"array"},"left":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"matching":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_content_digest":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_module_source_digest":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_node_identity":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"semantic_key":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_map_identity":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural_fingerprint":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["exact_node_identity","exact_content_digest","exact_module_source_digest","source_map_identity","structural_fingerprint","semantic_key","ambiguous","unmatched"],"type":"object"},"right":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","added","removed","changed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","left","right","summary","matching","items","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Application Versions"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare a cryptographically committed HistoricalSourceGraph/v1 with authenticated JavaScript Application Graph Evidence supplied directly or by session Evidence ID. Uses explicit exact-digest, source-map path, current-path, suffix, and basename signals with stable weights. Classifies unchanged, modified, removed, split, merged, duplicated, and unknown; incomplete coverage and ambiguous weak signals never become absence or forced matches.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","reference":{"authority":"historical-reference","entries":[{"classifications":["source"],"kind":"directory","limitations":[],"path":"src","tree_state":"enumerated"},{"classifications":["source"],"content_state":"hashed","kind":"file","language":"TypeScript","limitations":[],"path":"src/main.ts","sha256":"2222222222222222222222222222222222222222222222222222222222222222","size":128}],"exclusions":[],"inventory_state":"complete","languages":["TypeScript"],"limitations":[],"manifests":[],"parse_failures":[],"provenance":{"caller":"contract-example","importer":"rea","importer_version":"1"},"relationships":[],"root_alias":"$REFERENCE_ROOT","root_sha256":"683969414c3e674a368392213c78021322fb39609b0c57f346b22da6464b2110","schema":"HistoricalSourceGraph/v1","vcs":{"dirty":null,"head":null,"kind":"none"}}}],"oneOf":[{"required":["application"]},{"required":["application_evidence_id"]}],"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"limits":{"additionalProperties":false,"default":{"max_application_nodes":20000,"max_candidate_evaluations":1000000,"max_candidate_nodes":100,"max_source_files":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_application_nodes":{"default":20000,"description":"Maximum permitted application nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_candidate_evaluations":{"default":1000000,"description":"Maximum permitted candidate evaluations for this operation.","maximum":10000000,"minimum":1,"type":"integer"},"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_source_files":{"default":10000,"description":"Maximum permitted source files for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"reference":{"additionalProperties":false,"description":"Value for reference.","properties":{"authority":{"const":"historical-reference","description":"Value for authority.","type":"string"},"entries":{"description":"Value for entries.","items":{"oneOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["hashed","redacted-secret","excluded","unreadable","too-large","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for sha256."},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for size."}},"required":["path","classifications","limitations","kind","sha256","size","language","content_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"tree_state":{"description":"Value for tree state.","enum":["enumerated","partial","excluded","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","tree_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"target":{"description":"Value for target.","maxLength":4096,"minLength":1,"type":"string"},"target_state":{"description":"Value for target state.","enum":["internal","external","missing","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","target","target_state"],"type":"object"}]},"maxItems":100000,"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","enum":["configured-secret","symlink-escape","size-limit","inventory-limit","unreadable","caller-excluded"],"type":"string"}},"required":["path","reason"],"type":"object"},"maxItems":100000,"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"maxLength":100,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"manifests":{"description":"Value for manifests.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":10000,"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","maxLength":100,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"maxItems":10000,"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","maxLength":200,"minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","maxLength":100,"minLength":1,"type":"string"},"importer_version":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for importer version."}},"required":["importer","importer_version","caller"],"type":"object"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"from_path":{"description":"Local filesystem path for from.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"description":"Value for kind.","enum":["imports","requires","references","declares-module"],"type":"string"},"parse_state":{"description":"Value for parse state.","enum":["parsed","partial","unknown"],"type":"string"},"resolution":{"description":"Value for resolution.","enum":["internal","external","unresolved","unknown"],"type":"string"},"to":{"description":"Value for to.","maxLength":4096,"minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"maxItems":200000,"type":"array"},"root_alias":{"const":"$REFERENCE_ROOT","description":"Value for root alias.","type":"string"},"root_sha256":{"description":"Exact SHA-256 digest of root.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema":{"const":"HistoricalSourceGraph/v1","description":"Value for schema.","type":"string"},"vcs":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"dirty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for dirty."},"head":{"description":"Value for head.","pattern":"^(?:[a-f0-9]{40}|[a-f0-9]{64})$","type":"string"},"kind":{"const":"git","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"none","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"unknown","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"}]},{"type":"null"}],"description":"Value for vcs."}},"required":["schema","authority","root_alias","root_sha256","inventory_state","entries","relationships","parse_failures","exclusions","languages","manifests","vcs","provenance","limitations"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["reference"],"type":"object"},"kind":"application","name":"compare_source_to_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"application":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"comparison_id":{"pattern":"^stbc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"application_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"candidate_evaluations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_application_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_candidate_evaluations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_candidate_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_source_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_unmapped_current_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reference_inventory_state":{"enum":["complete","partial","unknown"],"type":"string"},"retained_application_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_source_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","reference_inventory_state","application_graph_status","retained_source_files","omitted_source_files","retained_application_nodes","omitted_application_nodes","candidate_evaluations","omitted_candidate_evaluations","omitted_candidate_references","omitted_unmapped_current_nodes"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"items":{"items":{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["exact","high","medium","low"],"type":"string"},"current_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"current_node_kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"score":{"maximum":300,"minimum":1,"type":"integer"},"signals":{"items":{"additionalProperties":false,"properties":{"current_values":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":64,"minItems":1,"type":"array"},"kind":{"enum":["exact-source-digest","source-map-original-path","current-path-exact","current-path-suffix","basename-match","language-extension"],"type":"string"},"source_value":{"maxLength":4096,"minLength":1,"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["kind","weight","source_value","current_values"],"type":"object"},"maxItems":6,"minItems":1,"type":"array"}},"required":["current_node_id","current_node_kind","score","confidence","signals"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","unknown"],"type":"string"},"current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"mapping_id":{"pattern":"^stbc_item_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"source_path":{"maxLength":4096,"minLength":1,"type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","modified","removed","split","merged","duplicated","unknown"],"type":"string"}},"required":["mapping_id","source_path","source_sha256","source_language","status","confidence","current_node_ids","candidates","omitted_candidates","limitations"],"type":"object"},"maxItems":100000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"reference":{"additionalProperties":false,"properties":{"inventory_state":{"enum":["complete","partial","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["root_sha256","inventory_state"],"type":"object"},"schema_version":{"const":1,"type":"number"},"scoring":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea-source-to-bundle-signals/v1","type":"string"},"minimum_candidate_score":{"const":20,"type":"number"},"weights":{"items":{"additionalProperties":false,"properties":{"signal":{"enum":["exact-source-digest","source-map-original-path","current-path-exact","current-path-suffix","basename-match","language-extension"],"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["signal","weight"],"type":"object"},"type":"array"}},"required":["algorithm","minimum_candidate_score","weights"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"duplicated":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"merged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modified":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"split":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","modified","removed","split","merged","duplicated","unknown"],"type":"object"},"unmapped_current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"}},"required":["schema_version","comparison_id","reference","application","scoring","summary","items","unmapped_current_node_ids","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Source To Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare bounded static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph, supplied as full Evidence or session Evidence IDs. Variants pair only by reciprocal unique literal discriminants; dynamic values, incomplete properties, and ambiguous variants remain unknown. Reports JSON Pointer changes and recommends controlled replay separately without executing JavaScript.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"allOf":[{"oneOf":[{"required":["left"]},{"required":["left_evidence_id"]}]},{"oneOf":[{"required":["right"]},{"required":["right_evidence_id"]}]}],"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","left_export_name":"default","left_module_path":"parser.mjs","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111","right_export_name":"default","right_module_path":"parser.mjs"}],"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name"],"type":"object"},"kind":"application","name":"compare_javascript_export_shapes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change_id":{"pattern":"^jesc_change_[a-f0-9]{64}$","type":"string"},"discriminant":{"anyOf":[{"additionalProperties":false,"properties":{"path":{"maxLength":4096,"type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["path","value"],"type":"object"},{"type":"null"}]},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"left":{"oneOf":[{"additionalProperties":false,"properties":{"availability":{"const":"absent","type":"string"}},"required":["availability"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"literal","type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":32,"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["availability","reason"],"type":"object"}]},"left_source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"path":{"maxLength":4096,"type":"string"},"right":{"oneOf":[{"additionalProperties":false,"properties":{"availability":{"const":"absent","type":"string"}},"required":["availability"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"literal","type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":32,"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["availability","reason"],"type":"object"}]},"right_source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]},"status":{"enum":["added","removed","changed","unknown"],"type":"string"}},"required":["change_id","status","path","discriminant","left","right","left_source_range","right_source_range","evidence_links","limitations"],"type":"object"},"maxItems":10000,"type":"array"},"comparison_id":{"pattern":"^jesc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"left_omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left_omitted_property_coverage":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left_source_omitted_variants":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_left_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_right_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"right_omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_omitted_property_coverage":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_source_omitted_variants":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"},"unpaired_left_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_right_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","left_graph_status","right_graph_status","paired_variants","unpaired_left_variants","unpaired_right_variants","omitted_left_variants","omitted_right_variants","left_source_omitted_variants","right_source_omitted_variants","left_omitted_fields","right_omitted_fields","left_omitted_property_coverage","right_omitted_property_coverage","omitted_candidates","omitted_changes"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"left":{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["selected","missing","ambiguous","unavailable"],"type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","status","selected_node_id","candidates","omitted_candidates"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"right":{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["selected","missing","ambiguous","unavailable"],"type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","status","selected_node_id","candidates","omitted_candidates"],"type":"object"},"runtime_validation":{"additionalProperties":false,"properties":{"automatically_started":{"const":false,"type":"boolean"},"recommended_tool":{"const":"run_controlled_replay","type":"string"},"required_for":{"const":"runtime-semantics","type":"string"}},"required":["recommended_tool","automatically_started","required_for"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["added","removed","changed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","left","right","summary","changes","coverage","evidence_links","limitations","runtime_validation"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Javascript Export Shapes"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Plan or execute a content-bound extracted-module JavaScript replay inside the Linux Bubblewrap, seccomp, and cgroup boundary. Execution requires approved: true and the exact plan digest. Supports deterministic boundary cases and optional left/right differential comparison; observations have controlled-replay authority and do not claim real application runtime behavior.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":false,"cases":[{"arguments":[""],"case_id":"empty"}],"determinism":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"left":{"entry_alias":"parser","entry_export":"default","modules":[{"alias":"parser","dependencies":{},"format":"esm","path":"/approved/parser.mjs","role":"module"}]},"limits":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"mode":"plan"}],"properties":{"approved":{"default":false,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["plan","execute"],"type":"string"},"plan_digest":{"description":"Value for plan digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["mode","left"],"type":"object"},"kind":"application","name":"run_controlled_replay","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["return","exception","serialization_error","denied","timeout","oom","crash","cancelled","protocol_error"],"type":"string"},"output_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"truncated":{"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","outcome","input_sha256","output_sha256","truncated"],"type":"object"},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},{"type":"null"}],"description":"Evidence v2 record produced by this operation."},"phase":{"description":"Current plan or execution phase of the operation.","enum":["plan","execute"],"type":"string"},"plan":{"anyOf":[{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},{"type":"null"}],"description":"Content-bound execution plan and its approval commitment."},"source_evidence":{"description":"Evidence records supporting the prepared source transformation.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["return","exception","serialization_error","denied","timeout","oom","crash","cancelled","protocol_error"],"type":"string"},"output_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"truncated":{"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","outcome","input_sha256","output_sha256","truncated"],"type":"object"},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},"requiresSession":false,"title":"Run Controlled Replay"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Prepare a hash-bound Node/JavaScript characterization plan and deterministic reversible export transformation without executing target code. The exact source, selected byte range, runtime closure, sandbox profile, cases, and limits are committed for separate execution approval.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"expected_effect":"pure","instrumentation":{"artifact_path":"/approved/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"preparation_approved":true,"replay":{"approved":false,"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/approved/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}],"properties":{"expected_effect":{"description":"Expected effect used to reject stale or mismatched input.","enum":["pure","observation-only"],"type":"string"},"instrumentation":{"additionalProperties":false,"description":"Value for instrumentation.","properties":{"artifact_path":{"description":"Local filesystem path for artifact.","maxLength":4096,"minLength":1,"type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"selection":{"additionalProperties":false,"description":"Value for selection.","properties":{"byte_end":{"description":"Value for byte end.","maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"description":"Value for byte start.","maximum":9007199254740991,"minimum":0,"type":"integer"},"export_name":{"description":"Value for export name.","pattern":"^[A-Za-z_$][A-Za-z0-9_$]{0,199}$","type":"string"},"selected_sha256":{"description":"Exact SHA-256 digest of selected.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256","export_name"],"type":"object"}},"required":["artifact_path","artifact_sha256","selection"],"type":"object"},"preparation_approved":{"const":true,"description":"Explicit operator approval for preparation.","type":"boolean"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"approved":{"default":false,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["plan","execute"],"type":"string"},"plan_digest":{"description":"Value for plan digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["mode","left"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","maxLength":200,"minLength":1,"type":"string"}},"required":["preparation_approved","selected_alias","expected_effect","instrumentation","replay"],"type":"object"},"kind":"application","name":"prepare_node_characterization","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"phase":{"const":"preparation","description":"Current plan or execution phase of the operation.","type":"string"},"plan":{"additionalProperties":false,"description":"Content-bound execution plan and its approval commitment.","properties":{"allowed_boundaries":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"authority":{"additionalProperties":false,"properties":{"execution_approved":{"const":false,"type":"boolean"},"network":{"enum":["none","loopback"],"type":"string"},"preparation_approved":{"const":true,"type":"boolean"},"provider_owned_process_only":{"const":true,"type":"boolean"}},"required":["preparation_approved","execution_approved","network","provider_owned_process_only"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"export_name":{"maxLength":1000,"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selector_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["callable_id","module_id","export_name","semantic_evidence_id","selector_sha256"],"type":"object"},"determinism":{"additionalProperties":false,"properties":{"clock":{"enum":["fixed","real"],"type":"string"},"identifiers":{"enum":["deterministic","runtime"],"type":"string"},"randomness":{"enum":["seeded","system"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["clock","randomness","identifiers","seed"],"type":"object"},"expected_effect":{"enum":["pure","bounded-effects","observation-only"],"type":"string"},"isolated_home":{"maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":10000,"minimum":1,"type":"integer"},"max_files":{"maximum":100000,"minimum":0,"type":"integer"},"max_handles":{"maximum":100000,"minimum":0,"type":"integer"},"max_processes":{"maximum":1000,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"}},"required":["max_calls","max_processes","max_files","max_bytes","max_handles","timeout_ms","idle_timeout_ms"],"type":"object"},"plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"preparation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime":{"additionalProperties":false,"properties":{"executable_path":{"maxLength":4096,"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"maxLength":100,"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"version":{"maxLength":500,"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"working_directory":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["schema_version","plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism","authority"],"type":"object"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["return","exception","serialization_error","denied","timeout","oom","crash","cancelled","protocol_error"],"type":"string"},"output_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"truncated":{"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","outcome","input_sha256","output_sha256","truncated"],"type":"object"},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},{"type":"null"}]},"phase":{"enum":["plan","execute"],"type":"string"},"plan":{"anyOf":[{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},{"type":"null"}]},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["return","exception","serialization_error","denied","timeout","oom","crash","cancelled","protocol_error"],"type":"string"},"output_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"truncated":{"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","outcome","input_sha256","output_sha256","truncated"],"type":"object"},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"transformation":{"additionalProperties":false,"description":"Value for transformation.","properties":{"artifact_path":{"maxLength":4096,"minLength":1,"type":"string"},"inserted_ranges":{"items":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inserted_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"purpose":{"enum":["factory-prefix","export-binding","factory-suffix"],"type":"string"}},"required":["byte_start","byte_end","inserted_sha256","purpose"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"instrumented_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"instrumented_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"commonjs-factory-export-v1","type":"string"},"original_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_format":{"const":"commonjs-factory","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_range":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"selected_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256"],"type":"object"},"source_map":{"const":null,"type":"null"}},"required":["schema_version","kind","artifact_path","original_sha256","original_byte_length","instrumented_sha256","instrumented_byte_length","selected_range","inserted_ranges","output_format","source_map"],"type":"object"},"transformation_evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}],"description":"Value for transformation evidence."}},"required":["schema_version","phase","plan","transformation","transformation_evidence","replay"],"type":"object"},"requiresSession":false,"title":"Prepare Node Characterization"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Recompute and execute one separately approved exact Node characterization plan in the owned controlled-replay boundary. Returns transformation, replay, cleanup, and provider-neutral characterization Evidence v2; stale plans fail before execution.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved_plan_sha256":"0000000000000000000000000000000000000000000000000000000000000000","execution_approved":true,"preparation":{"expected_effect":"pure","instrumentation":{"artifact_path":"/approved/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"preparation_approved":true,"replay":{"approved":false,"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/approved/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}}],"properties":{"approved_plan_sha256":{"description":"Exact SHA-256 digest of approved plan.","pattern":"^[a-f0-9]{64}$","type":"string"},"execution_approved":{"const":true,"description":"Explicit operator approval for execution.","type":"boolean"},"preparation":{"additionalProperties":false,"description":"Value for preparation.","properties":{"expected_effect":{"description":"Expected effect used to reject stale or mismatched input.","enum":["pure","observation-only"],"type":"string"},"instrumentation":{"additionalProperties":false,"description":"Value for instrumentation.","properties":{"artifact_path":{"description":"Local filesystem path for artifact.","maxLength":4096,"minLength":1,"type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"selection":{"additionalProperties":false,"description":"Value for selection.","properties":{"byte_end":{"description":"Value for byte end.","maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"description":"Value for byte start.","maximum":9007199254740991,"minimum":0,"type":"integer"},"export_name":{"description":"Value for export name.","pattern":"^[A-Za-z_$][A-Za-z0-9_$]{0,199}$","type":"string"},"selected_sha256":{"description":"Exact SHA-256 digest of selected.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256","export_name"],"type":"object"}},"required":["artifact_path","artifact_sha256","selection"],"type":"object"},"preparation_approved":{"const":true,"description":"Explicit operator approval for preparation.","type":"boolean"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"approved":{"default":false,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["plan","execute"],"type":"string"},"plan_digest":{"description":"Value for plan digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["mode","left"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","maxLength":200,"minLength":1,"type":"string"}},"required":["preparation_approved","selected_alias","expected_effect","instrumentation","replay"],"type":"object"}},"required":["execution_approved","approved_plan_sha256","preparation"],"type":"object"},"kind":"application","name":"execute_node_characterization","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}],"description":"Evidence v2 record produced by this operation."},"phase":{"const":"execution","description":"Current plan or execution phase of the operation.","type":"string"},"plan":{"additionalProperties":false,"description":"Content-bound execution plan and its approval commitment.","properties":{"allowed_boundaries":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"authority":{"additionalProperties":false,"properties":{"execution_approved":{"const":false,"type":"boolean"},"network":{"enum":["none","loopback"],"type":"string"},"preparation_approved":{"const":true,"type":"boolean"},"provider_owned_process_only":{"const":true,"type":"boolean"}},"required":["preparation_approved","execution_approved","network","provider_owned_process_only"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"export_name":{"maxLength":1000,"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selector_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["callable_id","module_id","export_name","semantic_evidence_id","selector_sha256"],"type":"object"},"determinism":{"additionalProperties":false,"properties":{"clock":{"enum":["fixed","real"],"type":"string"},"identifiers":{"enum":["deterministic","runtime"],"type":"string"},"randomness":{"enum":["seeded","system"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["clock","randomness","identifiers","seed"],"type":"object"},"expected_effect":{"enum":["pure","bounded-effects","observation-only"],"type":"string"},"isolated_home":{"maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":10000,"minimum":1,"type":"integer"},"max_files":{"maximum":100000,"minimum":0,"type":"integer"},"max_handles":{"maximum":100000,"minimum":0,"type":"integer"},"max_processes":{"maximum":1000,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"}},"required":["max_calls","max_processes","max_files","max_bytes","max_handles","timeout_ms","idle_timeout_ms"],"type":"object"},"plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"preparation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime":{"additionalProperties":false,"properties":{"executable_path":{"maxLength":4096,"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"maxLength":100,"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"version":{"maxLength":500,"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"working_directory":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["schema_version","plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism","authority"],"type":"object"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["return","exception","serialization_error","denied","timeout","oom","crash","cancelled","protocol_error"],"type":"string"},"output_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"truncated":{"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","outcome","input_sha256","output_sha256","truncated"],"type":"object"},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},{"type":"null"}]},"phase":{"enum":["plan","execute"],"type":"string"},"plan":{"anyOf":[{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},{"type":"null"}]},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["return","exception","serialization_error","denied","timeout","oom","crash","cancelled","protocol_error"],"type":"string"},"output_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"truncated":{"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","outcome","input_sha256","output_sha256","truncated"],"type":"object"},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"transformation":{"additionalProperties":false,"description":"Value for transformation.","properties":{"artifact_path":{"maxLength":4096,"minLength":1,"type":"string"},"inserted_ranges":{"items":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inserted_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"purpose":{"enum":["factory-prefix","export-binding","factory-suffix"],"type":"string"}},"required":["byte_start","byte_end","inserted_sha256","purpose"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"instrumented_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"instrumented_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"commonjs-factory-export-v1","type":"string"},"original_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_format":{"const":"commonjs-factory","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_range":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"selected_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256"],"type":"object"},"source_map":{"const":null,"type":"null"}},"required":["schema_version","kind","artifact_path","original_sha256","original_byte_length","instrumented_sha256","instrumented_byte_length","selected_range","inserted_ranges","output_format","source_map"],"type":"object"},"transformation_evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}],"description":"Value for transformation evidence."}},"required":["schema_version","phase","plan","transformation","transformation_evidence","evidence","replay"],"type":"object"},"requiresSession":false,"title":"Execute Node Characterization"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Generate one deterministic page of a ReconstructionObligationLedger/v1 from an authenticated Evidence v2 bundle, reviewed obligations, and an explicit reconstruction manifest. Static candidates remain candidates; duplicate ownership, missing original or reconstruction cases, missing parser/type, weak verifier authority, unenumerated claims, contradictions, dependencies, and residual unknowns fail closed. Every page carries the same full-ledger closure digest and typed per-obligation diagnostics.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"limits":{"max_obligations":1000},"manifest":{"bindings":[],"contradictions":[],"schema_version":1},"page":{"limit":50,"offset":0},"reviewed_obligations":[]}],"properties":{"evidence_bundle":{"additionalProperties":false,"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"additionalProperties":false,"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"additionalProperties":false,"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"additionalProperties":false,"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"limits":{"additionalProperties":false,"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_obligations":{"description":"Maximum permitted obligations for this operation.","maximum":10000,"minimum":1,"type":"integer"}},"required":["max_obligations"],"type":"object"},"manifest":{"additionalProperties":false,"description":"Value for manifest.","properties":{"bindings":{"description":"Value for bindings.","items":{"additionalProperties":false,"properties":{"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"description":"Value for case kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"description":"Value for domain type.","maxLength":4096,"minLength":1,"type":"string"},"parser":{"description":"Value for parser.","maxLength":4096,"minLength":1,"type":"string"},"schema":{"description":"Value for schema.","maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}],"description":"Value for parser type."},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"description":"Value for command.","maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"description":"Value for nondeterminism.","properties":{"mode":{"description":"Operation mode that selects the requested behavior.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"description":"Value for specification.","maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence v2 identifier for the result observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}],"description":"Value for verifier."}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},"maxItems":10000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","bindings","contradictions"],"type":"object"},"page":{"additionalProperties":false,"description":"Value for page.","properties":{"limit":{"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"description":"Zero-based index of the first result to return.","maximum":10000,"minimum":0,"type":"integer"}},"required":["offset","limit"],"type":"object"},"reviewed_obligations":{"description":"Value for reviewed obligations.","items":{"additionalProperties":false,"properties":{"application_layer":{"description":"Value for application layer.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"dependency_obligation_ids":{"description":"Value for dependency obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"disposition":{"description":"Value for disposition.","enum":["active","blocked","out-of-scope"],"type":"string"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"description":"Value for obligation version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"required":{"description":"Value for required.","type":"boolean"},"required_case_kinds":{"description":"Value for required case kinds.","items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"description":"Value for required fixture authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"description":"Value for required next evidence.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"description":"Value for required original authority.","enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"description":"Value for required verifier authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"description":"Value for requires parser type.","type":"boolean"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"review_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the review observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for application node id."},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of artifact."},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for semantic node id."}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","application_layer","family","target","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","disposition","review_evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"}},"required":["evidence_bundle","reviewed_obligations","manifest","limits","page"],"type":"object"},"kind":"application","name":"build_reconstruction_obligation_ledger","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"closure_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"max_obligations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"omitted_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","max_obligations"],"type":"object"},"dependency_graph":{"items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"items":{"additionalProperties":false,"properties":{"application_layer":{"enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"},"state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"maxLength":4096,"minLength":1,"type":"string"},"parser":{"maxLength":4096,"minLength":1,"type":"string"},"schema":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}]},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"properties":{"mode":{"enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}]}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}]},"dependency_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"enum":["generated","reviewed"],"type":"string"},"required":{"type":"boolean"},"required_case_kinds":{"items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"type":"boolean"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"location":{"maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":100,"type":"array"},"ownership_graph":{"items":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"page":{"additionalProperties":false,"properties":{"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offset","limit","total","returned","next_offset"],"type":"object"},"reports":{"additionalProperties":false,"properties":{"contradicted_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","type":"string"},"schema_version":{"const":1,"type":"number"},"status":{"enum":["ready","open","failed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"by_application_layer":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_evidence_authority":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_status":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"required":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_open":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","required","verified","required_open","by_status","by_application_layer","by_evidence_authority"],"type":"object"}},"required":["schema","schema_version","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","evidence_links","limitations","page","obligations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Build Reconstruction Obligation Ledger"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate the fixed nine-stage public reconstruction journey into a deterministic ReconstructionReadinessReport/v1. Exact capability limits, provider routing, CLI/MCP status parity, bounded authority, partial-order comparison, contradictions, obligation closure, cleanup, and replay digests fail closed. Aggregate pass is emitted only when every required stage and check passes with attributable Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"allOf":[{"properties":{"stages":{"allOf":[{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"discover-classify","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1},{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"diagnose-environment","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1},{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"acquire-authority","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1},{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"static-analysis","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1},{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"reactive-scenarios","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1},{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"compare-authority-candidate","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1},{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"preserve-contradictions","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1},{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"verify-reconstruction-closure","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1},{"contains":{"description":"One reconstruction-readiness stage","properties":{"stage_id":{"const":"export-replay","description":"Readiness stage identifier"}},"required":["stage_id"],"type":"object"},"maxContains":1,"minContains":1}],"description":"Complete reconstruction-readiness stage set"}}}],"examples":[{"capabilities":[{"authority_scopes":["investigation-input"],"available":true,"bounded":true,"capability_id":"analyze-javascript-application","limits":[{"name":"max-ast-nodes","unit":"count","value":2000000}],"side_effect":"reads-target","unavailable_reason":null}],"cleanup":[{"cancelled":true,"diagnostic_evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"owned_resources_remaining":0,"run_id":"run.cancelled"}],"client":{"name":"synthetic-mcp-client","negotiated_capabilities":["elicitation","progress","resources"],"version":"1"},"closure_history":[{"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","newly_verified_obligation_ids":[],"required_open":1,"sequence":0,"status":"open"},{"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","newly_verified_obligation_ids":["obl.readiness"],"required_open":0,"sequence":1,"status":"ready"}],"comparisons":[{"comparison_id":"comparison.concurrent","concurrent":true,"contradiction_ids":[],"deliberate_divergence_ref":null,"divergence_refs":[],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"partial-order","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"equivalent"},{"comparison_id":"comparison.divergence","concurrent":true,"contradiction_ids":[],"deliberate_divergence_ref":"/events/primary","divergence_refs":["/events/primary"],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"finite-traces","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"different"},{"comparison_id":"comparison.contradicted","concurrent":false,"contradiction_ids":["contradiction.artifact"],"deliberate_divergence_ref":null,"divergence_refs":[],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"finite-traces","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"unknown"}],"contradictions":[{"affected_comparison_ids":["comparison.contradicted"],"contradiction_id":"contradiction.artifact","declared_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91"],"observed_sha256":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","policy":"record-and-continue"}],"delegation_checks":[{"candidate_id":"candidate.reconstructed","delegates_to_authority":false,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"]}],"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"}],"records":[{"authority":"controlled-replay","confidence":"observed","environment":null,"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"passed":true,"variant":"authority"},"operation":"run_reconstruction_readiness_fixture","parameters":{"variant":"authority"},"predicate_type":"rea.reconstruction-readiness-fixture/v1","provider":{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"},"raw_result":null,"schema_version":2,"subject":null},{"authority":"controlled-replay","confidence":"observed","environment":null,"evidence_id":"ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"passed":true,"variant":"contradiction"},"operation":"run_reconstruction_readiness_fixture","parameters":{"variant":"contradiction"},"predicate_type":"rea.reconstruction-readiness-fixture/v1","provider":{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"scenarios":[{"authority":"controlled-replay","evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","operation":"run_reconstruction_readiness_fixture"},{"authority":"controlled-replay","evidence_id":"ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91","operation":"run_reconstruction_readiness_fixture"}],"unknowns":[]},"fixtures":[{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.native"],"environment_id":"environment.synthetic","fixture_id":"fixture.native","kind":"native"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.javascript-cli"],"environment_id":"environment.synthetic","fixture_id":"fixture.javascript-cli","kind":"javascript-cli"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.electron"],"environment_id":"environment.synthetic","fixture_id":"fixture.electron","kind":"electron"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.incomplete-reconstruction"],"environment_id":"environment.synthetic","fixture_id":"fixture.incomplete-reconstruction","kind":"incomplete-reconstruction"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.broken-runtime"],"environment_id":"environment.synthetic","fixture_id":"fixture.broken-runtime","kind":"broken-runtime"}],"grants":[{"decision":"denied","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"grant_id":"grant.denied","launched_process":false,"scope":"process-capture"},{"decision":"granted","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"grant_id":"grant.session","launched_process":true,"scope":"process-capture"}],"identity":{"catalog_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","cli_version":"2.4.0","providers":[{"digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","provider_id":"javascript-application","reason_code":null,"state":"available","version":"1"},{"digest":null,"provider_id":"broken-runtime-probe","reason_code":"host-runtime-linker-failure","state":"broken-host","version":null}],"server_version":"2.4.0","skill_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","versions":[{"component":"rea-cli","digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","remediation":null,"state":"current","version":"2.4.0"},{"component":"rea-server","digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","remediation":"Restart the connected MCP server.","state":"stale","version":"2.3.0"},{"component":"rea-server","digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","remediation":null,"state":"current","version":"2.4.0"}]},"obligation_ledger":{"closure_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","coverage":{"max_obligations":100,"omitted_count":0,"status":"complete","truncated":false},"dependency_graph":[],"evidence_links":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_id":"rol_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","limitations":[],"obligations":[{"application_layer":"process","authority_references":[{"authority":"controlled-replay","evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","location":"/fixture","state":"observed"}],"binding":{"fixtures":[{"authority":"packaged-process","case_kind":"positive","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.positive"},{"authority":"packaged-process","case_kind":"negative","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.negative"},{"authority":"packaged-process","case_kind":"malformed","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.malformed"},{"authority":"packaged-process","case_kind":"cancellation","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.cancellation"},{"authority":"packaged-process","case_kind":"teardown","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.teardown"}],"obligation_id":"obl.readiness","original_cases":[{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"positive","location":"/original/positive"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"negative","location":"/original/negative"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"malformed","location":"/original/malformed"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"cancellation","location":"/original/cancellation"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"teardown","location":"/original/teardown"}],"owner":{"module_path":"src/readiness.ts","owner_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","symbol":"runReadiness"},"parser_type":null,"verifier":{"authority":"packaged-process","claim_id":"claim.readiness","command":"npm run verify:readiness","enumerated_obligation_ids":["obl.readiness"],"nondeterminism":{"mode":"partial-order","specification":"Startup precedes teardown."},"result_evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","status":"pass","verifier_id":"verifier.readiness"}},"dependency_obligation_ids":[],"diagnostics":[],"family":"packaged-process-lifecycle","obligation_id":"obl.readiness","obligation_version":1,"observed_cases":[{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"positive","location":"/original/positive"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"negative","location":"/original/negative"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"malformed","location":"/original/malformed"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"cancellation","location":"/original/cancellation"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"teardown","location":"/original/teardown"}],"origin":"reviewed","required":true,"required_case_kinds":["positive","negative","malformed","cancellation","teardown"],"required_fixture_authority":"packaged-process","required_next_evidence":[],"required_original_authority":"process","required_verifier_authority":"packaged-process","requires_parser_type":false,"residual_unknown_ids":[],"source_state":"observed","status":"verified","target":{"application_node_id":null,"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","location":"/fixture","semantic_node_id":null},"title":"Preserve the packaged readiness fixture lifecycle","unavailable_authority":[]}],"ownership_graph":[{"module_path":"src/readiness.ts","obligation_id":"obl.readiness","symbol":"runReadiness"}],"reports":{"contradicted_obligation_ids":[],"missing_owner_obligation_ids":[],"missing_verifier_obligation_ids":[],"residual_unknown_ids":[]},"schema":"ReconstructionObligationLedger","schema_version":1,"status":"ready","summary":{"by_application_layer":[{"count":0,"key":"cli"},{"count":0,"key":"protocol"},{"count":0,"key":"electron"},{"count":0,"key":"persistence"},{"count":1,"key":"process"},{"count":0,"key":"runtime"},{"count":0,"key":"packaging"},{"count":0,"key":"native-abi"},{"count":0,"key":"application"},{"count":0,"key":"other"}],"by_evidence_authority":[{"count":0,"key":"candidate"},{"count":1,"key":"observed"},{"count":0,"key":"reviewed"},{"count":0,"key":"unknown"}],"by_status":[{"count":0,"key":"unowned"},{"count":0,"key":"characterized"},{"count":0,"key":"implemented"},{"count":1,"key":"verified"},{"count":0,"key":"contradicted"},{"count":0,"key":"blocked"},{"count":0,"key":"out-of-scope"},{"count":0,"key":"unknown"}],"required":1,"required_open":0,"total":1,"verified":1}},"operation_outcomes":[{"call_kind":"valid","cli_exit_code":0,"error_code":null,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":true,"mcp_status":null,"operation":"inspect-artifact","recovered":false,"sequence":0,"surface":"cli"},{"call_kind":"valid","cli_exit_code":null,"error_code":null,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":true,"mcp_status":"success","operation":"inspect-artifact","recovered":false,"sequence":1,"surface":"mcp"},{"call_kind":"permission","cli_exit_code":2,"error_code":"permission-required","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":false,"mcp_status":null,"operation":"capture-process","recovered":true,"sequence":2,"surface":"cli"},{"call_kind":"permission","cli_exit_code":null,"error_code":"permission-required","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":false,"mcp_status":"non-success","operation":"capture-process","recovered":true,"sequence":3,"surface":"mcp"}],"replay":{"deterministic":true,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_source_digest":null,"stale_input_detected":true,"tamper_detected":true},"schema_version":1,"stages":[{"capability_issue":null,"checks":[{"check_id":"target-free-start","detail":"Synthetic conformance proved target-free-start.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"artifact-inventory","detail":"Synthetic conformance proved artifact-inventory.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"compatible-workflow-selected","detail":"Synthetic conformance proved compatible-workflow-selected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"limits-visible","detail":"Synthetic conformance proved limits-visible.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"discover-classify","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"broken-runtime-distinguished","detail":"Synthetic conformance proved broken-runtime-distinguished.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"version-skew-detected","detail":"Synthetic conformance proved version-skew-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"revision-changed-after-recovery","detail":"Synthetic conformance proved revision-changed-after-recovery.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"diagnose-environment","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"missing-scope-reported","detail":"Synthetic conformance proved missing-scope-reported.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"narrow-grant-resumed","detail":"Synthetic conformance proved narrow-grant-resumed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"expansion-reprompted","detail":"Synthetic conformance proved expansion-reprompted.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"denial-launched-nothing","detail":"Synthetic conformance proved denial-launched-nothing.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"acquire-authority","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"native-routed","detail":"Synthetic conformance proved native-routed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"javascript-routed","detail":"Synthetic conformance proved javascript-routed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"unknowns-preserved","detail":"Synthetic conformance proved unknowns-preserved.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"static-analysis","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"predicate-driven","detail":"Synthetic conformance proved predicate-driven.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"descendant-settled","detail":"Synthetic conformance proved descendant-settled.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"electron-correlated","detail":"Synthetic conformance proved electron-correlated.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"cancel-cleanup-preserved-evidence","detail":"Synthetic conformance proved cancel-cleanup-preserved-evidence.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"reactive-scenarios","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"partial-order-accepted","detail":"Synthetic conformance proved partial-order-accepted.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"divergence-localized","detail":"Synthetic conformance proved divergence-localized.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"incomplete-is-unknown","detail":"Synthetic conformance proved incomplete-is-unknown.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"compare-authority-candidate","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"record-and-continue","detail":"Synthetic conformance proved record-and-continue.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"affected-equivalence-blocked","detail":"Synthetic conformance proved affected-equivalence-blocked.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"unaffected-comparison-continued","detail":"Synthetic conformance proved unaffected-comparison-continued.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"preserve-contradictions","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"incomplete-detected","detail":"Synthetic conformance proved incomplete-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"incremental-verifier-closure","detail":"Synthetic conformance proved incremental-verifier-closure.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"delegation-rejected","detail":"Synthetic conformance proved delegation-rejected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"verify-reconstruction-closure","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"cli-mcp-parity","detail":"Synthetic conformance proved cli-mcp-parity.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"failure-status-parity","detail":"Synthetic conformance proved failure-status-parity.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"deterministic-replay","detail":"Synthetic conformance proved deterministic-replay.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"tamper-detected","detail":"Synthetic conformance proved tamper-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"stale-input-detected","detail":"Synthetic conformance proved stale-input-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"export-replay","status":"pass"}],"workflow_candidates":[{"compatibility":"compatible","fixture_id":"fixture.native","invoked":true,"provider_id":"provider.native","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.native"},{"compatibility":"compatible","fixture_id":"fixture.javascript-cli","invoked":true,"provider_id":"provider.javascript-cli","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.javascript-cli"},{"compatibility":"compatible","fixture_id":"fixture.electron","invoked":true,"provider_id":"provider.electron","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.electron"},{"compatibility":"compatible","fixture_id":"fixture.incomplete-reconstruction","invoked":true,"provider_id":"provider.incomplete-reconstruction","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.incomplete-reconstruction"},{"compatibility":"compatible","fixture_id":"fixture.broken-runtime","invoked":true,"provider_id":null,"reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.broken-runtime"}]}],"properties":{"capabilities":{"description":"Value for capabilities.","items":{"additionalProperties":false,"properties":{"authority_scopes":{"description":"Value for authority scopes.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"available":{"description":"Value for available.","type":"boolean"},"bounded":{"description":"Value for bounded.","type":"boolean"},"capability_id":{"description":"Value for capability id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"limits":{"description":"Bounded resource-consumption and result-size limits for this operation.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"unit":{"description":"Value for unit.","enum":["count","bytes","milliseconds","ratio"],"type":"string"},"value":{"description":"Value for value.","minimum":0,"type":"number"}},"required":["name","value","unit"],"type":"object"},"maxItems":100,"type":"array"},"side_effect":{"description":"Value for side effect.","enum":["none","reads-target","launches-process","writes-workspace","network-observation"],"type":"string"},"unavailable_reason":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for unavailable reason."}},"required":["capability_id","available","bounded","side_effect","authority_scopes","limits","unavailable_reason"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"cleanup":{"description":"Value for cleanup.","items":{"additionalProperties":false,"properties":{"cancelled":{"description":"Value for cancelled.","type":"boolean"},"diagnostic_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the diagnostic observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"owned_resources_remaining":{"description":"Value for owned resources remaining.","maximum":9007199254740991,"minimum":0,"type":"integer"},"run_id":{"description":"Value for run id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["run_id","cancelled","owned_resources_remaining","diagnostic_evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"client":{"additionalProperties":false,"description":"Value for client.","properties":{"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"negotiated_capabilities":{"description":"Value for negotiated capabilities.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"version":{"description":"Value for version.","maxLength":4096,"minLength":1,"type":"string"}},"required":["name","version","negotiated_capabilities"],"type":"object"},"closure_history":{"description":"Value for closure history.","items":{"additionalProperties":false,"properties":{"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"ledger_digest":{"description":"Value for ledger digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"newly_verified_obligation_ids":{"description":"Value for newly verified obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"required_open":{"description":"Value for required open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["ready","open","failed","unknown"],"type":"string"}},"required":["sequence","ledger_digest","status","required_open","newly_verified_obligation_ids","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":2,"type":"array"},"comparisons":{"description":"Validated comparison Evidence records to aggregate.","items":{"additionalProperties":false,"properties":{"comparison_id":{"description":"Value for comparison id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"concurrent":{"description":"Value for concurrent.","type":"boolean"},"contradiction_ids":{"description":"Value for contradiction ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"deliberate_divergence_ref":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for deliberate divergence ref."},"divergence_refs":{"description":"Value for divergence refs.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schedule_semantics":{"description":"Value for schedule semantics.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"},"unavailable_authority":{"description":"Value for unavailable authority.","type":"boolean"},"unstable":{"description":"Value for unstable.","type":"boolean"},"verdict":{"description":"Value for verdict.","enum":["equivalent","different","unknown"],"type":"string"}},"required":["comparison_id","verdict","schedule_semantics","concurrent","truncated","unavailable_authority","unstable","deliberate_divergence_ref","divergence_refs","contradiction_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"affected_comparison_ids":{"description":"Value for affected comparison ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"contradiction_id":{"description":"Value for contradiction id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"declared_sha256":{"description":"Exact SHA-256 digest of declared.","pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"observed_sha256":{"description":"Exact SHA-256 digest of observed.","pattern":"^[a-f0-9]{64}$","type":"string"},"policy":{"const":"record-and-continue","description":"Value for policy.","type":"string"}},"required":["contradiction_id","declared_sha256","observed_sha256","policy","affected_comparison_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"delegation_checks":{"description":"Value for delegation checks.","items":{"additionalProperties":false,"properties":{"candidate_id":{"description":"Value for candidate id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"delegates_to_authority":{"description":"Value for delegates to authority.","type":"boolean"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"}},"required":["candidate_id","delegates_to_authority","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_bundle":{"additionalProperties":false,"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"additionalProperties":false,"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"additionalProperties":false,"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"additionalProperties":false,"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"deliberate_faults":{"description":"Value for deliberate faults.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"environment_id":{"description":"Value for environment id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"description":"Value for kind.","enum":["native","javascript-cli","electron","incomplete-reconstruction","broken-runtime"],"type":"string"}},"required":["fixture_id","kind","artifact_sha256","environment_id","deliberate_faults"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"grants":{"description":"Value for grants.","items":{"additionalProperties":false,"properties":{"decision":{"description":"Value for decision.","enum":["granted","denied","cancelled","restart-required"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"grant_id":{"description":"Value for grant id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"launched_process":{"description":"Value for launched process.","type":"boolean"},"scope":{"description":"Value for scope.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["grant_id","scope","decision","launched_process","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"identity":{"additionalProperties":false,"description":"Value for identity.","properties":{"catalog_digest":{"description":"Value for catalog digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"cli_version":{"description":"Value for cli version.","maxLength":4096,"minLength":1,"type":"string"},"providers":{"description":"Value for providers.","items":{"additionalProperties":false,"properties":{"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for digest."},"provider_id":{"description":"Exact deep-analysis provider ID, or automatic selection when omitted.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"reason_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for reason code."},"state":{"description":"Value for state.","enum":["available","unavailable","incompatible","broken-host"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["provider_id","version","digest","state","reason_code"],"type":"object"},"maxItems":100,"type":"array"},"server_version":{"description":"Value for server version.","maxLength":4096,"minLength":1,"type":"string"},"skill_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for skill digest."},"versions":{"description":"Value for versions.","items":{"additionalProperties":false,"properties":{"component":{"description":"Value for component.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for digest."},"remediation":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for remediation."},"state":{"description":"Value for state.","enum":["current","stale","unavailable"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["component","version","digest","state","remediation"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["cli_version","server_version","catalog_digest","skill_digest","versions","providers"],"type":"object"},"obligation_ledger":{"additionalProperties":false,"description":"Value for obligation ledger.","properties":{"closure_digest":{"description":"Value for closure digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","properties":{"max_obligations":{"description":"Maximum permitted obligations for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"omitted_count":{"description":"Value for omitted count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","partial"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["status","truncated","omitted_count","max_obligations"],"type":"object"},"dependency_graph":{"description":"Value for dependency graph.","items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"description":"Value for depends on obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"description":"Value for ledger id.","pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"description":"Value for obligations.","items":{"additionalProperties":false,"properties":{"application_layer":{"description":"Value for application layer.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"description":"Value for authority references.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"state":{"description":"Value for state.","enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"description":"Value for case kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"description":"Value for domain type.","maxLength":4096,"minLength":1,"type":"string"},"parser":{"description":"Value for parser.","maxLength":4096,"minLength":1,"type":"string"},"schema":{"description":"Value for schema.","maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}],"description":"Value for parser type."},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"description":"Value for command.","maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"description":"Value for nondeterminism.","properties":{"mode":{"description":"Operation mode that selects the requested behavior.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"description":"Value for specification.","maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence v2 identifier for the result observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}],"description":"Value for verifier."}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}],"description":"Value for binding."},"dependency_obligation_ids":{"description":"Value for dependency obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"description":"Value for diagnostics.","items":{"additionalProperties":false,"properties":{"code":{"description":"Value for code.","enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"description":"Requested response detail level.","maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"description":"Value for obligation version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"description":"Value for observed cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"description":"Value for origin.","enum":["generated","reviewed"],"type":"string"},"required":{"description":"Value for required.","type":"boolean"},"required_case_kinds":{"description":"Value for required case kinds.","items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"description":"Value for required fixture authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"description":"Value for required next evidence.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"description":"Value for required original authority.","enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"description":"Value for required verifier authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"description":"Value for requires parser type.","type":"boolean"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"description":"Value for source state.","enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for application node id."},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of artifact."},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for semantic node id."}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":10000,"type":"array"},"ownership_graph":{"description":"Value for ownership graph.","items":{"additionalProperties":false,"properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"reports":{"additionalProperties":false,"description":"Value for reports.","properties":{"contradicted_obligation_ids":{"description":"Value for contradicted obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"description":"Value for missing owner obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"description":"Value for missing verifier obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","description":"Value for schema.","type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["ready","open","failed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"description":"Concise evidence-backed summary of the result.","properties":{"by_application_layer":{"description":"Value for by application layer.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_evidence_authority":{"description":"Value for by evidence authority.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_status":{"description":"Value for by status.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"required":{"description":"Value for required.","maximum":9007199254740991,"minimum":0,"type":"integer"},"required_open":{"description":"Value for required open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"description":"Value for verified.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","required","verified","required_open","by_status","by_application_layer","by_evidence_authority"],"type":"object"}},"required":["schema","schema_version","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","obligations","evidence_links","limitations"],"type":"object"},"operation_outcomes":{"description":"Value for operation outcomes.","items":{"additionalProperties":false,"properties":{"call_kind":{"description":"Value for call kind.","enum":["valid","malformed","over-limit","incompatible-provider","setup","permission","operation"],"type":"string"},"cli_exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for cli exit code."},"error_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for error code."},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_success":{"description":"Expected success used to reject stale or mismatched input.","type":"boolean"},"mcp_status":{"anyOf":[{"enum":["success","non-success"],"type":"string"},{"type":"null"}],"description":"Value for mcp status."},"operation":{"description":"Value for operation.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"recovered":{"description":"Value for recovered.","type":"boolean"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":0,"type":"integer"},"surface":{"description":"Value for surface.","enum":["cli","mcp"],"type":"string"}},"required":["sequence","operation","surface","call_kind","expected_success","cli_exit_code","mcp_status","error_code","recovered","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"deterministic":{"description":"Value for deterministic.","type":"boolean"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_source_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Expected source digest used to reject stale or mismatched input."},"stale_input_detected":{"description":"Value for stale input detected.","type":"boolean"},"tamper_detected":{"description":"Value for tamper detected.","type":"boolean"}},"required":["expected_source_digest","deterministic","tamper_detected","stale_input_detected","evidence_ids"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"stages":{"description":"Value for stages.","items":{"additionalProperties":false,"properties":{"capability_issue":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for capability issue."},"checks":{"description":"Value for checks.","items":{"additionalProperties":false,"properties":{"check_id":{"description":"Value for check id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"detail":{"description":"Requested response detail level.","maxLength":4096,"minLength":1,"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["check_id","status","detail","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"next_action":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for next action."},"required":{"description":"Value for required.","type":"boolean"},"stage_id":{"description":"Value for stage id.","enum":["discover-classify","diagnose-environment","acquire-authority","static-analysis","reactive-scenarios","compare-authority-candidate","preserve-contradictions","verify-reconstruction-closure","export-replay"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["stage_id","required","status","capability_issue","next_action","evidence_ids","checks"],"type":"object"},"maxItems":9,"minItems":9,"type":"array"},"workflow_candidates":{"description":"Value for workflow candidates.","items":{"additionalProperties":false,"properties":{"compatibility":{"description":"Value for compatibility.","enum":["compatible","incompatible","unavailable"],"type":"string"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"invoked":{"description":"Value for invoked.","type":"boolean"},"provider_id":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Exact deep-analysis provider ID, or automatic selection when omitted."},"reason_code":{"description":"Value for reason code.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selected":{"description":"Value for selected.","type":"boolean"},"workflow_id":{"description":"Value for workflow id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","workflow_id","provider_id","selected","invoked","compatibility","reason_code"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"}},"required":["schema_version","identity","client","capabilities","fixtures","workflow_candidates","grants","evidence_bundle","comparisons","contradictions","obligation_ledger","operation_outcomes","cleanup","closure_history","delegation_checks","replay","stages"],"type":"object"},"kind":"application","name":"evaluate_reconstruction_readiness","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"metrics":{"additionalProperties":false,"properties":{"cleanup_leak_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"divergence_localization_precision":{"maximum":1,"minimum":0,"type":"number"},"failed_calls_before_prerequisites":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"false_equivalence_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_valid_workflow_selection_rate":{"maximum":1,"minimum":0,"type":"number"},"incompatible_provider_invocations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"malformed_or_over_limit_call_rate":{"maximum":1,"minimum":0,"type":"number"},"nondeterministic_replay_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"recovery_rate":{"maximum":1,"minimum":0,"type":"number"},"unowned_obligation_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["first_valid_workflow_selection_rate","malformed_or_over_limit_call_rate","incompatible_provider_invocations","failed_calls_before_prerequisites","recovery_rate","divergence_localization_precision","false_equivalence_count","unowned_obligation_count","cleanup_leak_count","nondeterministic_replay_count"],"type":"object"},"report_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"report_id":{"pattern":"^rr_[a-f0-9]{64}$","type":"string"},"report_resource_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}\\\\/reconstruction-readiness-report$","type":"string"},"schema":{"const":"ReconstructionReadinessReport","type":"string"},"schema_version":{"const":1,"type":"number"},"source_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"failed_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"passed_required_stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["stages","required_stages","passed_required_stages","findings","failed_findings","unknown_findings"],"type":"object"}},"required":["schema","schema_version","report_id","source_digest","report_digest","status","summary","metrics","report_resource_uri"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Evaluate Reconstruction Readiness"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Atomically commit one canonical evidence-backed reconstruction coverage workspace revision under an approved root. CAS revisions reject lost updates; every Evidence and residual-unknown reference must resolve in the embedded canonical bundle.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"expected_revision":null,"workspace":{"artifacts":[],"boundaries":[],"claims":[],"contradictions":[],"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"name":"replacement","owners":[],"package_proofs":[],"previous_revision_sha256":null,"residual_unknown_ids":[],"revision":1,"revision_sha256":"0000000000000000000000000000000000000000000000000000000000000000","schema_version":1,"surfaces":[],"verifier_contracts":[],"verifier_results":[],"workspace_id":"rcw_0000000000000000000000000000000000000000000000000000000000000000"},"workspace_path":"/approved/coverage.json"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_revision":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Expected revision used to reject stale or mismatched input."},"workspace":{"additionalProperties":false,"description":"Value for workspace.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"additionalProperties":false,"properties":{"artifact_id":{"description":"Value for artifact id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"environment_sha256":{"description":"Exact SHA-256 digest of environment.","pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"version":{"description":"Value for version.","maxLength":500,"minLength":1,"type":"string"}},"required":["artifact_id","artifact_sha256","version","environment_sha256","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"boundaries":{"description":"Value for boundaries.","items":{"additionalProperties":false,"properties":{"allowed_dispositions":{"description":"Value for allowed dispositions.","items":{"enum":["external","non-goal"],"type":"string"},"maxItems":2,"type":"array"},"allowed_unknown_ids":{"description":"Value for allowed unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"required_claim_ids":{"description":"Value for required claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"required_package_proof_kinds":{"description":"Value for required package proof kinds.","items":{"enum":["build","clean-install","package-contents","runtime-routing","authority-independence"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_surface_ids":{"description":"Value for required surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["boundary_id","title","required_surface_ids","required_claim_ids","required_package_proof_kinds","allowed_dispositions","allowed_unknown_ids"],"type":"object"},"maxItems":1000,"type":"array"},"claims":{"description":"Value for claims.","items":{"additionalProperties":false,"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"description":"Value for kind.","maxLength":100,"minLength":1,"type":"string"},"required_authority":{"description":"Value for required authority.","enum":["shipped-artifact","controlled-replay","live-observation","external"],"type":"string"},"required_dimensions":{"description":"Value for required dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","kind","surface_ids","required_dimensions","required_authority"],"type":"object"},"maxItems":10000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"claim_ids":{"description":"Value for claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"contradiction_id":{"description":"Value for contradiction id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":2,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["active","resolved"],"type":"string"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"}},"required":["contradiction_id","status","surface_ids","claim_ids","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"evidence_bundle":{"additionalProperties":false,"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"additionalProperties":false,"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"additionalProperties":false,"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"additionalProperties":false,"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"name":{"description":"Exact name used by this operation.","maxLength":200,"minLength":1,"type":"string"},"owners":{"description":"Value for owners.","items":{"additionalProperties":false,"properties":{"ownership":{"description":"Value for ownership.","oneOf":[{"additionalProperties":false,"properties":{"authority_route":{"description":"Value for authority route.","enum":["none","detected","unknown"],"type":"string"},"disposition":{"const":"implemented","description":"Value for disposition.","type":"string"},"owner_export":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for owner export."},"owner_path":{"description":"Local filesystem path for owner.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"package_state":{"description":"Value for package state.","enum":["distributed","missing","unknown"],"type":"string"},"path_state":{"description":"Value for path state.","enum":["present","missing","unknown"],"type":"string"}},"required":["disposition","owner_path","owner_export","owner_sha256","path_state","package_state","authority_route"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"description":"Value for disposition.","enum":["external","non-goal"],"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":4096,"minLength":1,"type":"string"}},"required":["disposition","rationale"],"type":"object"}]},"surface_id":{"description":"Value for surface id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["surface_id","ownership"],"type":"object"},"maxItems":10000,"type":"array"},"package_proofs":{"description":"Value for package proofs.","items":{"additionalProperties":false,"properties":{"artifact_sha256s":{"description":"Value for artifact sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"kind":{"description":"Value for kind.","enum":["build","clean-install","package-contents","runtime-routing","authority-independence"],"type":"string"},"proof_id":{"description":"Value for proof id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"}},"required":["proof_id","kind","status","artifact_sha256s","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"previous_revision_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of previous revision."},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"surfaces":{"description":"Value for surfaces.","items":{"additionalProperties":false,"properties":{"artifact_id":{"description":"Value for artifact id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"authority":{"description":"Value for authority.","enum":["observed","derived","inferred","historical","external"],"type":"string"},"dependency_surface_ids":{"description":"Value for dependency surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"occurrence_id":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for occurrence id."},"surface_id":{"description":"Value for surface id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["surface_id","family","artifact_id","occurrence_id","location","authority","dependency_surface_ids","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"verifier_contracts":{"description":"Value for verifier contracts.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","live-observation","external"],"type":"string"},"claim_ids":{"description":"Value for claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"contract_sha256":{"description":"Exact SHA-256 digest of contract.","pattern":"^[a-f0-9]{64}$","type":"string"},"dimensions":{"description":"Value for dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"max_age_ms":{"description":"Maximum permitted age ms for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"minimum_repeats":{"description":"Value for minimum repeats.","maximum":1000,"minimum":1,"type":"integer"},"normalization_removes_dimensions":{"const":false,"description":"Value for normalization removes dimensions.","type":"boolean"},"normalization_sha256":{"description":"Exact SHA-256 digest of normalization.","pattern":"^[a-f0-9]{64}$","type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_ids","dimensions","authority","max_age_ms","minimum_repeats","normalization_sha256","normalization_removes_dimensions","contract_sha256"],"type":"object"},"maxItems":10000,"type":"array"},"verifier_results":{"description":"Value for verifier results.","items":{"additionalProperties":false,"properties":{"artifact_sha256s":{"description":"Value for artifact sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"contract_sha256":{"description":"Exact SHA-256 digest of contract.","pattern":"^[a-f0-9]{64}$","type":"string"},"covered_claim_ids":{"description":"Value for covered claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"covered_dimensions":{"description":"Value for covered dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"normalization_sha256":{"description":"Exact SHA-256 digest of normalization.","pattern":"^[a-f0-9]{64}$","type":"string"},"observed_at":{"description":"Value for observed at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z|([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)))$","type":"string"},"owner_sha256s":{"description":"Value for owner sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"repeats":{"description":"Value for repeats.","maximum":1000,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","contract_sha256","observed_at","status","covered_claim_ids","covered_dimensions","artifact_sha256s","owner_sha256s","normalization_sha256","repeats","evidence_ids"],"type":"object"},"maxItems":100000,"type":"array"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","workspace_id","name","revision","previous_revision_sha256","evidence_bundle","artifacts","surfaces","owners","claims","verifier_contracts","verifier_results","residual_unknown_ids","contradictions","package_proofs","boundaries","revision_sha256"],"type":"object"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","expected_revision","workspace"],"type":"object"},"kind":"application","name":"commit_reconstruction_coverage","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_records":{"description":"Value for evidence records.","maximum":9007199254740991,"minimum":0,"type":"integer"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","type":"string"}},"required":["workspace_path","bytes","workspace_id","revision","revision_sha256","evidence_records"],"type":"object"},"requiresSession":false,"title":"Commit Reconstruction Coverage"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate one named reconstruction boundary from a canonical coverage workspace. Missing ownership or inventory is partial; stale, weak, truncated, skipped, or unresolved proof is unknown; contradictions, failed proof, missing owners, and authority routing fail closed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"boundary_id":"replacement.cli","workspace_path":"/approved/coverage.json"}],"properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["workspace_path","boundary_id"],"type":"object"},"kind":"application","name":"query_reconstruction_coverage","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"reasons":{"description":"Value for reasons.","items":{"additionalProperties":false,"properties":{"code":{"enum":["surface-missing","owner-missing","owner-duplicate","owner-path-missing","owner-path-unknown","owner-undistributed","owner-distribution-unknown","authority-routing-detected","authority-routing-unknown","disposition-not-allowed","dependency-surface-missing","claim-missing","verifier-missing","verifier-duplicate","verifier-result-missing","verifier-result-stale","verifier-result-incompatible","verifier-failed","verifier-unknown","active-unknown","active-contradiction","package-proof-missing","package-proof-failed","package-proof-unknown"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"subject_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["code","subject_id","detail"],"type":"object"},"maxItems":100000,"type":"array"},"recommended_probes":{"description":"Value for recommended probes.","items":{"additionalProperties":false,"properties":{"operation":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"},"subject_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["operation","subject_id","rationale"],"type":"object"},"maxItems":100000,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["partial","failed","unknown","ready"],"type":"string"},"summary":{"additionalProperties":false,"description":"Concise evidence-backed summary of the result.","properties":{"reasons":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_claims":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_surfaces":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["required_surfaces","required_claims","reasons"],"type":"object"},"workspace_revision_sha256":{"description":"Exact SHA-256 digest of workspace revision.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["boundary_id","status","workspace_revision_sha256","summary","reasons","recommended_probes","evidence_ids"],"type":"object"},"requiresSession":false,"title":"Query Reconstruction Coverage"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Open a local executable, application bundle, archive, JavaScript, source map, plist, or analysis database after validation. provider_id selects one deep provider or deterministic auto selection; the binding remains stable until close or an explicit switch, with no failure fallback. An optional snapshot v2 is imported atomically and must match the binary identity, concrete provider, and canonical analysis profile exactly.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"path":"/tmp/fixture"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"provider_id":{"anyOf":[{"const":"auto","type":"string"},{"maxLength":64,"minLength":1,"pattern":"^[a-z][a-z0-9-]*$","type":"string"}],"description":"Exact deep-analysis provider ID, or automatic selection when omitted."},"snapshot_path":{"description":"Local filesystem path for snapshot.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"open_binary","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"loaderArgs":{"items":{"type":"string"},"type":"array"},"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","format","kind","loaderArgs","sha256","architecture"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Open Binary"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Optionally write a provider-neutral analysis snapshot atomically, then close the active target and every provider resource started for it. Snapshot files require an operator-approved root and explicit overwrite; a failed save leaves the session open so cached analysis is not lost.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"overwrite":false}],"properties":{"overwrite":{"default":false,"description":"Whether an existing destination may be replaced.","type":"boolean"},"snapshot_path":{"description":"Local filesystem path for snapshot.","minLength":1,"type":"string"}},"type":"object"},"kind":"session","name":"close_binary","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"null"},{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"entries":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"}},"required":["path","bytes","entries"],"type":"object"}],"description":"Primary structured result returned by this operation."}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Close Binary"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Report compact target, provider, and alignment state without starting analysis. The default summary is the routing check agents should use; detail=capabilities returns one family-filtered availability page, while detail=full is reserved for complete provider diagnostics.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"cursor":0,"detail":"summary","limit":25}],"properties":{"capability_family":{"description":"Optional tool family for detail=capabilities","enum":["official-proxy","enhanced","native-provider","artifact-provider","managed-provider","browser-provider","electron-provider","runtime-provider","application","session"],"type":"string"},"cursor":{"default":0,"description":"Zero-based capability cursor for detail=capabilities","maximum":9007199254740991,"minimum":0,"type":"integer"},"detail":{"default":"summary","description":"summary returns routing state; capabilities returns one filtered tool-availability page; full returns complete diagnostics only when required","enum":["summary","capabilities","full"],"type":"string"},"expected_catalog_digest":{"description":"Expected catalog digest used to reject stale or mismatched input.","pattern":"^[a-f0-9]{64}$","type":"string"},"expected_package_version":{"description":"Expected package version used to reject stale or mismatched input.","minLength":1,"type":"string"},"expected_server_path":{"description":"Expected server path used to reject stale or mismatched input.","minLength":1,"type":"string"},"limit":{"default":25,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"},"kind":"session","name":"binary_session","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"additionalProperties":false,"properties":{"active_provider":{"anyOf":[{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},{"type":"null"}]},"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"open":{"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"recommended_actions":{"items":{"type":"string"},"type":"array"},"target":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","format","kind","sha256","architecture"],"type":"object"},{"type":"null"}]},"view":{"const":"summary","type":"string"}},"required":["view","open","provider","active_provider","target","alignment","analysis_activity","recommended_actions"],"type":"object"},{"additionalProperties":false,"properties":{"active_provider":{"anyOf":[{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},{"type":"null"}]},"capabilities":{"additionalProperties":false,"properties":{"cursor":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"additionalProperties":false,"properties":{"available":{"type":"boolean"},"missing_operations":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"},"type":"array"},"name":{"type":"string"},"reason":{"enum":["available","client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","available","reason","remediation","client_requirements","effects","annotations"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","cursor","limit","total","next_cursor","has_more"],"type":"object"},"capability_family":{"anyOf":[{"type":"string"},{"type":"null"}]},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"open":{"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"view":{"const":"capabilities","type":"string"}},"required":["view","open","provider","active_provider","capability_family","capabilities","client_features"],"type":"object"},{"anyOf":[{"additionalProperties":false,"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"analysis_provider_binding":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selection_source":{"enum":["request","environment","auto-single-candidate"],"type":"string"}},"required":["provider","selection_source","analysis_profile"],"type":"object"},{"type":"null"}]},"analysis_provider_candidates":{"items":{"additionalProperties":false,"properties":{"availability":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"available","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]},"capabilities":{"items":{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","available","reason","availability_code","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations"],"type":"object"},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selected":{"type":"boolean"},"target_support":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"supported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unsupported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]}},"required":["provider","availability","target_support","selected","capabilities"],"type":"object"},"type":"array"},"analysis_run":{"anyOf":[{"additionalProperties":false,"properties":{"process_lineage":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"not_observed","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"snapshots":{"items":{"additionalProperties":false,"properties":{"observation":{"oneOf":[{"additionalProperties":false,"properties":{"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","observed_at","launcher_pid","process_group_id","reason"],"type":"object"},{"additionalProperties":false,"properties":{"descendants":{"items":{"additionalProperties":false,"properties":{"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["pid","parent_pid","process_group_id"],"type":"object"},"type":"array"},"launcher_parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","schema_version","launcher_pid","process_group_id","launcher_parent_pid","descendants"],"type":"object"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"}},"required":["provider","observation"],"type":"object"},"type":"array"},"status":{"const":"snapshots","type":"string"}},"required":["status","snapshots"],"type":"object"}]},"run_id":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},"required":["run_id","process_lineage"],"type":"object"},{"type":"null"}]},"capabilities":{"items":{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","available","reason","availability_code","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations"],"type":"object"},"type":"array"},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"open":{"const":false,"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"type":"array"},"server_identity":{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"catalog":{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"},"client":{"anyOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},{"type":"null"}]},"negotiated_protocol_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"package":{"additionalProperties":false,"properties":{"build_commit":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"root_path":{"type":"string"},"version":{"type":"string"}},"required":["name","version","root_path","build_commit"],"type":"object"},"protocol_features":{"additionalProperties":false,"properties":{"cancellation":{"type":"boolean"},"elicitation":{"type":"boolean"},"evidence_resources":{"type":"boolean"},"progress":{"type":"boolean"}},"required":["progress","cancellation","evidence_resources","elicitation"],"type":"object"},"sdk":{"additionalProperties":false,"properties":{"client_test":{"type":"string"},"core":{"type":"string"},"server":{"type":"string"}},"required":["server","client_test","core"],"type":"object"},"server":{"additionalProperties":false,"properties":{"command_path":{"type":"string"},"name":{"type":"string"},"started_at":{"type":"string"},"version":{"type":"string"}},"required":["name","version","started_at","command_path"],"type":"object"},"skill":{"additionalProperties":false,"properties":{"expected_version":{"type":"string"},"name":{"type":"string"}},"required":["name","expected_version"],"type":"object"}},"required":["package","server","sdk","negotiated_protocol_version","client","skill","catalog","protocol_features","alignment"],"type":"object"},"tool_availability":{"items":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"additionalProperties":false,"properties":{"available":{"type":"boolean"},"missing_operations":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"},"type":"array"},"name":{"type":"string"},"reason":{"enum":["available","client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","available","reason","remediation","client_requirements","effects","annotations"],"type":"object"},"type":"array"},"view":{"const":"full","type":"string"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","view","open"],"type":"object"},{"additionalProperties":false,"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"analysis_provider_binding":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selection_source":{"enum":["request","environment","auto-single-candidate"],"type":"string"}},"required":["provider","selection_source","analysis_profile"],"type":"object"},{"type":"null"}]},"analysis_provider_candidates":{"items":{"additionalProperties":false,"properties":{"availability":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"available","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]},"capabilities":{"items":{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","available","reason","availability_code","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations"],"type":"object"},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selected":{"type":"boolean"},"target_support":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"supported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unsupported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]}},"required":["provider","availability","target_support","selected","capabilities"],"type":"object"},"type":"array"},"analysis_run":{"anyOf":[{"additionalProperties":false,"properties":{"process_lineage":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"not_observed","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"snapshots":{"items":{"additionalProperties":false,"properties":{"observation":{"oneOf":[{"additionalProperties":false,"properties":{"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","observed_at","launcher_pid","process_group_id","reason"],"type":"object"},{"additionalProperties":false,"properties":{"descendants":{"items":{"additionalProperties":false,"properties":{"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["pid","parent_pid","process_group_id"],"type":"object"},"type":"array"},"launcher_parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","schema_version","launcher_pid","process_group_id","launcher_parent_pid","descendants"],"type":"object"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"}},"required":["provider","observation"],"type":"object"},"type":"array"},"status":{"const":"snapshots","type":"string"}},"required":["status","snapshots"],"type":"object"}]},"run_id":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},"required":["run_id","process_lineage"],"type":"object"},{"type":"null"}]},"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"capabilities":{"items":{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","available","reason","availability_code","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations"],"type":"object"},"type":"array"},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"open":{"const":true,"type":"boolean"},"path":{"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"type":"array"},"server_identity":{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"catalog":{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"},"client":{"anyOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},{"type":"null"}]},"negotiated_protocol_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"package":{"additionalProperties":false,"properties":{"build_commit":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"root_path":{"type":"string"},"version":{"type":"string"}},"required":["name","version","root_path","build_commit"],"type":"object"},"protocol_features":{"additionalProperties":false,"properties":{"cancellation":{"type":"boolean"},"elicitation":{"type":"boolean"},"evidence_resources":{"type":"boolean"},"progress":{"type":"boolean"}},"required":["progress","cancellation","evidence_resources","elicitation"],"type":"object"},"sdk":{"additionalProperties":false,"properties":{"client_test":{"type":"string"},"core":{"type":"string"},"server":{"type":"string"}},"required":["server","client_test","core"],"type":"object"},"server":{"additionalProperties":false,"properties":{"command_path":{"type":"string"},"name":{"type":"string"},"started_at":{"type":"string"},"version":{"type":"string"}},"required":["name","version","started_at","command_path"],"type":"object"},"skill":{"additionalProperties":false,"properties":{"expected_version":{"type":"string"},"name":{"type":"string"}},"required":["name","expected_version"],"type":"object"}},"required":["package","server","sdk","negotiated_protocol_version","client","skill","catalog","protocol_features","alignment"],"type":"object"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"tool_availability":{"items":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"additionalProperties":false,"properties":{"available":{"type":"boolean"},"missing_operations":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"},"type":"array"},"name":{"type":"string"},"reason":{"enum":["available","client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","available","reason","remediation","client_requirements","effects","annotations"],"type":"object"},"type":"array"},"view":{"const":"full","type":"string"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","view","open","path","format","kind","sha256","architecture"],"type":"object"}]}],"description":"Primary structured result returned by this operation."}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Binary Session"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Atomically write the session\'s deterministic Evidence v2 bundle beneath an operator-approved root. Existing files require overwrite: true; records and manifests use canonical byte-stable ordering. For an in-session read, use snapshot_evidence_bundle and read its exact resource URI instead.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"overwrite":false,"path":"/tmp/evidence.json"}],"properties":{"overwrite":{"default":false,"description":"Whether an existing destination may be replaced.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"export_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["path","bytes","records","unknowns"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Export Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read a bounded local JSON bundle beneath an operator-approved root, validate every Evidence v2 ID and canonical manifest, then atomically merge it. Imported content is data only and is never executed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"path":"evidence.json"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"import_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"imported":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["imported","unknowns_added","total"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Import Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run one bounded process under a PTY using operator-approved executable and working roots. Produces Process Capture v4; legacy v3 captures cannot be upgraded and must be recaptured with this tool. Requires approved: true; unknown_registry_approved: true separately records capture residuals. Captures raw and xterm-rendered terminal frames, scripted interactions, lifecycle filesystem checkpoints, process ownership, declarative command shims, and loopback replay. Disabled unless operator policy enables it; not a security sandbox.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"oneOf":[{"additionalProperties":false,"properties":{"cardinality":{"additionalProperties":false,"description":"Value for cardinality.","properties":{"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":256,"type":"integer"}},"required":["min","max"],"type":"object"},"consume":{"description":"Value for consume.","type":"boolean"},"exact":{"$ref":"#/$defs/__schema1","description":"Value for exact."},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"maxItems":5,"type":"array"},"kind":{"const":"event","description":"Value for kind.","type":"string"},"since":{"description":"Value for since.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"scenario_start","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"state_entry","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"checkpoint","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"event_id":{"description":"Value for event id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem","http","websocket","shim","replay_transition"],"type":"string"}},"required":["kind","source","exact","ignore_fields","since","consume","cardinality"],"type":"object"},{"additionalProperties":false,"properties":{"case_sensitive":{"const":true,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"consume":{"description":"Value for consume.","type":"boolean"},"control_sequences":{"const":"include","description":"Value for control sequences.","type":"string"},"encoding":{"const":"utf8","description":"Value for encoding.","type":"string"},"kind":{"const":"terminal_text","description":"Value for kind.","type":"string"},"literal":{"description":"Value for literal.","maxLength":10000,"minLength":1,"type":"string"},"occurrence":{"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"since":{"description":"Value for since.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"scenario_start","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"state_entry","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"checkpoint","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"event_id":{"description":"Value for event id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]},"view":{"const":"decoded","description":"Value for view.","type":"string"}},"required":["kind","view","encoding","literal","case_sensitive","control_sequences","occurrence","since","consume"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"all","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":2,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"any","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":2,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"sequence","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":1,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"repeat","description":"Value for kind.","type":"string"},"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":64,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":64,"type":"integer"},"trigger":{"$ref":"#/$defs/__schema0","description":"Value for trigger."}},"required":["kind","trigger","min","max"],"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"arguments":[],"checkpoints":[],"command_shims":[],"environment":{},"events":[],"executable":"/usr/bin/true","filesystem_roots":[],"idle_timeout_ms":30000,"inherit_environment":[],"limits":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"frames":10000,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"network_access":"host","normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"reactive":null,"replay":{"http":[],"machine":null,"websocket_connections":[],"websocket_messages":[]},"secret_aliases":[],"settle_ms":100,"terminal":{"columns":80,"rows":24,"scrollback":1000},"timeout_ms":30000,"working_directory":"/tmp"}],"properties":{"approved":{"const":true,"description":"Explicit per-call acknowledgement that this operation launches the target","type":"boolean"},"arguments":{"default":[],"description":"Value for arguments.","items":{"type":"string"},"maxItems":256,"type":"array"},"checkpoints":{"default":[],"description":"Value for checkpoints.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":300000,"minimum":0,"type":"integer"},"type":{"const":"time","description":"Value for type.","type":"string"}},"required":["type","at_ms"],"type":"object"},{"additionalProperties":false,"properties":{"occurrence":{"default":1,"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"type":{"const":"terminal_literal","description":"Value for type.","type":"string"},"value":{"description":"Value for value.","maxLength":10000,"minLength":1,"type":"string"}},"required":["type","value"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"root_exit","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"settled","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"}]}},"required":["name","trigger"],"type":"object"},"maxItems":64,"type":"array"},"command_shims":{"default":[],"description":"Value for command shims.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$","type":"string"},"routes":{"description":"Value for routes.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"type":"string"},"maxItems":256,"type":"array"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","exclusiveMinimum":0,"maximum":100,"type":"integer"},"outputs":{"default":[],"description":"Value for outputs.","items":{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":300000,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"stream":{"description":"Value for stream.","enum":["stdout","stderr"],"type":"string"}},"required":["at_ms","stream","data"],"type":"object"},"maxItems":1000,"type":"array"},"termination":{"description":"Value for termination.","oneOf":[{"additionalProperties":false,"properties":{"code":{"description":"Value for code.","maximum":255,"minimum":0,"type":"integer"},"type":{"const":"exit","description":"Value for type.","type":"string"}},"required":["type","code"],"type":"object"},{"additionalProperties":false,"properties":{"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"type":{"const":"signal","description":"Value for type.","type":"string"}},"required":["type","signal"],"type":"object"}]}},"required":["arguments","termination"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["name","routes"],"type":"object"},"maxItems":32,"type":"array"},"environment":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for environment.","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"type":"object"},"events":{"default":[],"description":"Value for events.","items":{"oneOf":[{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","type":"string"},"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"type":{"const":"input","description":"Value for type.","type":"string"}},"required":["at_ms","type","data"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"columns":{"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"type":{"const":"resize","description":"Value for type.","type":"string"}},"required":["at_ms","type","columns","rows"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"type":{"const":"signal","description":"Value for type.","type":"string"}},"required":["at_ms","type","signal"],"type":"object"}]},"maxItems":1000,"type":"array"},"executable":{"description":"Approved absolute path of the executable to run.","pattern":"^\\\\/.*","type":"string"},"filesystem_roots":{"default":[],"description":"Approved canonical filesystem filesystem roots.","items":{"pattern":"^\\\\/.*","type":"string"},"maxItems":16,"type":"array"},"idle_timeout_ms":{"default":30000,"description":"Value for idle timeout ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"inherit_environment":{"default":[],"description":"Value for inherit environment.","items":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"frames":10000,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"connections":{"default":100,"description":"Value for connections.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"file_bytes":{"default":10000000,"description":"Bounded byte count for file.","exclusiveMinimum":0,"maximum":100000000,"type":"integer"},"files":{"default":10000,"description":"Value for files.","exclusiveMinimum":0,"maximum":100000,"type":"integer"},"filesystem_depth":{"default":16,"description":"Value for filesystem depth.","maximum":64,"minimum":1,"type":"integer"},"frames":{"default":10000,"description":"Value for frames.","exclusiveMinimum":0,"maximum":100000,"type":"integer"},"output_bytes":{"default":1000000,"description":"Bounded byte count for output.","exclusiveMinimum":0,"maximum":10000000,"type":"integer"},"processes":{"default":1000,"description":"Value for processes.","exclusiveMinimum":0,"maximum":10000,"type":"integer"},"protocol_body_bytes":{"default":1000000,"description":"Bounded byte count for protocol body.","exclusiveMinimum":0,"maximum":10000000,"type":"integer"},"protocol_events":{"default":10000,"description":"Value for protocol events.","exclusiveMinimum":0,"maximum":100000,"type":"integer"}},"type":"object"},"network_access":{"const":"host","default":"host","description":"Value for network access.","type":"string"},"normalization":{"additionalProperties":false,"default":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"description":"Value for normalization.","properties":{"paths":{"default":true,"description":"Value for paths.","type":"boolean"},"patterns":{"default":[],"description":"Value for patterns.","items":{"additionalProperties":false,"properties":{"pattern":{"description":"Text or bounded pattern used to filter matching results.","maxLength":500,"type":"string"},"replacement":{"description":"Value for replacement.","maxLength":100,"type":"string"}},"required":["pattern","replacement"],"type":"object"},"maxItems":32,"type":"array"},"pids":{"default":true,"description":"Value for pids.","type":"boolean"},"ports":{"default":true,"description":"Value for ports.","type":"boolean"},"time_bucket_ms":{"default":10,"description":"Value for time bucket ms.","exclusiveMinimum":0,"maximum":60000,"type":"integer"}},"type":"object"},"reactive":{"anyOf":[{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"max_visits":{"description":"Maximum permitted visits for this operation.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"on":{"description":"Value for on.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"sensitive":{"description":"Value for sensitive.","type":"boolean"},"type":{"const":"send_input","description":"Value for type.","type":"string"}},"required":["type","data","sensitive"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"type":{"const":"resize","description":"Value for type.","type":"string"}},"required":["type","columns","rows"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"close_stdin","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"target":{"description":"Value for target.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"root","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"process_group","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"subject_id","description":"Value for kind.","type":"string"},"subject_id":{"description":"Value for subject id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["kind","subject_id"],"type":"object"}]},"type":{"const":"send_signal","description":"Value for type.","type":"string"}},"required":["type","target","signal"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"},"type":{"const":"checkpoint","description":"Value for type.","type":"string"}},"required":["type","name"],"type":"object"}]},"maxItems":16,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"priority":{"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"target":{"description":"Value for target.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"goto","description":"Value for kind.","type":"string"},"state":{"description":"Value for state.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["kind","state"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finish","description":"Value for kind.","type":"string"},"outcome":{"const":"passed","description":"Value for outcome.","type":"string"}},"required":["kind","outcome"],"type":"object"}]},"when":{"$ref":"#/$defs/__schema0","description":"Value for when."}},"required":["id","priority","max_uses","when","actions","target"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["id","max_visits","deadline_ms","on"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"version":{"const":1,"description":"Value for version.","type":"number"}},"required":["version","initial_state","deadline_ms","states"],"type":"object"},{"type":"null"}],"description":"Value for reactive."},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"http":{"default":[],"description":"Value for http.","items":{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":30000,"minimum":0,"type":"integer"},"disconnect":{"default":false,"description":"Value for disconnect.","type":"boolean"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","maximum":100,"minimum":1,"type":"integer"},"method":{"description":"Value for method.","maxLength":16,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"request_body":{"description":"Value for request body.","maxLength":1000000,"type":"string"},"request_headers":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for request headers.","propertyNames":{"type":"string"},"type":"object"},"response_headers":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for response headers.","propertyNames":{"type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"}},"required":["method","path","status","body"],"type":"object"},"maxItems":100,"type":"array"},"machine":{"anyOf":[{"additionalProperties":false,"properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":10000000,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":1000,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":300000,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"max_visits":{"default":100000,"description":"Maximum permitted visits for this operation.","maximum":100000,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"transitions":{"description":"Value for transitions.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","description":"Value for type.","type":"string"}},"required":["type","status","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"minItems":1,"type":"array"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"guards":{"description":"Value for guards.","items":{"additionalProperties":false,"properties":{"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":10000,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","method","path"],"type":"object"},{"additionalProperties":false,"properties":{"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"},{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"}]}},"required":["id","from","to","trigger","actions","max_uses"],"type":"object"},"maxItems":2000,"minItems":1,"type":"array"}},"required":["initial_state","states","transitions","max_transitions"],"type":"object"},{"type":"null"}],"description":"Value for machine."},"websocket_connections":{"default":[],"description":"Value for websocket connections.","items":{"additionalProperties":false,"properties":{"disconnect_after":{"default":false,"description":"Value for disconnect after.","type":"boolean"},"messages":{"description":"Value for messages.","items":{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":30000,"minimum":0,"type":"integer"}},"required":["data"],"type":"object"},"maxItems":100,"type":"array"}},"required":["messages"],"type":"object"},"maxItems":100,"type":"array"},"websocket_messages":{"default":[],"description":"Value for websocket messages.","items":{"maxLength":1000000,"type":"string"},"maxItems":100,"type":"array"}},"type":"object"},"secret_aliases":{"default":[],"description":"Value for secret aliases.","items":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"maxItems":64,"type":"array"},"settle_ms":{"default":100,"description":"Value for settle ms.","maximum":10000,"minimum":0,"type":"integer"},"terminal":{"additionalProperties":false,"default":{"columns":80,"rows":24,"scrollback":1000},"description":"Value for terminal.","properties":{"columns":{"default":80,"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"default":24,"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"scrollback":{"default":1000,"description":"Value for scrollback.","maximum":10000,"minimum":0,"type":"integer"}},"type":"object"},"timeout_ms":{"default":30000,"description":"Value for timeout ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record capture residuals durably","type":"boolean"},"working_directory":{"description":"Value for working directory.","pattern":"^\\\\/.*","type":"string"}},"required":["approved","executable","working_directory"],"type":"object"},"kind":"session","name":"capture_process_scenario","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"cleanup":{"additionalProperties":false,"properties":{"owned_process_group":{"const":"verified","type":"string"},"temporary_root":{"const":"removed","type":"string"}},"required":["owned_process_group","temporary_root"],"type":"object"},"event_journal":{"default":[],"items":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["capture_order","collection","index"],"type":"object"},"type":"array"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"reason":{"enum":["exited","timeout","idle_timeout"],"type":"string"},"signal":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]}},"required":["code","signal","reason"],"type":"object"},"files_after":{"items":{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},"type":"array"},"files_before":{"items":{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},"type":"array"},"filesystem_checkpoints":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"effects":{"items":{"additionalProperties":false,"properties":{"after":{"anyOf":[{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},{"type":"null"}]},"before":{"anyOf":[{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},{"type":"null"}]},"path":{"type":"string"},"status":{"enum":["created","modified","deleted","unchanged"],"type":"string"}},"required":["path","status","before","after"],"type":"object"},"type":"array"},"files":{"items":{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},"type":"array"},"name":{"type":"string"},"truncated":{"type":"boolean"}},"required":["name","at_ms","files","effects","truncated"],"type":"object"},"type":"array"},"filesystem_effects":{"items":{"additionalProperties":false,"properties":{"after":{"anyOf":[{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},{"type":"null"}]},"before":{"anyOf":[{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},{"type":"null"}]},"path":{"type":"string"},"status":{"enum":["created","modified","deleted","unchanged"],"type":"string"}},"required":["path","status","before","after"],"type":"object"},"type":"array"},"frames":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","at_ms","data"],"type":"object"},"type":"array"},"interaction_events":{"items":{"additionalProperties":false,"properties":{"data":{"type":"string"},"dispatched_at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outcome":{"enum":["dispatched","target_exited","failed"],"type":"string"},"scheduled_at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":{"enum":["input","resize","stdin_close","signal"],"type":"string"}},"required":["sequence","scheduled_at_ms","dispatched_at_ms","type","data","outcome"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"manifest":{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"comparison_contract":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"comparison_contract_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"completed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"full_scenario_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"normalization_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"platform":{"minLength":1,"type":"string"},"provider_version":{"minLength":1,"type":"string"},"pty_backend":{"const":"node-pty","type":"string"},"rea_version":{"minLength":1,"type":"string"},"replay_plan":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"replay_plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scenario":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"shim_plan":{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},"shim_plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["rea_version","provider_version","platform","architecture","pty_backend","started_at","completed_at","scenario","comparison_contract","shim_plan","replay_plan","full_scenario_sha256","comparison_contract_sha256","executable_sha256","normalization_sha256","shim_plan_sha256","replay_plan_sha256"],"type":"object"},"normalization":{"additionalProperties":false,"properties":{"paths":{"type":"boolean"},"patterns":{"items":{"additionalProperties":false,"properties":{"pattern":{"maxLength":500,"type":"string"},"replacement":{"maxLength":100,"type":"string"}},"required":["pattern","replacement"],"type":"object"},"type":"array"},"pids":{"type":"boolean"},"ports":{"type":"boolean"},"time_bucket_ms":{"exclusiveMinimum":0,"maximum":60000,"type":"integer"}},"required":["paths","pids","ports","time_bucket_ms","patterns"],"type":"object"},"process_samples":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"command":{"type":"string"},"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"process_group_id":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"session_id":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["at_ms","pid","parent_pid","command","process_group_id","session_id"],"type":"object"},"type":"array"},"protocol_events":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"type":"string"},"direction":{"enum":["request","response","received","sent"],"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"outcome":{"enum":["matched","unmatched","script_exhausted","disconnected","invalid_state","guard_failed","transition_exhausted","invalid_capture","unexpected_reconnect","limit_exhausted"],"type":"string"},"path":{"anyOf":[{"type":"string"},{"type":"null"}]},"protocol":{"enum":["http","websocket"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","at_ms","protocol","direction","method","path","data","outcome"],"type":"object"},"type":"array"},"reactive_run":{"anyOf":[{"additionalProperties":false,"properties":{"active_state":{"maxLength":64,"minLength":1,"type":"string"},"controls":{"default":[],"items":{"additionalProperties":false,"properties":{"after_capture_order":{"maximum":9007199254740991,"minimum":-1,"type":"integer"},"kind":{"enum":["state_deadline","scenario_deadline","target_lost","cancelled","cleanup_failed"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","kind","after_capture_order"],"type":"object"},"type":"array"},"outcome":{"anyOf":[{"enum":["passed","predicate_timeout","scenario_deadline","ambiguous_match","action_rejected","target_lost","capture_incomplete","cancelled","cleanup_failed"],"type":"string"},{"type":"null"}]},"status":{"enum":["running","finished"],"type":"string"},"transitions":{"items":{"additionalProperties":false,"properties":{"action_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"anyOf":[{"enum":["passed","predicate_timeout","scenario_deadline","ambiguous_match","action_rejected","target_lost","capture_incomplete","cancelled","cleanup_failed"],"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}]},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"type":"array"}},"required":["sequence","transition_id","state_before","state_after","outcome","trigger_event_ids","action_event_ids","action_types"],"type":"object"},"maxItems":128,"type":"array"}},"required":["status","outcome","active_state","controls","transitions"],"type":"object"},{"type":"null"}],"default":null},"rendered_frames":{"items":{"additionalProperties":false,"properties":{"active_buffer":{"enum":["normal","alternate"],"type":"string"},"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"columns":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"cursor_x":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"cursor_y":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"lines":{"items":{"type":"string"},"type":"array"},"rows":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"serialized_state":{"type":"string"}},"required":["sequence","at_ms","columns","rows","cursor_x","cursor_y","active_buffer","lines","serialized_state"],"type":"object"},"type":"array"},"replay_transitions":{"default":[],"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sensitive_aliases":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"maxLength":64,"minLength":1,"type":"string"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"}},"required":["sequence","at_ms","transition_id","state_before","state_after","sensitive_aliases"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"additionalProperties":false,"properties":{"reason":{"type":"string"},"scope":{"enum":["terminal","interaction","exit","process","filesystem","protocol","shim","cleanup","network"],"type":"string"}},"required":["scope","reason"],"type":"object"},"type":"array"},"schema_version":{"const":4,"type":"number"},"settlement":{"additionalProperties":false,"properties":{"cleanup_outcome":{"enum":["not_required","cleaned","failed"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"enum":["quiesced","alive_at_deadline","unverifiable"],"type":"string"}},"required":["state","elapsed_ms","cleanup_outcome"],"type":"object"},"shim_events":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"type":"string"},"type":"array"},"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"command":{"type":"string"},"outcome":{"enum":["matched","unmatched","exhausted"],"type":"string"},"route_index":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"working_directory":{"type":"string"}},"required":["sequence","at_ms","command","route_index","arguments","working_directory","outcome"],"type":"object"},"type":"array"},"truncated":{"type":"boolean"}},"required":["schema_version","manifest","normalization","frames","rendered_frames","interaction_events","exit","settlement","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions","reactive_run","event_journal","files_before","files_after","filesystem_effects","truncated","limitations","residual_unknowns","cleanup"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Capture Process Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two compatible Process Capture v4 observations across terminal, interaction, lifecycle, process, filesystem, command-shim, HTTP, and WebSocket evidence. Optional trace_spec validates exact events against an explicit partial order or finite trace language; concurrency is never inferred from timestamps or broad sorting. Missing, journal-free, or truncated observations are never treated as equivalent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111"}],"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"max_capture_age_ms":{"description":"Maximum permitted capture age ms for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"trace_spec":{"additionalProperties":false,"description":"Value for trace spec.","properties":{"events":{"description":"Value for events.","items":{"additionalProperties":false,"properties":{"cardinality":{"default":{"kind":"required"},"description":"Value for cardinality.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"required","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"optional","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":10000,"minimum":0,"type":"integer"},"kind":{"const":"exact","description":"Value for kind.","type":"string"}},"required":["kind","count"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"range","description":"Value for kind.","type":"string"},"max":{"description":"Value for max.","maximum":10000,"minimum":0,"type":"integer"},"min":{"description":"Value for min.","maximum":10000,"minimum":0,"type":"integer"}},"required":["kind","min","max"],"type":"object"}]},"exact":{"$ref":"#/$defs/__schema0","description":"Value for exact."},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"maxItems":5,"type":"array"},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem","http","websocket","shim","replay_transition"],"type":"string"}},"required":["id","source","exact"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"language":{"description":"Value for language.","oneOf":[{"additionalProperties":false,"properties":{"happens_before":{"default":[],"description":"Value for happens before.","items":{"additionalProperties":false,"properties":{"after":{"description":"The later or right-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"before":{"description":"The earlier or left-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["before","after"],"type":"object"},"maxItems":4096,"type":"array"},"kind":{"const":"partial_order","description":"Value for kind.","type":"string"},"not_before":{"default":[],"description":"Value for not before.","items":{"additionalProperties":false,"properties":{"anchor":{"description":"Value for anchor.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"event":{"description":"Value for event.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["event","anchor"],"type":"object"},"maxItems":4096,"type":"array"},"prefix":{"default":[],"description":"Value for prefix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":4096,"type":"array"},"suffix":{"default":[],"description":"Value for suffix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":4096,"type":"array"},"unordered_groups":{"default":[],"description":"Value for unordered groups.","items":{"additionalProperties":false,"properties":{"events":{"description":"Value for events.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":256,"minItems":2,"type":"array"}},"required":["events"],"type":"object"},"maxItems":256,"type":"array"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finite_traces","description":"Value for kind.","type":"string"},"variants":{"description":"Value for variants.","items":{"additionalProperties":false,"properties":{"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"trace":{"description":"Value for trace.","items":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},{"additionalProperties":false,"properties":{"unordered":{"description":"Value for unordered.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":256,"minItems":2,"type":"array"}},"required":["unordered"],"type":"object"}]},"maxItems":4096,"type":"array"}},"required":["id","trace"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["kind","variants"],"type":"object"}]},"version":{"const":1,"description":"Value for version.","type":"number"}},"required":["version","events","language"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record capture disagreement durably","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"session","name":"compare_process_captures","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"exit":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"filesystem":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"first_divergence":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"none","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"left_at_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"right_at_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"found","type":"string"}},"required":["status","dimension","index","left_at_ms","right_at_ms","left","right"],"type":"object"}]},"interaction":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"process":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"protocol":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"shim":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"terminal":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"trace":{"additionalProperties":false,"properties":{"diagnostic":{"anyOf":[{"additionalProperties":false,"properties":{"event_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"type":"array"},"kind":{"enum":["journal","predicate","cardinality","edge","prefix","suffix","trace"],"type":"string"},"locations":{"items":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["collection","index","capture_order"],"type":"object"},"type":"array"},"message":{"type":"string"},"side":{"enum":["left","right"],"type":"string"}},"required":["kind","side","message","event_ids","locations"],"type":"object"},{"type":"null"}]},"left":{"additionalProperties":false,"properties":{"matched_variant":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},{"type":"null"}]},"raw_trace":{"items":{"additionalProperties":false,"properties":{"event_id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"location":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["collection","index","capture_order"],"type":"object"}},"required":["event_id","location"],"type":"object"},"type":"array"},"satisfied_constraints":{"items":{"type":"string"},"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["status","matched_variant","satisfied_constraints","raw_trace"],"type":"object"},"right":{"additionalProperties":false,"properties":{"matched_variant":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},{"type":"null"}]},"raw_trace":{"items":{"additionalProperties":false,"properties":{"event_id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"location":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["collection","index","capture_order"],"type":"object"}},"required":["event_id","location"],"type":"object"},"type":"array"},"satisfied_constraints":{"items":{"type":"string"},"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["status","matched_variant","satisfied_constraints","raw_trace"],"type":"object"},"verdict":{"enum":["equivalent","different","nonconforming","unknown"],"type":"string"}},"required":["verdict","left","right","diagnostic"],"type":"object"}},"required":["status","terminal","interaction","exit","filesystem","protocol","process","shim","first_divergence","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Process Captures"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two bounded sets of inventory_artifact Evidence pages by logical occurrence path, content identity, metadata, and graph relations. Pages must share and satisfy their graph commitment; every delta cites both sets, and gaps yield truncated or unknown, never equivalence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_ids":["ev_b74d3ff6cdf54af4e4f3dab00965780cb5ef2b375188c75c1980d0998c5a05a4"],"limit":100,"offset":0,"right_evidence_ids":["ev_74ecec364f3987b332db851177d2117a89d49df4ba89ab5d87299940092d7bb4"]}],"properties":{"left_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the left observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the right observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record incomplete or differing evidence","type":"boolean"}},"required":["left_evidence_ids","right_evidence_ids"],"type":"object"},"kind":"session","name":"compare_artifacts","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["added","removed","changed","unknown","contradiction"],"type":"string"},"dimensions":{"items":{"enum":["content","kind","format","size","executable","relations","metadata","availability","integrity"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":200,"minItems":2,"type":"array"},"left_artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"left_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"right_artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"right_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["classification","logical_path","dimensions","left_occurrence_id","right_occurrence_id","left_artifact_id","right_artifact_id","evidence_links"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"left_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"contradiction":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","added","removed","changed","unknown","contradiction"],"type":"object"}},"required":["status","left_manifest_id","right_manifest_id","summary","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Artifacts"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two explicit bounded sets of analyze_function Evidence pages across identity, exact provider text, calls, references, strings, and address-normalized CFG topology. Missing or provider-incompatible facets remain truncated or unknown; every conclusion cites both Evidence sets.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]}],"properties":{"left_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the left observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the right observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_ids","right_evidence_ids"],"type":"object"},"kind":"session","name":"compare_functions","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"conclusion_kind":{"enum":["derived_relationship","contradiction","unresolved_branch"],"type":"string"},"dimension":{"enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":200,"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown"],"type":"string"},"text_delta":{"anyOf":[{"additionalProperties":false,"properties":{"added_lines":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hunks":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed_lines":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["added_lines","removed_lines","hunks"],"type":"object"},{"type":"null"}]}},"required":["dimension","status","left_digest","right_digest","left_count","right_count","text_delta","conclusion_kind","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"dimensions":{"items":{"additionalProperties":false,"properties":{"conclusion_kind":{"enum":["derived_relationship","contradiction","unresolved_branch"],"type":"string"},"dimension":{"enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":200,"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown"],"type":"string"},"text_delta":{"anyOf":[{"additionalProperties":false,"properties":{"added_lines":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hunks":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed_lines":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["added_lines","removed_lines","hunks"],"type":"object"},{"type":"null"}]}},"required":["dimension","status","left_digest","right_digest","left_count","right_count","text_delta","conclusion_kind","evidence_links","limitations"],"type":"object"},"maxItems":8,"minItems":8,"type":"array"},"function_match":{"additionalProperties":false,"properties":{"left_name":{"type":"string"},"method":{"enum":["explicit","symbol"],"type":"string"},"right_name":{"type":"string"},"status":{"enum":["matched","mismatched","ambiguous","unknown"],"type":"string"}},"required":["status","method","left_name","right_name"],"type":"object"},"left_subject_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_subject_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","changed","truncated","unknown"],"type":"object"}},"required":["status","function_match","left_subject_sha256","right_subject_sha256","summary","dimensions","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Functions"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two canonical Evidence v2 bundles by exact record membership, explicit one-to-one observation pairs, and complete residual-unknown revision histories. Missing bundle members describe omission only, never behavioral equivalence; output is digest-anchored and deterministically paginated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_bundle_path":"/approved/left-evidence.json","limit":100,"offset":0,"record_pairs":[],"right_bundle_path":"/approved/right-evidence.json"}],"properties":{"left_bundle_path":{"description":"Local filesystem path for left bundle.","maxLength":4096,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"record_pairs":{"default":[],"description":"Value for record pairs.","items":{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"right_bundle_path":{"description":"Local filesystem path for right bundle.","maxLength":4096,"minLength":1,"type":"string"}},"required":["left_bundle_path","right_bundle_path"],"type":"object"},"kind":"session","name":"compare_bundles","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["added","removed","changed","unknown","history_advanced","history_diverged"],"type":"string"},"conclusion_kind":{"enum":["observed_change","contradiction","unresolved_branch"],"type":"string"},"entity":{"enum":["evidence","residual_unknown"],"type":"string"},"key":{"minLength":1,"type":"string"},"left_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"left_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"right_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"right_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"}},"required":["entity","key","classification","conclusion_kind","left_evidence_ids","right_evidence_ids","left_digest","right_digest","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"left_bundle_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_bundle_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","changed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"records_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_advanced":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_diverged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["records_unchanged","records_added","records_removed","records_changed","unknowns_unchanged","unknowns_added","unknowns_removed","unknowns_advanced","unknowns_diverged","unresolved"],"type":"object"}},"required":["status","left_bundle_sha256","right_bundle_sha256","summary","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Bundles"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Aggregate validated comparison Evidence, or automatically run and resume a persistent cross-version artifact investigation beneath an approved evidence root. Runtime observations remain distinct from static behavior candidates; missing or incomplete comparisons produce unresolved findings, never causal claims.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":{"items":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null}],"limit":100,"next_offset":null,"offset":0,"total":2},"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":null,"left_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","limitations":[],"right_count":null,"right_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"calls","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"references","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"strings_names","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"cfg","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":1,"left_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","limitations":[],"right_count":1,"right_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","status":"unchanged","text_delta":null}],"function_match":{"left_name":"main","method":"symbol","right_name":"main","status":"matched"},"left_subject_sha256":"0000000000000000000000000000000000000000000000000000000000000000","limitations":[],"right_subject_sha256":"1111111111111111111111111111111111111111111111111111111111111111","status":"unknown","summary":{"changed":1,"truncated":0,"unchanged":6,"unknown":1}},"operation":"compare_functions","parameters":{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]},"predicate_type":"rea.function-comparison/v1","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"limit":100,"offset":0}],"properties":{"comparisons":{"default":[],"description":"Validated comparison Evidence records to aggregate.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"type":"array"},"investigation_run":{"additionalProperties":false,"description":"Value for investigation run.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_workspace_revision":{"description":"Expected workspace revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"integrity_continue_approved":{"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"default":"fail","description":"Value for integrity policy.","enum":["fail","record-and-continue"],"type":"string"},"left_path":{"description":"Local filesystem path for left.","maxLength":4096,"minLength":1,"type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"options":{"additionalProperties":false,"default":{"change_limit":500,"max_compression_ratio":1000,"max_depth":20,"max_entries":10000,"max_entry_bytes":268435456,"max_path_bytes":4096,"max_total_bytes":1073741824,"page_size":500},"description":"Value for options.","properties":{"change_limit":{"default":500,"description":"Maximum number of change entries to return.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"page_size":{"default":500,"description":"Value for page size.","maximum":500,"minimum":1,"type":"integer"}},"type":"object"},"replay_run_id":{"description":"Value for replay run id.","pattern":"^run_[a-f0-9]{64}$","type":"string"},"right_path":{"description":"Local filesystem path for right.","maxLength":4096,"minLength":1,"type":"string"},"workspace_name":{"default":"default","description":"Value for workspace name.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","left_path","right_path"],"type":"object"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"type":"object"},"kind":"session","name":"find_changed_behavior","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"behavior_status":{"enum":["observed_changed","observed_unchanged","unknown","truncated"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":3,"type":"array"},"findings":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["observed_change","derived_relationship","contradiction","unresolved_branch"],"type":"string"},"dimension":{"minLength":1,"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":201,"minItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"scope":{"enum":["runtime","protocol","resource","static_candidate"],"type":"string"},"source_comparison_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["scope","dimension","classification","status","source_comparison_id","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"investigation_run":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"inventory_evidence_count":{"maximum":200,"minimum":2,"type":"integer"},"left_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"right_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"run_id":{"pattern":"^run_[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"workspace_id":{"pattern":"^ws_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","workspace_id","run_id","left_manifest_id","right_manifest_id","inventory_evidence_count","comparison_evidence_id","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"summary":{"additionalProperties":false,"properties":{"contradictions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observed_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["observed_changes","static_candidates","contradictions","unresolved"],"type":"object"}},"required":["behavior_status","summary","findings","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Find Changed Behavior"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Build bounded shortest-first direct-callee paths from explicit analyze_function Evidence groups using exact canonical addresses. Missing dossiers, incomplete callee pages, provider mixing, and depth frontiers remain unknown; every node and edge cites source Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"functions":[{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"basic_blocks":{"items":[{"end":"0x1001","start":"0x1000","successors":[]}],"next_offset":null,"returned":1,"total":1,"truncated":false},"callees":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"callers":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"comments":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"incoming_references":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"instruction_scan":{"scanned":1,"truncated":false},"outgoing_references":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":{"next_offset":null,"returned_chars":9,"text":"return 0;","total_chars":9,"truncated":false},"referenced_names":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"referenced_strings":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false}},"operation":"analyze_function","parameters":{"assembly_offset":0,"collection_offset":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"include_assembly":false,"limit":100,"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main","pseudocode_offset":0},"predicate_type":"rea.analysis/v2","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"schema_version":2,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"mach-o","local_path":"/tmp/function-0","name":"function-0"}}],"goal":{"address":"0x1000"},"limit":100,"max_depth":8,"max_paths":10,"offset":0,"start":{"address":"0x1000"}}],"properties":{"functions":{"description":"Value for functions.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}]},"maxItems":500,"minItems":1,"type":"array"},"goal":{"additionalProperties":false,"description":"Value for goal.","properties":{"address":{"description":"Value for address.","pattern":"^0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_depth":{"default":8,"description":"Maximum permitted depth for this operation.","maximum":32,"minimum":0,"type":"integer"},"max_paths":{"default":10,"description":"Maximum permitted paths for this operation.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"start":{"additionalProperties":false,"description":"Value for start.","properties":{"address":{"description":"Value for address.","pattern":"^0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["functions","start","goal"],"type":"object"},"kind":"session","name":"build_call_path","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"minItems":1,"type":"array"},"explored":{"additionalProperties":false,"properties":{"depth_reached":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["nodes","edges","depth_reached"],"type":"object"},"goal":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"source":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"target":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"}},"required":["source","target","evidence_links"],"type":"object"},"maxItems":32,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3300,"minItems":1,"type":"array"},"hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","evidence_links"],"type":"object"},"maxItems":33,"minItems":1,"type":"array"}},"required":["hops","nodes","edges","evidence_links"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"lower_bound":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":100,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","offset","limit","total","returned","truncated","lower_bound","next_offset"],"type":"object"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"max_depth":{"maximum":32,"minimum":0,"type":"integer"},"max_paths":{"maximum":100,"minimum":1,"type":"integer"}},"required":["max_depth","max_paths","exhaustive"],"type":"object"},"shortest_hops":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"start":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"enum":["found","not_found","unknown","truncated"],"type":"string"}},"required":["status","start","goal","shortest_hops","search_scope","explored","paths","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Build Call Path"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate explicit caller-declared hypotheses between exact static comparison findings and runtime comparison dimensions. Similar names or paths are never auto-matched, consistent cochange never proves causality, and unknown or truncated inputs remain unresolved.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"mappings":[{"hypothesis":{"expected_pattern":"static_only","statement":"Static implementation changed without terminal change."},"runtime":{"comparison_evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","dimension":"terminal"},"side_alignment":"left_to_left","static":{"comparison_evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","selector":{"dimension":"pseudocode","kind":"function"}}}],"offset":0,"runtime_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","evidence_links":["ev_0014950a3b67b96d5d182a51c5a271959828fe6a91db55fc507dd5a9c2a5ecaf","ev_5d45bc669ea10694f3bdf3b325e2048844da96a621b717ad252d667af53df590"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"exit":"unchanged","filesystem":"unchanged","first_divergence":{"status":"none"},"interaction":"unchanged","limitations":[],"process":"unchanged","protocol":"unchanged","shim":"unchanged","status":"unchanged","terminal":"unchanged"},"operation":"compare_process_captures","parameters":{"left_evidence_id":"ev_0014950a3b67b96d5d182a51c5a271959828fe6a91db55fc507dd5a9c2a5ecaf","left_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"right_evidence_id":"ev_5d45bc669ea10694f3bdf3b325e2048844da96a621b717ad252d667af53df590","right_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10}},"predicate_type":"rea.process-comparison/v3","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"schema_version":2,"subject":null}],"static_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":{"items":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null}],"limit":100,"next_offset":null,"offset":0,"total":2},"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":null,"left_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","limitations":[],"right_count":null,"right_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"calls","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"references","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"strings_names","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"cfg","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":1,"left_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","limitations":[],"right_count":1,"right_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","status":"unchanged","text_delta":null}],"function_match":{"left_name":"main","method":"symbol","right_name":"main","status":"matched"},"left_subject_sha256":"0000000000000000000000000000000000000000000000000000000000000000","limitations":[],"right_subject_sha256":"1111111111111111111111111111111111111111111111111111111111111111","status":"unknown","summary":{"changed":1,"truncated":0,"unchanged":6,"unknown":1}},"operation":"compare_functions","parameters":{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]},"predicate_type":"rea.function-comparison/v1","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"schema_version":2,"subject":null}]}],"properties":{"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mappings":{"description":"Value for mappings.","items":{"additionalProperties":false,"properties":{"hypothesis":{"additionalProperties":false,"description":"Value for hypothesis.","properties":{"expected_pattern":{"description":"Expected pattern used to reject stale or mismatched input.","enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"description":"Value for statement.","maxLength":500,"minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"runtime":{"additionalProperties":false,"description":"Value for runtime.","properties":{"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"}},"required":["comparison_evidence_id","dimension"],"type":"object"},"side_alignment":{"description":"Value for side alignment.","enum":["left_to_left","left_to_right"],"type":"string"},"static":{"additionalProperties":false,"description":"Value for static.","properties":{"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"selector":{"description":"Value for selector.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact","description":"Value for kind.","type":"string"},"logical_path":{"description":"Local filesystem path for logical.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","logical_path"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"description":"Value for dimension.","enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","dimension"],"type":"object"}]}},"required":["comparison_evidence_id","selector"],"type":"object"}},"required":["static","runtime","side_alignment","hypothesis"],"type":"object"},"maxItems":500,"minItems":1,"type":"array"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_comparisons":{"description":"Value for runtime comparisons.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"static_comparisons":{"description":"Value for static comparisons.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"additionalProperties":false,"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"additionalProperties":false,"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["static_comparisons","runtime_comparisons","mappings"],"type":"object"},"kind":"session","name":"correlate_static_and_runtime","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"correlations":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["hypothesis","contradiction","unresolved_branch"],"type":"string"},"correlation_id":{"pattern":"^cor_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":2,"type":"array"},"hypothesis":{"additionalProperties":false,"properties":{"expected_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"maxLength":500,"minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"observed_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged","unknown","truncated"],"type":"string"},"runtime":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["comparison_evidence_id","dimension","status"],"type":"object"},"side_alignment":{"enum":["left_to_left","left_to_right"],"type":"string"},"static":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"conclusion_kind":{"enum":["derived_relationship","contradiction","unresolved_branch"],"type":"string"},"selector":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact","type":"string"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","logical_path"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"function","type":"string"}},"required":["kind","dimension"],"type":"object"}]},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["comparison_evidence_id","selector","status","conclusion_kind"],"type":"object"}},"required":["correlation_id","static","runtime","side_alignment","hypothesis","observed_pattern","classification","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":2,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"status":{"enum":["correlated","contradicted","unknown","truncated"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"contradictions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hypotheses":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["hypotheses","contradictions","unresolved"],"type":"object"}},"required":["status","summary","correlations","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Correlate Static And Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Verify a finite typed behavioral and structural specification against a canonical Evidence bundle. Pass means every declared claim has complete comparable authority—not global source equivalence; changed claims fail and missing, limited, or unresolved evidence stays unknown.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0,"specification":{"claims":[{"claim_id":"terminal-output","comparison_evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","dimension":"terminal","kind":"behavioral","title":"Terminal output remains equivalent"}],"name":"Terminal compatibility","schema_version":1}}],"properties":{"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","maxLength":200,"minLength":1,"type":"string"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"}},"required":["workspace_id","revision","revision_sha256","boundary_id"],"type":"object"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"specification":{"additionalProperties":false,"description":"Value for specification.","properties":{"claims":{"description":"Value for claims.","items":{"oneOf":[{"additionalProperties":false,"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"kind":{"const":"behavioral","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"},{"additionalProperties":false,"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"structural-function","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"},{"additionalProperties":false,"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"const":"overall","description":"Value for dimension.","type":"string"},"kind":{"const":"structural-artifact","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"}]},"maxItems":100,"minItems":1,"type":"array"},"name":{"description":"Exact name used by this operation.","maxLength":200,"minLength":1,"type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","name","claims"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["specification"],"type":"object"},"kind":"session","name":"verify_reconstruction","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"description":"Session resource URI for the recorded Evidence v2 observation.","pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"claims":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"claim_id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"minLength":1,"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":201,"minItems":3,"type":"array"},"kind":{"enum":["behavioral","structural-function","structural-artifact"],"type":"string"},"left_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observed_status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"right_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["claim_id","kind","dimension","status","observed_status","comparison_evidence_id","left_evidence_ids","right_evidence_ids","evidence_links","unknown_ids","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":100,"minimum":1,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"claim_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["operation","rationale","claim_ids","unknown_ids"],"type":"object"},"maxItems":2000,"type":"array"},"specification_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"behavioral":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"failed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"passed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":100,"minimum":1,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","passed","failed","unknown","behavioral","structural"],"type":"object"}},"required":["status","specification_sha256","summary","claims","recommended_probes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Verify Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"List current residual-unknown heads in deterministic ID order, with optional exact status, severity, and domain filters. Pages default to 100 items; while has_more is true, pass next_offset as offset and continue until false. This is read-only; unresolved, contradicted, and non-truth dispositions remain distinct.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0}],"properties":{"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"}},"type":"object"},"kind":"session","name":"list_unknowns","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"unknown":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"uri":{"pattern":"^rea:\\\\/\\\\/unknown\\\\/unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown","uri"],"type":"object"},"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"List Unknowns"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Create one deterministic residual unknown and immutable mutation evidence. Requires approved: true, validates all evidence and relationship references, and rejects duplicate stable identity.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"contradicting_evidence_ids":[],"domain":"protocol","question":"Does this branch require an unavailable external service?","recommended_probes":[{"operation":"capture_process_scenario","rationale":"Replay branch."}],"relationships":[],"required_authority":"controlled-replay","required_confidence":"observed","required_environment":null,"severity":"medium","supporting_evidence_ids":[]}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"contradicting_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"additionalProperties":false,"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"supporting_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["question","severity","domain","required_authority","required_confidence","required_environment","recommended_probes","relationships","approved"],"type":"object"},"kind":"session","name":"record_unknown","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Record Unknown"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Append one immutable full-state revision and mutation evidence. Requires approved: true and exact expected_revision; stale concurrent writers fail instead of overwriting newer analysis.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"contradicting_evidence_ids":[],"expected_revision":1,"recommended_probes":[],"relationships":[],"required_authority":"controlled-replay","required_confidence":"observed","required_environment":null,"resolution":null,"severity":"medium","status":"investigating","supporting_evidence_ids":[],"unknown_id":"unk_0000000000000000000000000000000000000000000000000000000000000000"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_revision":{"description":"Expected revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"recommended_probes":{"description":"Value for recommended probes.","items":{"additionalProperties":false,"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id","expected_revision","approved","status","severity","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution"],"type":"object"},"kind":"session","name":"update_unknown","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Update Unknown"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Revalidate the current residual-unknown head against live bundled evidence, exact authority/confidence/environment requirements, and revision integrity. Withdrawn and out-of-scope dispositions are not truth claims.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"unknown_id":"unk_0000000000000000000000000000000000000000000000000000000000000000"}],"properties":{"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id"],"type":"object"},"kind":"session","name":"verify_unknown_resolution","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"truthVerified":{"type":"boolean"},"unknown":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"valid":{"type":"boolean"}},"required":["valid","truthVerified","unknown"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Verify Unknown Resolution"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Evaluate ordered HTTP and WebSocket events directly against one validated finite replay machine without opening sockets or launching a target. Returns every decision, a capture-value-free transition journal, one redacted action table entry per used transition, captured aliases, final state, and exact configured and consumed limits.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"events":[{"at_ms":0,"body":"{\\"token\\":\\"opaque\\"}","connection":"not_applicable","headers":{},"method":"POST","path":"/callback","protocol":"http"}],"machine":{"initial_state":"waiting","limits":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"max_transitions":1,"states":[{"max_visits":100000,"name":"waiting","terminal":false},{"max_visits":100000,"name":"complete","terminal":true}],"transitions":[{"actions":[{"body":"","headers":{},"status":204,"type":"http_response"}],"captures":[{"sensitive":true,"value":{"path":["token"],"source":"request_json"},"variable":"token"}],"from":"waiting","guards":[],"id":"accept_callback","max_uses":1,"priority":100,"to":"complete","trigger":{"body":null,"headers":{},"method":"POST","path":"/callback","protocol":"http"}}]}}],"properties":{"events":{"description":"Value for events.","items":{"oneOf":[{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"const":"not_applicable","description":"Value for connection.","type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","type":"null"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","type":"null"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"}]},"maxItems":10000,"type":"array"},"machine":{"additionalProperties":false,"description":"Value for machine.","properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":10000000,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":1000,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":300000,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"max_visits":{"default":100000,"description":"Maximum permitted visits for this operation.","maximum":100000,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"transitions":{"description":"Value for transitions.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","description":"Value for type.","type":"string"}},"required":["type","status","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"minItems":1,"type":"array"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"guards":{"description":"Value for guards.","items":{"additionalProperties":false,"properties":{"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":10000,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","method","path"],"type":"object"},{"additionalProperties":false,"properties":{"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"},{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"}]}},"required":["id","from","to","trigger","actions","max_uses"],"type":"object"},"maxItems":2000,"minItems":1,"type":"array"}},"required":["initial_state","states","transitions","max_transitions"],"type":"object"}},"required":["machine","events"],"type":"object"},"kind":"session","name":"run_replay_machine","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"decisions":{"items":{"additionalProperties":false,"properties":{"event_sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outcome":{"anyOf":[{"const":"matched","type":"string"},{"enum":["unmatched","invalid_state","guard_failed","transition_exhausted","invalid_capture","unexpected_reconnect","limit_exhausted"],"type":"string"}]},"transition_sequence":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["event_sequence","outcome","transition_sequence"],"type":"object"},"maxItems":10000,"type":"array"},"final_state":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"initial_state":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"properties":{"configured":{"additionalProperties":false,"properties":{"bytes":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"connections":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"duration_ms":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"messages":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"transitions":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["transitions","connections","messages","bytes","duration_ms"],"type":"object"},"usage":{"additionalProperties":false,"properties":{"admitted_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"last_at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"messages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"offered_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"transitions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offered_events","admitted_events","transitions","connections","messages","bytes","last_at_ms"],"type":"object"}},"required":["configured","usage"],"type":"object"},"schema_version":{"const":1,"type":"number"},"terminal":{"type":"boolean"},"transition_actions":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"type":"string"},"propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","type":"string"}},"required":["type","status","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"type":"array"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["transition_id","actions"],"type":"object"},"maxItems":2000,"type":"array"},"transition_journal":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"captured_aliases":{"items":{"additionalProperties":false,"properties":{"name":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"sensitive":{"type":"boolean"}},"required":["name","sensitive"],"type":"object"},"maxItems":32,"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"state_before":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["sequence","at_ms","transition_id","state_before","state_after","captured_aliases"],"type":"object"},"maxItems":10000,"type":"array"}},"required":["schema_version","initial_state","final_state","terminal","decisions","transition_journal","transition_actions","limits"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Run Replay Machine"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Retain the current canonical Evidence v2 bundle as an immutable session resource. Returns a compact digest summary and exact opaque URI; copy that URI unchanged and call MCP resources/read (Codex: read_mcp_resource) for the full bundle. Repeating an unchanged snapshot is idempotent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"session","name":"snapshot_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"bundle_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"bundle_uri":{"pattern":"^rea:\\\\/\\\\/evidence-bundle\\\\/[a-f0-9]{64}$","type":"string"},"bundle_version":{"const":2,"type":"number"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scope":{"const":"session","type":"string"},"survives_session":{"const":false,"type":"boolean"},"unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["bundle_digest","bundle_version","bytes","records","unknowns","scope","survives_session","bundle_uri"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Snapshot Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Release one immutable session-retained Evidence v2 bundle by exact digest. This is the recovery operation when bounded bundle retention is exhausted; releasing an unknown digest is idempotent and reports released: false.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"bundle_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}],"properties":{"bundle_digest":{"description":"Value for bundle digest.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["bundle_digest"],"type":"object"},"kind":"session","name":"release_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"bundle_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"released":{"type":"boolean"}},"required":["bundle_digest","released"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Release Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compose the selected document, current address, and containing/current procedure into one provider-neutral result. The result reflects sequential provider observations, not an atomic cursor snapshot; a cursor outside any procedure returns procedure: null. Scalar navigation getters remain available for evaluation and compatibility.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"document":{"description":"Exact provider document or program identity.","minLength":1,"type":"string"}},"type":"object"},"kind":"session","name":"get_navigation_context","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"address":{"type":"string"},"document":{"type":"string"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["document","address","procedure"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Get Navigation Context"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one explicit reproducible address for its analyzed name, containing procedure, regular and inline comments, and matching bookmarks. Each unsupported facet returns a typed unavailable outcome; xrefs, assembly, and pseudocode remain separate bounded follow-ups.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"document":{"description":"Exact provider document or program identity.","minLength":1,"type":"string"}},"required":["address"],"type":"object"},"kind":"session","name":"inspect_address_context","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"description":"Primary structured result returned by this operation.","properties":{"address":{"type":"string"},"bookmarks":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"comment":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"document":{"anyOf":[{"type":"string"},{"type":"null"}]},"inline_comment":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"name":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"procedure":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]}},"required":["address","document","name","procedure","comment","inline_comment","bookmarks"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Inspect Address Context"}]}'; + '{"auxiliaryProviders":[{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"inventory_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"inspect_artifact","outputContractVersion":1,"pagination":"none","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":true,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["DMG child inventory is macOS-only and requires per-call approval plus operator policy; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":120000},"operation":"extract_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null}],"identity":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"}},{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_macho","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_signature","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"inspect_plist","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":null,"timeoutMs":30000},"operation":"list_architectures","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":true,"inputContractVersion":1,"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":30000},"operation":"demangle_swift","outputContractVersion":1,"pagination":"none","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null}],"identity":{"id":"native-macos","name":"macOS native inspection utilities","version":null}},{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability inventories PE/CLI identity only; inspect_managed_members admits bounded metadata members, signatures, and CIL anchors.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_artifact","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability decodes bounded PE/CLI metadata members, signatures, and file-backed method bodies; decompiled C# and cross-build matching are separate future contracts.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_members","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"exhaustive":false,"inputContractVersion":1,"limitations":["This capability inventories managed declarations for native boundaries only; native exports, thunks, and addresses require separate native-provider evidence.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"limits":{"maxPayloadBytes":4194304,"maxResults":500,"timeoutMs":null},"operation":"inspect_managed_native_boundaries","outputContractVersion":1,"pagination":"offset","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"reason":null}],"identity":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"}}],"catalog":[{"analysisOperation":"address_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve the primary analyzed name at a code or data address. Headless providers require an explicit address; GUI providers may default to their current cursor. Null means the provider has no primary name at that address.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"address_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Address Name"},{"analysisOperation":"comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read the regular analysis comment at an address, defaulting to the current cursor. This is read-only and returns null when no comment exists; use set_comment to persist a finding.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Comment"},{"analysisOperation":"current_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return Hopper\'s current cursor address for the selected document. Use only for interactive navigation state; prefer explicit addresses in reproducible investigations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Address"},{"analysisOperation":"current_procedure","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the analyzed procedure containing Hopper\'s current cursor. Use procedure_info or analyze_function next; this depends on GUI cursor state and is not an exhaustive lookup.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_procedure","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Procedure"},{"analysisOperation":"current_document","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the document currently selected by REA\'s Hopper bridge. Use list_documents before switching when several documents are open.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"current_document","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Current Document"},{"analysisOperation":"goto_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Move Hopper\'s GUI cursor to a hexadecimal address and return the resolved address. This changes navigation state but not analysis data; use explicit-address tools for headless workflows.","effects":{"accessesNetwork":false,"changesUiState":true,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"goto_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Goto Address"},{"analysisOperation":"inline_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read the inline instruction comment at an address, defaulting to the current cursor. Returns null when absent; use set_inline_comment to write one.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"inline_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inline Comment"},{"analysisOperation":"list_bookmarks","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every bookmark in the selected Hopper document as address and name pairs. Use bookmarks as analyst-authored navigation aids; this does not discover code references.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_bookmarks","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Bookmarks"},{"analysisOperation":"list_documents","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List provider program or document identities. Hopper may expose several documents; a Ghidra headless session contains exactly its one imported Program.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_documents","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Documents"},{"analysisOperation":"list_names","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through analyzed memory and external symbols as address/value pairs. Provider metadata distinguishes Ghidra primary, dynamic, external, type, and source facts when available; follow next_offset before claiming exhaustive coverage.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"limit":100,"offset":0}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_names","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Names"},{"analysisOperation":"list_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through analyzed procedures as address/value pairs after provider analysis. Ghidra metadata distinguishes thunks and external functions; follow next_offset for exhaustive coverage and use returned addresses in later function operations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"limit":100,"offset":0}],"properties":{"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_procedures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Procedures"},{"analysisOperation":"list_segments","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List segments or memory blocks using exclusive end addresses. Ghidra reports block permissions, address space, image base, initialization, and overlay facts; Hopper marks unavailable permissions explicitly.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_segments","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address_space":{"type":"string"},"end":{"type":"string"},"executable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"image_base":{"type":"string"},"initialized":{"type":"boolean"},"name":{"type":"string"},"overlay":{"type":"boolean"},"permissions":{"anyOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"source":{"const":"ghidra-memory-block","type":"string"}},"required":["available","source"],"type":"object"}]},"provenance":{"enum":["hopper-public-python-api","ghidra-memory-block"],"type":"string"},"readable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"sections":{"items":{"additionalProperties":false,"properties":{"address_space":{"type":"string"},"end":{"type":"string"},"executable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"image_base":{"type":"string"},"initialized":{"type":"boolean"},"name":{"type":"string"},"overlay":{"type":"boolean"},"permissions":{"anyOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"source":{"const":"ghidra-memory-block","type":"string"}},"required":["available","source"],"type":"object"}]},"provenance":{"enum":["hopper-public-python-api","ghidra-memory-block"],"type":"string"},"readable":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"start":{"type":"string"},"writable":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","start","end","readable","writable","executable","permissions","provenance"],"type":"object"},"type":"array"},"start":{"type":"string"},"writable":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","start","end","readable","writable","executable","permissions","provenance","sections"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Segments"},{"analysisOperation":"list_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Page through provider-defined strings, or filter to one address, as address/value pairs. Ghidra reports charset, missing-terminator status, byte length, and explicit value truncation; follow next_offset for exhaustive results.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"limit":100,"offset":0}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"list_strings","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"procedure":{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target"],"type":"object"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"symbol":{"additionalProperties":false,"properties":{"dynamic":{"type":"boolean"},"external":{"type":"boolean"},"primary":{"type":"boolean"},"source":{"enum":["default","analysis","ai","imported","user_defined"],"type":"string"},"type":{"type":"string"}},"required":["primary","dynamic","external","type","source"],"type":"object"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Strings"},{"analysisOperation":"next_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the next analyzed object address after an explicit address or current cursor. This is a navigation primitive, not instruction-flow or CFG analysis.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"next_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Next Address"},{"analysisOperation":"prev_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the previous analyzed instruction start before an explicit address or current cursor. This is a navigation primitive and may fail at document boundaries.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"prev_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Prev Address"},{"analysisOperation":"procedure_address","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an unambiguous procedure symbol name or provider-normalized address to its canonical entry address. External address spaces remain explicit; use the result before xrefs, assembly, or decompilation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_address","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Address"},{"analysisOperation":"procedure_assembly","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return assembly for one analyzed procedure identified by symbol or hexadecimal address. Use when pseudocode loses calling-convention or instruction-level detail; output is currently returned as one unpaginated string.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_assembly","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Assembly"},{"analysisOperation":"procedure_callees","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the provider\'s resolved direct callees for one procedure identified by symbol or address. Unresolved indirect calls may be absent; use analyze_function and typed references to preserve available edge uncertainty.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callees","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Callees"},{"analysisOperation":"procedure_callers","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the provider\'s resolved direct callers for one procedure identified by symbol or address. Results reflect completed static analysis and may omit unresolved indirect references.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callers","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Callers"},{"analysisOperation":"procedure_info","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return bounded metadata for one procedure identified by symbol or address: entrypoint, signature, locals, size, and block count. Follow with decompilation or assembly for behavior.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_info","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"basicblock_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"entrypoint":{"type":"string"},"length":{"minimum":0,"type":"number"},"locals":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"provenance":{"minLength":1,"type":"string"}},"required":["description","provenance"],"type":"object"},"type":"array"},"name":{"type":"string"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","entrypoint","basicblock_count","length","signature","locals","classification"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Info"},{"analysisOperation":"read_function_instructions","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read one offset-paginated window of raw instructions for an analyzed procedure without decompilation, caller discovery, or whole-program string/name scans. Use this fast path for instruction-level orientation; follow next_offset when truncated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"limit":64,"offset":0,"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"limit":{"default":64,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":100000,"minimum":0,"type":"integer"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"read_function_instructions","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"instruction_scan_truncated":{"type":"boolean"},"instructions":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"instructions_scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"}},"required":["procedure","instructions","instructions_scanned","instruction_scan_truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Read Function Instructions"},{"analysisOperation":"read_bytes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read at most 4,096 analyzed bytes from one provider-normalized virtual address. The hexadecimal payload reports the exact returned length; incomplete reads remain explicit and unsupported provider APIs return typed capability unavailability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","length":16}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"length":{"default":256,"description":"Value for length.","maximum":4096,"minimum":1,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"read_bytes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"bytes_hex":{"pattern":"^(?:[a-f0-9]{2})*$","type":"string"},"complete":{"type":"boolean"},"requested_bytes":{"maximum":4096,"minimum":1,"type":"integer"},"returned_bytes":{"maximum":4096,"minimum":0,"type":"integer"}},"required":["address","requested_bytes","returned_bytes","bytes_hex","complete"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Read Bytes"},{"analysisOperation":"address_to_file_offset","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Map one provider-normalized virtual address to its original nonnegative file offset. Unmapped addresses fail explicitly, and providers without an authoritative mapping API return typed capability unavailability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"address_to_file_offset","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"file_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["address","file_offset"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Address To File Offset"},{"analysisOperation":"procedure_references","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return a bounded set of raw incoming or outgoing reference edges for one procedure. Endpoint procedures are resolved only from provider containment; Ghidra preserves observed reference kinds while providers without kind authority mark them unavailable.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"direction":"outgoing","limit":100,"max_instructions":500,"offset":0,"procedure":"main"}],"properties":{"direction":{"default":"outgoing","description":"Direction in which to traverse or compare relationships.","enum":["incoming","outgoing"],"type":"string"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_references","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"direction":{"enum":["incoming","outgoing"],"type":"string"},"instruction_scan_truncated":{"type":"boolean"},"instructions_scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"references":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]}},"required":["procedure","direction","references","instructions_scanned","instruction_scan_truncated"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure References"},{"analysisOperation":"procedure_pseudo_code","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decompile one analyzed procedure by symbol name or provider-normalized address. Returns provider-specific pseudocode, never original source or cross-provider text equivalence, and may return null; request procedure_assembly when instruction precision matters.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"procedure":"main"}],"properties":{"document":{"description":"The document name","type":"string"},"procedure":{"description":"The procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_pseudo_code","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Procedure Pseudo Code"},{"analysisOperation":"resolve_containing_procedure","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an arbitrary address, including an interior instruction or exact external entry, to its provider-analyzed containing procedure. A negative result distinguishes outside segments from not in a procedure and is never guessed from nearby symbols.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"resolve_containing_procedure","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Resolve Containing Procedure"},{"analysisOperation":"search_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search analyzed procedure names using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic and offset-paginated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"case_sensitive":false,"limit":100,"mode":"literal","offset":0,"pattern":"main"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"pattern":{"description":"The literal text or bounded regex pattern to search for","maxLength":256,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_procedures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value","value_truncated"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Search Procedures"},{"analysisOperation":"search_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search analyzed strings using literal matching by default or regex opt-in. Providers bound search work and reject regex constructs, paths, candidates, or cumulative work outside their finite budgets. Results are deterministic, offset-paginated, and explicitly truncated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"case_sensitive":false,"limit":100,"mode":"literal","offset":0,"pattern":"authorization failed"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"pattern":{"description":"The literal text or bounded regex pattern to search for","maxLength":256,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_strings","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"},"value_truncated":{"type":"boolean"}},"required":["address","value","value_truncated"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Search Strings"},{"analysisOperation":"set_address_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Assign an analyst name to one hexadecimal address and report Hopper\'s boolean result. This mutates analysis metadata; read it back with address_name before relying on it.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","name":"entry"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"name":{"description":"Exact name used by this operation.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","name"],"type":"object"},"kind":"official-proxy","name":"set_address_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Address Name"},{"analysisOperation":"set_addresses_names","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Assign analyst names to an address/name map and return per-address success booleans. This mutates analysis metadata; use for bounded batches and verify failures individually.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"names":{"0x1000":"entry"}}],"properties":{"document":{"description":"The document name","type":"string"},"names":{"additionalProperties":{"type":"string"},"description":"Value for names.","propertyNames":{"type":"string"},"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["names"],"type":"object"},"kind":"official-proxy","name":"set_addresses_names","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":{"type":"boolean"},"propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Addresses Names"},{"analysisOperation":"set_bookmark","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Create or replace a bookmark at a hexadecimal address. This mutates navigation metadata; verify with list_bookmarks and do not treat bookmarks as binary evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"name":{"description":"Exact name used by this operation.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"set_bookmark","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Bookmark"},{"analysisOperation":"set_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Write a regular analysis comment at a hexadecimal address and return whether readback matched. This mutates the Hopper document; use comments to record evidence IDs or reasoning.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","comment":"validated entry point"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"comment":{"description":"Exact analyst comment text to write.","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Comment"},{"analysisOperation":"set_current_document","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Select an already-open Hopper document by exact document name. This changes subsequent default-document routing; call list_documents first and prefer explicit document inputs where reproducibility matters.","effects":{"accessesNetwork":false,"changesUiState":true,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"document":"fixture"}],"properties":{"document":{"description":"Exact provider document or program identity.","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["document"],"type":"object"},"kind":"official-proxy","name":"set_current_document","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Current Document"},{"analysisOperation":"set_inline_comment","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Write an inline instruction comment at a hexadecimal address and return whether readback matched. This mutates analysis metadata; confirm with inline_comment.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000","comment":"calls parser"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"comment":{"description":"Exact analyst comment text to write.","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_inline_comment","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Set Inline Comment"},{"analysisOperation":"unset_bookmark","annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Remove the bookmark at a hexadecimal address and return whether it is absent. This mutates navigation metadata and does not alter binary bytes.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"address":"0x1000"}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"unset_bookmark","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Unset Bookmark"},{"analysisOperation":"xrefs","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return analyzed references to a code or data address, defaulting to the current cursor. Use to connect strings, globals, selectors, and functions; bare addresses are untyped and indirect references may be incomplete.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{"address":{"description":"A provider-normalized address; default memory uses 0x-prefixed hexadecimal","type":"string"},"document":{"description":"The document name","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record typed capability unavailability as a residual unknown","type":"boolean"}},"type":"object"},"kind":"official-proxy","name":"xrefs","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Xrefs"},{"analysisOperation":"swift_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover legacy-mangled Swift class procedures after exhaustively paging analyzed procedures. Returns at most 100 entries and scans at most 5,000 symbols; use analyze_swift_types for other Swift kinds.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pattern":""}],"properties":{"pattern":{"default":"","description":"Text or bounded pattern used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"swift_classes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"classes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"},"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["count","classes"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Swift Classes"},{"analysisOperation":"get_objc_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate Objective-C class labels after exhaustively paging names, optionally filtering by literal substring. Returns at most 100 classes; inspect matching metadata and references next.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pattern":""}],"properties":{"pattern":{"default":"","description":"Text or bounded pattern used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"get_objc_classes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"classes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"},"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["count","classes"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Objc Classes"},{"analysisOperation":"get_objc_protocols","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate Objective-C and Swift protocol labels after exhaustively paging names. Returns at most 100 entries; use xrefs or analyze_function to connect a protocol to implementations.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"enhanced","name":"get_objc_protocols","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"protocols":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["count","protocols"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Objc Protocols"},{"analysisOperation":"batch_decompile","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decompile up to 20 explicit procedure symbols or addresses concurrently. Returns ordered per-item ok/error variants and aggregate counts; use analyze_function for a richer single-function dossier.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"addresses":[]}],"properties":{"addresses":{"default":[],"description":"Ordered provider-normalized procedure addresses to analyze.","items":{"description":"A provider-normalized procedure address","type":"string"},"maxItems":20,"type":"array"}},"type":"object"},"kind":"enhanced","name":"batch_decompile","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"failed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"pseudocode":{"minLength":1,"type":"string"},"status":{"const":"ok","type":"string"}},"required":["address","status","pseudocode"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]},"status":{"const":"error","type":"string"}},"required":["address","status","error"],"type":"object"}]},"type":"array"},"succeeded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","total","succeeded","failed"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Batch Decompile"},{"analysisOperation":"get_call_graph","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Traverse the bound provider\'s caller or callee relationships from one symbol or address for at most five levels. Every node has an ok/error status and failures use safe typed projections; unresolved indirect calls may be missing and results are not a whole-program CFG.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000","depth":2,"direction":"forward"}],"properties":{"address":{"description":"A provider-normalized procedure address","type":"string"},"depth":{"default":2,"description":"Value for depth.","maximum":5,"minimum":1,"type":"integer"},"direction":{"default":"forward","description":"Direction in which to traverse or compare relationships.","enum":["forward","backward"],"type":"string"}},"required":["address"],"type":"object"},"kind":"enhanced","name":"get_call_graph","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"calls":{"items":{"type":"string"},"type":"array"},"status":{"const":"ok","type":"string"}},"required":["address","status","calls"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]},"status":{"const":"error","type":"string"}},"required":["address","status","error"],"type":"object"}]},"type":"array"},"propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Get Call Graph"},{"analysisOperation":"analyze_swift_types","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Categorize exhaustively paged procedure names into Swift classes, structs, enums, protocols, extensions, and other symbols. Scans at most 5,000 names and returns at most 50 entries per category.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"enhanced","name":"analyze_swift_types","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"categories":{"additionalProperties":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["count","items"],"type":"object"},"propertyNames":{"type":"string"},"type":"object"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","categories"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Swift Types"},{"analysisOperation":"find_xrefs_to_name","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve an exact name through the bound provider\'s exhaustively paged name inventory and return a resolved or unresolved result. Unresolved names use the stable name_not_found reason; this compact xref workflow returns address-only projections.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"name":"malloc"}],"properties":{"name":{"description":"Exact name used by this operation.","type":"string"}},"required":["name"],"type":"object"},"kind":"enhanced","name":"find_xrefs_to_name","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"},"status":{"const":"resolved","type":"string"},"xrefs":{"items":{"type":"string"},"type":"array"}},"required":["status","name","address","xrefs"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"reason":{"const":"name_not_found","type":"string"},"status":{"const":"unresolved","type":"string"}},"required":["status","name","reason"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Find Xrefs To Name"},{"analysisOperation":"binary_overview","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Use immediately after opening a target to summarize document, exhaustive procedure/string counts, and a bounded segment sample. detail controls segment fields and limit controls only the returned segment sample.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"detail":"concise","limit":10}],"properties":{"detail":{"default":"concise","description":"Requested response detail level.","enum":["concise","detailed"],"type":"string"},"limit":{"default":10,"description":"Maximum number of results to return in this page.","maximum":50,"minimum":1,"type":"integer"}},"type":"object"},"kind":"enhanced","name":"binary_overview","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"detail":{"enum":["concise","detailed"],"type":"string"},"document":{"type":"string"},"procedure_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"segment_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"segments":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"length":{"minimum":0,"type":"number"},"name":{"type":"string"},"start":{"type":"string"}},"required":["name","start","end"],"type":"object"},"type":"array"},"string_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["document","detail","segments","segment_count","procedure_count","string_count"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Binary Overview"},{"analysisOperation":"analyze_function","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Preferred bounded analysis for one procedure symbol or address. Returns identity, provider-specific pseudocode, optional assembly, comments, calls, typed-or-explicitly-unavailable references, referenced strings/names, and local CFG blocks with exact truncation metadata. Providers with a structured decompiler model also expose native API boundary types, confidence, evidence, jump-table data/target addresses, and explicit decompiler-artifact labels.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"assembly_offset":0,"collection_offset":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"include_assembly":false,"limit":100,"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main","pseudocode_offset":0}],"properties":{"assembly_offset":{"default":0,"description":"Zero-based index of the first assembly to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"collection_offset":{"additionalProperties":false,"default":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"description":"Zero-based index of the first collection to return.","properties":{"basic_blocks":{"default":0,"description":"Value for basic blocks.","maximum":9007199254740991,"minimum":0,"type":"integer"},"callees":{"default":0,"description":"Value for callees.","maximum":9007199254740991,"minimum":0,"type":"integer"},"callers":{"default":0,"description":"Value for callers.","maximum":9007199254740991,"minimum":0,"type":"integer"},"comments":{"default":0,"description":"Value for comments.","maximum":9007199254740991,"minimum":0,"type":"integer"},"incoming_references":{"default":0,"description":"Value for incoming references.","maximum":9007199254740991,"minimum":0,"type":"integer"},"outgoing_references":{"default":0,"description":"Value for outgoing references.","maximum":9007199254740991,"minimum":0,"type":"integer"},"referenced_names":{"default":0,"description":"Value for referenced names.","maximum":9007199254740991,"minimum":0,"type":"integer"},"referenced_strings":{"default":0,"description":"Value for referenced strings.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"include_assembly":{"default":false,"description":"Whether to include assembly in the result.","type":"boolean"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_pseudocode_chars":{"default":20000,"description":"Maximum permitted pseudocode chars for this operation.","maximum":100000,"minimum":1,"type":"integer"},"procedure":{"description":"A procedure name or address","type":"string"},"pseudocode_offset":{"default":0,"description":"Zero-based index of the first pseudocode to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"analyze_function","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"assembly":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"basic_blocks":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"start":{"type":"string"},"successors":{"items":{"type":"string"},"type":"array"}},"required":["start","end","successors"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"start":{"type":"string"},"successors":{"items":{"type":"string"},"type":"array"}},"required":["start","end","successors"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"callees":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"callers":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"comments":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"kind":{"enum":["comment","inline"],"type":"string"},"text":{"type":"string"}},"required":["address","kind","text"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"kind":{"enum":["comment","inline"],"type":"string"},"text":{"type":"string"}},"required":["address","kind","text"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"incoming_references":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"instruction_scan":{"additionalProperties":false,"properties":{"scanned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["scanned","truncated"],"type":"object"},"limitations":{"default":[],"items":{"type":"string"},"type":"array"},"native_api":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"minLength":1,"type":"string"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["available","reason","residual_unknowns"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"calling_convention":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-and-stack-variables","compiler-generated-control-flow","pointer-arithmetic","pseudocode"],"type":"string"},"type":"array"},"jump_tables":{"items":{"additionalProperties":false,"properties":{"data_sources":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"confidence":{"enum":["low","medium","high"],"type":"string"},"entry_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"entry_size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"provenance":{"enum":["ghidra-decompiler-load-table","ghidra-dispatch-block-data-reference"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"data_sources_truncated":{"type":"boolean"},"dispatch_address":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mappings":{"items":{"additionalProperties":false,"properties":{"case_value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"confidence":{"enum":["low","medium","high"],"type":"string"},"data_addresses":{"items":{"minLength":1,"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"target_address":{"minLength":1,"type":"string"}},"required":["case_value","target_address","data_addresses","confidence","evidence"],"type":"object"},"type":"array"},"mappings_truncated":{"type":"boolean"}},"required":["dispatch_address","data_sources","data_sources_truncated","mappings","mappings_truncated","limitations"],"type":"object"},"type":"array"},"jump_tables_truncated":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"parameters":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"role":{"const":"parameter","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"type":"array"},"parameters_truncated":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"pseudocode":{"additionalProperties":false,"properties":{"classification":{"const":"decompiler-generated-non-source","type":"string"},"compilable":{"const":false,"type":"boolean"}},"required":["classification","compilable"],"type":"object"},"return_type":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"type":"null"},"ordinal":{"type":"null"},"role":{"const":"return","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"signature_source":{"minLength":1,"type":"string"}},"required":["available","provenance","signature_source","calling_convention","return_type","parameters","parameters_truncated","jump_tables","jump_tables_truncated","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},{"type":"null"}],"default":null},"outgoing_references":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"kind":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["available","reason"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"call":{"type":"boolean"},"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"data":{"type":"boolean"},"external":{"type":"boolean"},"flow":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"primary":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"read":{"type":"boolean"},"terminal":{"type":"boolean"},"type":{"type":"string"},"write":{"type":"boolean"}},"required":["available","provenance","type","flow","call","jump","data","read","write","indirect","computed","conditional","terminal","primary","operand_index","external"],"type":"object"}]},"source_address":{"type":"string"},"source_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"locals":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"provenance":{"minLength":1,"type":"string"}},"required":["description","provenance"],"type":"object"},"type":"array"},"name":{"type":"string"},"signature":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","classification","signature","locals"],"type":"object"},"pseudocode":{"oneOf":[{"additionalProperties":false,"properties":{"next_offset":{"type":"null"},"returned_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"total_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"const":false,"type":"boolean"}},"required":["text","total_chars","returned_chars","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"total_chars":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"const":true,"type":"boolean"}},"required":["text","total_chars","returned_chars","truncated","next_offset"],"type":"object"}]},"referenced_names":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]},"referenced_strings":{"oneOf":[{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"type":"null"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":false,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"},{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"const":true,"type":"boolean"}},"required":["items","total","returned","truncated","next_offset"],"type":"object"}]}},"required":["procedure","pseudocode","assembly","comments","callers","callees","incoming_references","outgoing_references","referenced_strings","referenced_names","basic_blocks","instruction_scan","native_api","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Function"},{"analysisOperation":"inspect_native_api","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Reconstruct one native function boundary through inspectable substeps. Returns structured inferred return/parameter types with confidence and evidence, jump-table dispatch/data/target mappings, explicit decompiler-artifact labels, unsupported branches, and residual unknowns.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main"}],"properties":{"max_instructions":{"default":500,"description":"Maximum permitted instructions for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_pseudocode_chars":{"default":20000,"description":"Maximum permitted pseudocode chars for this operation.","maximum":100000,"minimum":1,"type":"integer"},"procedure":{"description":"A procedure name or address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record unsupported native API branches durably","type":"boolean"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"inspect_native_api","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"boundary":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"reason":{"minLength":1,"type":"string"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["available","reason","residual_unknowns"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"calling_convention":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-and-stack-variables","compiler-generated-control-flow","pointer-arithmetic","pseudocode"],"type":"string"},"type":"array"},"jump_tables":{"items":{"additionalProperties":false,"properties":{"data_sources":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"confidence":{"enum":["low","medium","high"],"type":"string"},"entry_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"entry_size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"provenance":{"enum":["ghidra-decompiler-load-table","ghidra-dispatch-block-data-reference"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"data_sources_truncated":{"type":"boolean"},"dispatch_address":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mappings":{"items":{"additionalProperties":false,"properties":{"case_value":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"confidence":{"enum":["low","medium","high"],"type":"string"},"data_addresses":{"items":{"minLength":1,"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"target_address":{"minLength":1,"type":"string"}},"required":["case_value","target_address","data_addresses","confidence","evidence"],"type":"object"},"type":"array"},"mappings_truncated":{"type":"boolean"}},"required":["dispatch_address","data_sources","data_sources_truncated","mappings","mappings_truncated","limitations"],"type":"object"},"type":"array"},"jump_tables_truncated":{"type":"boolean"},"limitations":{"items":{"type":"string"},"type":"array"},"parameters":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"role":{"const":"parameter","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"type":"array"},"parameters_truncated":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"pseudocode":{"additionalProperties":false,"properties":{"classification":{"const":"decompiler-generated-non-source","type":"string"},"compilable":{"const":false,"type":"boolean"}},"required":["classification","compilable"],"type":"object"},"return_type":{"additionalProperties":false,"properties":{"confidence":{"enum":["low","medium","high"],"type":"string"},"data_type":{"minLength":1,"type":"string"},"decompiler_artifacts":{"items":{"enum":["recovered-signature","register-or-stack-storage","compiler-generated-variable"],"type":"string"},"type":"array"},"evidence":{"items":{"additionalProperties":false,"properties":{"detail":{"minLength":1,"type":"string"},"kind":{"enum":["signature-source","decompiler-type","type-lock","calling-convention","jump-table"],"type":"string"},"source":{"minLength":1,"type":"string"}},"required":["kind","source","detail"],"type":"object"},"minItems":1,"type":"array"},"name":{"type":"null"},"ordinal":{"type":"null"},"role":{"const":"return","type":"string"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"storage":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["ordinal","name","data_type","size_bytes","storage","confidence","evidence","decompiler_artifacts","role"],"type":"object"},"signature_source":{"minLength":1,"type":"string"}},"required":["available","provenance","signature_source","calling_convention","return_type","parameters","parameters_truncated","jump_tables","jump_tables_truncated","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},"procedure":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["address","name"],"type":"object"},"residual_unknowns":{"items":{"minLength":1,"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"substeps":{"items":{"additionalProperties":false,"properties":{"observations":{"items":{"minLength":1,"type":"string"},"type":"array"},"operation":{"enum":["analyze_function","project_native_api_boundary","preserve_residual_unknowns"],"type":"string"},"status":{"enum":["completed","unsupported"],"type":"string"}},"required":["operation","status","observations"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"unsupported_branches":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["schema_version","procedure","boundary","substeps","unsupported_branches","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Native Api"},{"analysisOperation":"trace_feature","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a bounded literal feature query through matching strings and procedures, xrefs, and truthful containing-procedure resolution. Returns the operation budget, truncation, and residual unknowns; unknown_registry_approved: true records them durably without inferring reference kinds.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"case_sensitive":false,"limit":20,"max_operations":20,"query":"license"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"limit":{"default":20,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_operations":{"default":20,"description":"Maximum permitted operations for this operation.","maximum":100,"minimum":1,"type":"integer"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"trace_feature","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"matches":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"type":{"enum":["string","procedure"],"type":"string"},"value":{"type":"string"}},"required":["type","address","value"],"type":"object"},"type":"array"},"operation_budget":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query":{"type":"string"},"references":{"items":{"additionalProperties":false,"properties":{"containing_procedure":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["target_address","source_address","containing_procedure"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"search_mode":{"const":"literal","type":"string"},"truncated":{"type":"boolean"}},"required":["query","search_mode","operations_used","operation_budget","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Feature"},{"analysisOperation":"find_code_for_string","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve one literal string query to bounded analyzed string entries, xrefs, and truthful containing-procedure candidates. Returns an Evidence ID, exact operation budget, truncation, and residual unknowns; it never infers reference kinds or runtime reachability.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"case_sensitive":false,"limit":20,"max_operations":20,"query":"authorization failed"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"limit":{"default":20,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_operations":{"default":20,"description":"Maximum permitted operations for this operation.","maximum":100,"minimum":1,"type":"integer"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"find_code_for_string","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"matches":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"type":{"enum":["string","procedure"],"type":"string"},"value":{"type":"string"}},"required":["type","address","value"],"type":"object"},"type":"array"},"operation_budget":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query":{"type":"string"},"references":{"items":{"additionalProperties":false,"properties":{"containing_procedure":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"classification":{"anyOf":[{"additionalProperties":false,"properties":{"external":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"thunk":{"type":"boolean"},"thunk_target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["external","thunk","thunk_target","provenance"],"type":"object"},{"type":"null"}],"default":null},"name":{"type":"string"}},"required":["address","name","classification"],"type":"object"},"query_address":{"type":"string"}},"required":["query_address","found","procedure"],"type":"object"},{"additionalProperties":false,"properties":{"found":{"const":false,"type":"boolean"},"procedure":{"type":"null"},"query_address":{"type":"string"},"reason":{"enum":["outside_segments","not_in_procedure"],"type":"string"}},"required":["query_address","found","procedure","reason"],"type":"object"}]},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["target_address","source_address","containing_procedure"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"search_mode":{"const":"literal","type":"string"},"truncated":{"type":"boolean"}},"required":["query","search_mode","operations_used","operation_budget","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Find Code For String"},{"analysisOperation":"trace_call_path","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a deterministic bounded caller or callee path from one exact procedure address, optionally stopping at a goal. Returns visited nodes, direct-call edges, one shortest traversal path, failures, frontier, consumed limits, an Evidence ID, and explicit residual unknowns without claiming unresolved indirect calls are absent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"direction":"forward","goal":"0x1100","max_depth":5,"max_nodes":100,"max_operations":100,"start":"0x1000"}],"properties":{"direction":{"default":"forward","description":"Direction in which to traverse or compare relationships.","enum":["forward","backward"],"type":"string"},"goal":{"description":"An optional provider-normalized destination address","type":"string"},"max_depth":{"default":5,"description":"Maximum permitted depth for this operation.","maximum":10,"minimum":1,"type":"integer"},"max_nodes":{"default":100,"description":"Maximum permitted nodes for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_operations":{"default":100,"description":"Maximum permitted operations for this operation.","maximum":500,"minimum":1,"type":"integer"},"start":{"description":"A provider-normalized procedure address","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residuals durably","type":"boolean"}},"required":["start"],"type":"object"},"kind":"enhanced","name":"trace_call_path","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"direction":{"enum":["forward","backward"],"type":"string"},"edges":{"items":{"additionalProperties":false,"properties":{"discovery_depth":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source_address":{"type":"string"},"target_address":{"type":"string"}},"required":["source_address","target_address","discovery_depth"],"type":"object"},"type":"array"},"failures":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"error":{"oneOf":[{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"invalid_request","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"unreadable_output","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"capability_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"provider_timeout","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cancelled","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_integrity_mismatch","type":"string"},"details":{"additionalProperties":false,"properties":{"calculated_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"declared_sha256":{"anyOf":[{"type":"string"},{"type":"null"}]},"logical_path":{"type":"string"},"unpacked":{"type":"boolean"}},"required":["logical_path","declared_sha256","calculated_sha256","unpacked"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"artifact_operation_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"evidence_integrity_mismatch","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"truncated","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"permission_required","type":"string"},"details":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"ceiling":{"anyOf":[{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"},{"type":"null"}]},"missing":{"additionalProperties":false,"properties":{"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"const":true,"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"type":"object"},"requested":{"additionalProperties":false,"properties":{"capability":{"type":"string"},"environment_names":{"items":{"type":"string"},"type":"array"},"executables":{"items":{"type":"string"},"type":"array"},"mount":{"type":"boolean"},"network":{"enum":["none","loopback","external"],"type":"string"},"origins":{"items":{"type":"string"},"type":"array"},"roots":{"items":{"type":"string"},"type":"array"}},"required":["capability","roots","executables","environment_names","network","mount"],"type":"object"}},"required":["capability","requested","missing","ceiling"],"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"process_capture_failed","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"cleanup_incomplete","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"revision_conflict","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"outside_approved_root","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"configuration_invalid","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"target_unavailable","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"execution_failure","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","permission_required","unsupported_provider","integrity_mismatch","truncated","cancelled","timeout","unavailable","execution_failure"],"type":"string"},"code":{"const":"plan_stale","type":"string"},"details":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"message":{"minLength":1,"type":"string"},"remediation":{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"elicitation_supported":{"type":"boolean"},"restart_required":{"type":"boolean"}},"required":["action","restart_required"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]}},"required":["address","error"],"type":"object"},"type":"array"},"frontier":{"items":{"type":"string"},"type":"array"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}]},"goal_status":{"enum":["not_requested","reached","not_reached"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_depth":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_nodes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_operations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"nodes_visited":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"operations_used":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["max_depth","max_nodes","max_operations","nodes_visited","operations_used"],"type":"object"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"depth":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["address","depth"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"type":"string"},"type":"array"},"start":{"type":"string"},"traversal_path":{"items":{"type":"string"},"type":"array"},"truncated":{"type":"boolean"}},"required":["start","goal","direction","goal_status","nodes","edges","traversal_path","failures","frontier","limits","truncated","residual_unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Call Path"},{"analysisOperation":"inspect_macho","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect Mach-O slices, load commands, imports, exports, dependencies, build metadata, segments, sections, permissions, and exact command provenance without launching Hopper.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"inspect_macho","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"architectures":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"cpu_subtype":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"name":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","cpu_type","cpu_subtype","file_offset","size","alignment"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"build_metadata":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"minimum_os":{"anyOf":[{"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"type":"string"},{"type":"null"}]},"sdk":{"anyOf":[{"type":"string"},{"type":"null"}]},"tools":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},"type":"array"}},"required":["platform","minimum_os","sdk","tools"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"dependencies":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"compatibility_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"current_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"type":"string"},"path":{"type":"string"}},"required":["path","kind","current_version","compatibility_version"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"endian":{"anyOf":[{"enum":["little","big"],"type":"string"},{"type":"null"}]},"entrypoints":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"file_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["file_offset"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"exports":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"reexport":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"weak":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","address","weak","reexport","source"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"file_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"items":{"type":"string"},"type":"array"},"format":{"const":"mach-o","type":"string"},"imports":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"reexport":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"source":{"anyOf":[{"type":"string"},{"type":"null"}]},"weak":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["name","address","weak","reexport","source"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"load_commands":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"fields":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"null"}]},"propertyNames":{"type":"string"},"type":"object"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"type":"string"}},"required":["index","kind","file_offset","fields"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"segments":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"file_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"initial_permissions":{"additionalProperties":false,"properties":{"execute":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"raw":{"anyOf":[{"type":"string"},{"type":"null"}]},"read":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read","write","execute","raw"],"type":"object"},"maximum_permissions":{"additionalProperties":false,"properties":{"execute":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"raw":{"anyOf":[{"type":"string"},{"type":"null"}]},"read":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"write":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read","write","execute","raw"],"type":"object"},"name":{"type":"string"},"sections":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flags":{"items":{"type":"string"},"type":"array"},"name":{"type":"string"},"segment":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["segment","name","address","size","file_offset","alignment","flags"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"vm_address":{"anyOf":[{"pattern":"^0x[a-fA-F0-9]+$","type":"string"},{"type":"null"}]},"vm_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","vm_address","vm_size","file_offset","file_size","maximum_permissions","initial_permissions","sections"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"uuid":{"anyOf":[{"type":"string"},{"type":"null"}]},"word_size":{"anyOf":[{"anyOf":[{"const":32,"type":"number"},{"const":64,"type":"number"}]},{"type":"null"}]}},"required":["format","endian","word_size","file_type","flags","uuid","entrypoints","architectures","build_metadata","load_commands","dependencies","imports","exports","segments","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Macho"},{"analysisOperation":"inspect_signature","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect the active artifact\'s code-signing identity, hashes, authorities, requirements, entitlements, hardened-runtime state, and bounded command provenance.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"inspect_signature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"authorities":{"items":{"type":"string"},"type":"array"},"cdhashes":{"items":{"type":"string"},"type":"array"},"designated_requirement":{"anyOf":[{"type":"string"},{"type":"null"}]},"entitlements":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"format":{"anyOf":[{"type":"string"},{"type":"null"}]},"hardened_runtime":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"hash_algorithms":{"items":{"type":"string"},"type":"array"},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"signed":{"type":"boolean"},"team_identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"timestamp":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["signed","identifier","team_identifier","format","cdhashes","hash_algorithms","authorities","designated_requirement","entitlements","timestamp","hardened_runtime","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Signature"},{"analysisOperation":"inspect_plist","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Parse a plist at a bounded relative path beneath the active artifact container. Symlink and traversal escapes are rejected; output is normalized JSON rather than plutil text.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"relative_path":"Contents/Info.plist"}],"properties":{"relative_path":{"default":"Contents/Info.plist","description":"Local filesystem path for relative.","maxLength":1024,"minLength":1,"type":"string"}},"type":"object"},"kind":"native-provider","name":"inspect_plist","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"bundle":{"additionalProperties":false,"properties":{"executable":{"anyOf":[{"type":"string"},{"type":"null"}]},"identifier":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"short_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["identifier","executable","name","version","short_version"],"type":"object"},"format":{"enum":["xml","binary","json","unknown"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"source_path":{"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["format","value","bundle","source_path","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Plist"},{"analysisOperation":"list_architectures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List thin or universal Mach-O slices with offsets, sizes, alignment, explicit coverage, and bounded native-tool provenance.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{}],"properties":{},"type":"object"},"kind":"native-provider","name":"list_architectures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"architectures":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"alignment":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"cpu_subtype":{"anyOf":[{"type":"string"},{"type":"null"}]},"cpu_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"name":{"type":"string"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["name","cpu_type","cpu_subtype","file_offset","size","alignment"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["items","total","exhaustive","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"}},"required":["architectures","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Architectures"},{"analysisOperation":"demangle_swift","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Demangle an ordered bounded batch of Swift symbols without requiring Hopper. Each input returns demangled, unchanged, or invalid status.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"symbols":["$s4Test3fooyyF"]}],"properties":{"symbols":{"description":"Ordered bounded Swift symbols to demangle.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":500,"minItems":1,"type":"array"}},"required":["symbols"],"type":"object"},"kind":"native-provider","name":"demangle_swift","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"limitations":{"items":{"type":"string"},"type":"array"},"provenance":{"items":{"additionalProperties":false,"properties":{"command":{"items":{"type":"string"},"type":"array"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"signal":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["code","signal"],"type":"object"},"stderr_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stderr_truncated":{"type":"boolean"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stdout_truncated":{"type":"boolean"},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"version_reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","command","tool_version","version_reason","executable_sha256","exit","stdout_bytes","stderr_bytes","stdout_truncated","stderr_truncated"],"type":"object"},"type":"array"},"symbols":{"items":{"additionalProperties":false,"properties":{"input":{"type":"string"},"output":{"type":"string"},"status":{"enum":["demangled","unchanged","invalid"],"type":"string"}},"required":["input","output","status"],"type":"object"},"type":"array"}},"required":["symbols","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Demangle Swift"},{"analysisOperation":"inventory_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"After open_binary binds a local archive, application package, or other artifact—or when one is already active—inventory it as a deterministic, content-addressed artifact graph. This tool accepts no path; in a target-free session open the target first. Returns bounded node and edge pages without extracting or mounting by default.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"edge_limit":{"default":100,"description":"Maximum number of edge entries to return.","maximum":500,"minimum":1,"type":"integer"},"edge_offset":{"default":0,"description":"Zero-based index of the first edge to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"},"node_limit":{"default":100,"description":"Maximum number of node entries to return.","maximum":500,"minimum":1,"type":"integer"},"node_offset":{"default":0,"description":"Zero-based index of the first node to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"occurrence_limit":{"default":100,"description":"Maximum number of occurrence entries to return.","maximum":500,"minimum":1,"type":"integer"},"occurrence_offset":{"default":0,"description":"Zero-based index of the first occurrence to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},{"properties":{"edge_limit":{"default":100,"description":"Maximum number of edge entries to return.","maximum":500,"minimum":1,"type":"integer"},"edge_offset":{"default":0,"description":"Zero-based index of the first edge to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"},"node_limit":{"default":100,"description":"Maximum number of node entries to return.","maximum":500,"minimum":1,"type":"integer"},"node_offset":{"default":0,"description":"Zero-based index of the first node to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"occurrence_limit":{"default":100,"description":"Maximum number of occurrence entries to return.","maximum":500,"minimum":1,"type":"integer"},"occurrence_offset":{"default":0,"description":"Zero-based index of the first occurrence to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["integrity_policy","integrity_continue_approved"],"type":"object"}],"examples":[{}],"type":"object"},"kind":"artifact-provider","name":"inventory_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"edges":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"child_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"edge_id":{"pattern":"^edge_[a-f0-9]{64}$","type":"string"},"logical_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"producer":{"anyOf":[{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},{"type":"null"}]},"relation":{"enum":["contains","extracts","slice-of","embeds","loads","maps-source","derived-from"],"type":"string"}},"required":["edge_id","ordinal","parent_artifact_id","child_artifact_id","relation","occurrence_id","logical_path","producer"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"integrity_contradictions":{"default":[],"items":{"additionalProperties":false,"properties":{"contradiction_id":{"pattern":"^ic_[a-f0-9]{64}$","type":"string"},"declared_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"entry_kind":{"enum":["file","slice"],"type":"string"},"limitations":{"items":{"type":"string"},"minItems":1,"type":"array"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"observed_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"parent_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"provenance":{"const":"container-integrity-metadata-versus-observed-bytes","type":"string"},"trust":{"const":"observed-untrusted","type":"string"},"unpacked":{"type":"boolean"}},"required":["contradiction_id","occurrence_id","parent_artifact_id","logical_path","declared_sha256","observed_sha256","entry_kind","unpacked","trust","provenance","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_compression_ratio":{"maximum":100000,"minimum":1,"type":"number"},"max_depth":{"maximum":100,"minimum":0,"type":"integer"},"max_entries":{"maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["max_entries","max_total_bytes","max_entry_bytes","max_compression_ratio","max_depth","max_path_bytes"],"type":"object"},"manifest":{"additionalProperties":false,"properties":{"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","manifest_id","root_artifact_id","root_sha256","root_format","graph_sha256","node_count","occurrence_count","edge_count"],"type":"object"},"nodes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"content_state":{"enum":["materialized","embedded","virtual"],"type":"string"},"executable":{"type":"boolean"},"format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"kind":{"enum":["container","executable","dynamic-library","framework","native-addon","javascript","source-map","plist","entitlements","resource","universal-slice","package-metadata","unknown"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"media_type":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["artifact_id","kind","format","sha256","size","media_type","architecture","executable","content_state","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"occurrences":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"compressed_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"declared_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"encrypted":{"type":"boolean"},"entry_kind":{"enum":["file","directory","symlink","slice"],"type":"string"},"executable":{"type":"boolean"},"hash_status":{"enum":["verified","mismatched","not-hashed-limit","unavailable"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"parent_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"source_location":{"anyOf":[{"additionalProperties":false,"properties":{"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offset","length"],"type":"object"},{"type":"null"}]}},"required":["occurrence_id","artifact_id","parent_occurrence_id","logical_path","entry_kind","declared_size","compressed_size","executable","encrypted","hash_status","source_location","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"provenance":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},"maxItems":256,"type":"array"}},"required":["manifest","nodes","occurrences","edges","limits","provenance","integrity_contradictions","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inventory Artifact"},{"analysisOperation":"inspect_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"After open_binary binds a local archive, application package, or other artifact—or when one is already active—inspect it through one bounded, cancellable inventory substep. This tool accepts no path; in a target-free session open the target first. Returns the full substep Evidence and its ID, observations, derived relationships, hypotheses, contradictions, unexplored branches, limitations, and format-specific next probes. Any substep failure fails the whole call.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_hypotheses":{"default":20,"description":"Maximum permitted hypotheses for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_next_probes":{"default":20,"description":"Maximum permitted next probes for this operation.","maximum":50,"minimum":1,"type":"integer"},"max_observations":{"default":100,"description":"Maximum permitted observations for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_relationships":{"default":100,"description":"Maximum permitted relationships for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_substeps":{"const":1,"default":1,"description":"Maximum permitted substeps for this operation.","type":"number"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_unexplored_branches":{"default":20,"description":"Maximum permitted unexplored branches for this operation.","maximum":100,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"type":"object"},{"properties":{"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_hypotheses":{"default":20,"description":"Maximum permitted hypotheses for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_next_probes":{"default":20,"description":"Maximum permitted next probes for this operation.","maximum":50,"minimum":1,"type":"integer"},"max_observations":{"default":100,"description":"Maximum permitted observations for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_relationships":{"default":100,"description":"Maximum permitted relationships for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_substeps":{"const":1,"default":1,"description":"Maximum permitted substeps for this operation.","type":"number"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_unexplored_branches":{"default":20,"description":"Maximum permitted unexplored branches for this operation.","maximum":100,"minimum":1,"type":"integer"},"native_mount_approved":{"default":false,"description":"Explicit operator approval for native mount.","type":"boolean"}},"required":["integrity_policy","integrity_continue_approved"],"type":"object"}],"examples":[{}],"type":"object"},"kind":"artifact-provider","name":"inspect_artifact","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"contradictions":{"items":{"additionalProperties":false,"properties":{"contradiction_id":{"pattern":"^aic_[a-f0-9]{64}$","type":"string"},"declared_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"observed_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"statement":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["contradiction_id","statement","occurrence_id","declared_sha256","observed_sha256","evidence_id"],"type":"object"},"maxItems":100,"type":"array"},"coverage":{"additionalProperties":false,"properties":{"hypotheses_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hypotheses_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_probes_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_probes_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observations_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observations_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relationships_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relationships_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-substeps","partial","truncated"],"type":"string"},"substeps_completed":{"const":1,"type":"number"},"unexplored_branches_omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unexplored_branches_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","substeps_completed","observations_retained","observations_omitted","relationships_retained","relationships_omitted","hypotheses_retained","hypotheses_omitted","unexplored_branches_retained","unexplored_branches_omitted","next_probes_retained","next_probes_omitted"],"type":"object"},"derived_relationships":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"logical_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"occurrence_id":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"relation":{"enum":["contains","extracts","slice-of","embeds","loads","maps-source","derived-from"],"type":"string"},"relationship_id":{"pattern":"^air_[a-f0-9]{64}$","type":"string"},"source_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"target_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"}},"required":["relationship_id","relation","source_artifact_id","target_artifact_id","occurrence_id","logical_path","evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"hypotheses":{"items":{"additionalProperties":false,"properties":{"basis_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":8,"minItems":1,"type":"array"},"confidence":{"enum":["medium","low"],"type":"string"},"hypothesis_id":{"pattern":"^aih_[a-f0-9]{64}$","type":"string"},"limitation":{"maxLength":4096,"minLength":1,"type":"string"},"statement":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["hypothesis_id","statement","confidence","basis_evidence_ids","limitation"],"type":"object"},"maxItems":100,"type":"array"},"inspection_id":{"pattern":"^ai_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"next_probes":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"maxLength":128,"minLength":1,"type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},"maxItems":50,"type":"array"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["root-manifest","artifact","occurrence","integrity"],"type":"string"},"observation_id":{"pattern":"^aio_[a-f0-9]{64}$","type":"string"},"subject":{"maxLength":4096,"minLength":1,"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["observation_id","kind","subject","value","evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"schema_version":{"const":1,"type":"number"},"subject":{"additionalProperties":false,"properties":{"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"maxLength":128,"minLength":1,"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["manifest_id","root_artifact_id","root_sha256","root_format"],"type":"object"},"substeps":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"const":"inventory_artifact","type":"string"},"status":{"const":"completed","type":"string"},"substep_id":{"pattern":"^ais_[a-f0-9]{64}$","type":"string"}},"required":["substep_id","operation","status","evidence_id","evidence"],"type":"object"},"maxItems":1,"minItems":1,"type":"array"},"unexplored_branches":{"items":{"additionalProperties":false,"properties":{"branch_id":{"pattern":"^aib_[a-f0-9]{64}$","type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"next_probe":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"maxLength":128,"minLength":1,"type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},{"type":"null"}]},"reason":{"enum":["page-limit","format-specific-analysis-required","unknown-format"],"type":"string"}},"required":["branch_id","reason","detail","next_probe","evidence_id"],"type":"object"},"maxItems":100,"type":"array"}},"required":["schema_version","inspection_id","subject","substeps","observations","derived_relationships","hypotheses","contradictions","unexplored_branches","next_probes","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Artifact"},{"analysisOperation":"extract_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Extract selected graph artifacts beneath an explicit output root. Requires approval, rejects traversal and symlink escapes, never overwrites, enforces bomb limits, and verifies cleanup.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"occurrence_ids":["occ_0000000000000000000000000000000000000000000000000000000000000000"],"output_root":"/tmp/rea-extracted"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_ids":{"description":"Value for occurrence ids.","items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"maxItems":500,"minItems":1,"type":"array"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"output_root":{"description":"Approved canonical filesystem output root.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","output_root","occurrence_ids"],"type":"object"},"kind":"artifact-provider","name":"extract_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifacts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"bytes_written":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"created":{"type":"boolean"},"relative_path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["artifact_id","relative_path","sha256","bytes_written","created"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"cleanup":{"additionalProperties":false,"properties":{"attempted":{"type":"boolean"},"residual_paths":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":500,"type":"array"},"verified":{"type":"boolean"}},"required":["attempted","verified","residual_paths"],"type":"object"},"containment_verified":{"type":"boolean"},"extraction_manifest":{"additionalProperties":false,"properties":{"extraction_id":{"pattern":"^aex_[a-f0-9]{64}$","type":"string"},"files_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_root_alias":{"const":"$OUTPUT_ROOT","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_occurrence_ids":{"items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"maxItems":500,"minItems":1,"type":"array"},"source_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","extraction_id","source_manifest_id","selected_occurrence_ids","files_sha256","output_root_alias"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_compression_ratio":{"maximum":100000,"minimum":1,"type":"number"},"max_depth":{"maximum":100,"minimum":0,"type":"integer"},"max_entries":{"maximum":1000000,"minimum":1,"type":"integer"},"max_entry_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["max_entries","max_total_bytes","max_entry_bytes","max_compression_ratio","max_depth","max_path_bytes"],"type":"object"},"manifest":{"additionalProperties":false,"properties":{"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"occurrence_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"root_artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"root_format":{"enum":["dmg","zip","pkg","asar","javascript-bundle","source-map","mach-o-universal","mach-o","elf","pe","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","manifest_id","root_artifact_id","root_sha256","root_format","graph_sha256","node_count","occurrence_count","edge_count"],"type":"object"},"output_root":{"minLength":1,"type":"string"},"provenance":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"maxLength":4096,"type":"string"},"maxItems":1024,"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"maxItems":3,"type":"array"},"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"tool":{"minLength":1,"type":"string"},"tool_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["tool","arguments","tool_version","executable_sha256","exit_code","effects"],"type":"object"},"maxItems":256,"type":"array"}},"required":["manifest","extraction_manifest","output_root","artifacts","containment_verified","cleanup","limits","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Extract Artifact"},{"analysisOperation":"inspect_managed_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Open and classify an explicit managed PE/CLI path, or inspect the active managed target, then inventory exact assembly/module identity, target framework evidence, references, resources, and custom attributes without loading or executing target code. Returns bounded pages and explicit partial or malformed coverage.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"path":"/tmp/Example.dll"}],"properties":{"attribute_limit":{"default":100,"description":"Maximum number of attribute entries to return.","maximum":500,"minimum":1,"type":"integer"},"attribute_offset":{"default":0,"description":"Zero-based index of the first attribute to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"path":{"description":"Managed PE/CLI path to open before inspection; omit only when a managed target is already active","minLength":1,"type":"string"},"reference_limit":{"default":100,"description":"Maximum number of reference entries to return.","maximum":500,"minimum":1,"type":"integer"},"reference_offset":{"default":0,"description":"Zero-based index of the first reference to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"resource_limit":{"default":100,"description":"Maximum number of resource entries to return.","maximum":500,"minimum":1,"type":"integer"},"resource_offset":{"default":0,"description":"Zero-based index of the first resource to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_artifact","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"assembly":{"anyOf":[{"additionalProperties":false,"properties":{"culture":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"hash_algorithm":{"maximum":4294967295,"minimum":0,"type":"integer"},"name":{"type":"string"},"public_key":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["none","public-key","public-key-token"],"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"token":{"anyOf":[{"pattern":"^[a-f0-9]{16}$","type":"string"},{"type":"null"}]}},"required":["kind","byte_length","sha256","token"],"type":"object"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"version":{"pattern":"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$","type":"string"}},"required":["name","version","culture","flags","hash_algorithm","public_key","token","row_offset"],"type":"object"},{"type":"null"}]},"attributes":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"constructor_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"decoded_fixed_string":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"type_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["parent_token","constructor_token","type_name","value_length","value_sha256","decoded_fixed_string","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"classification":{"additionalProperties":false,"properties":{"container":{"const":"pe","type":"string"},"evidence":{"items":{"additionalProperties":false,"properties":{"code":{"minLength":1,"type":"string"},"detail":{"minLength":1,"type":"string"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["code","detail","file_offset"],"type":"object"},"type":"array"},"implementation":{"enum":["cil","cil-and-ready-to-run","cpp-cli-mixed","metadata-only","not-managed","unknown"],"type":"string"},"managed_architecture":{"enum":["anycpu","anycpu-prefer-32","x86","x86_64","arm","arm64","unknown"],"type":"string"},"runtime_family":{"enum":["dotnet-framework","modern-dotnet","unity-mono","mixed-clr-native","unknown"],"type":"string"},"status":{"enum":["managed","not-managed","malformed"],"type":"string"}},"required":["status","container","runtime_family","implementation","managed_architecture","evidence"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"stream_names":{"items":{"type":"string"},"type":"array"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","stream_names","table_row_counts"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"pe":{"additionalProperties":false,"properties":{"architecture":{"enum":["x86","x86_64","arm","arm64"],"type":"string"},"characteristics":{"maximum":65535,"minimum":0,"type":"integer"},"cli":{"anyOf":[{"additionalProperties":false,"properties":{"entry_point":{"additionalProperties":false,"properties":{"kind":{"enum":["metadata-token","native-rva","none"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","value"],"type":"object"},"flag_names":{"items":{"type":"string"},"type":"array"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"header_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"header_size":{"maximum":9007199254740991,"minimum":72,"type":"integer"},"managed_native_header_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"managed_native_header_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"metadata_rva":{"maximum":4294967295,"minimum":1,"type":"integer"},"metadata_size":{"maximum":4294967295,"minimum":1,"type":"integer"},"ready_to_run_signature":{"type":"boolean"},"resources_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"resources_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"runtime_version":{"type":"string"},"strong_name_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"strong_name_size":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["header_offset","header_size","runtime_version","flags","flag_names","entry_point","metadata_rva","metadata_size","resources_rva","resources_size","strong_name_rva","strong_name_size","managed_native_header_rva","managed_native_header_size","ready_to_run_signature"],"type":"object"},{"type":"null"}]},"machine":{"maximum":65535,"minimum":0,"type":"integer"},"machine_hex":{"pattern":"^0x[0-9a-f]{4}$","type":"string"},"optional_header":{"enum":["pe32","pe32-plus"],"type":"string"},"section_count":{"maximum":96,"minimum":1,"type":"integer"}},"required":["machine","machine_hex","architecture","optional_header","section_count","characteristics","cli"],"type":"object"},"references":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"culture":{"anyOf":[{"type":"string"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"hash_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hash_value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"public_key_or_token":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["none","public-key","public-key-token"],"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"token":{"anyOf":[{"pattern":"^[a-f0-9]{16}$","type":"string"},{"type":"null"}]}},"required":["kind","byte_length","sha256","token"],"type":"object"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"version":{"pattern":"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+\\\\.\\\\d+$","type":"string"}},"required":["name","version","culture","flags","public_key_or_token","hash_value_sha256","hash_value_length","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"resources":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"data_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"data_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"declared_offset":{"maximum":4294967295,"minimum":0,"type":"integer"},"embedded":{"type":"boolean"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"implementation_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"visibility":{"enum":["public","private","unknown"],"type":"string"}},"required":["name","flags","visibility","implementation_token","embedded","declared_offset","data_length","data_sha256","token","row_offset"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"schema_version":{"const":1,"type":"number"},"target_frameworks":{"items":{"type":"string"},"type":"array"}},"required":["schema_version","artifact","pe","classification","metadata","module","assembly","target_frameworks","references","resources","attributes","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Artifact"},{"analysisOperation":"inspect_managed_members","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect bounded PE/CLI metadata members, signatures, raw CIL hashes, limited member-result-v1 decoded-instruction-tuple hashes, separately reported exception regions, call edges, and field-access anchors without loading or executing target code. Metadata tokens are reported as build-local coordinates bound to the artifact SHA-256 and MVID; the v1 tuple hash does not resolve them or fully commit control flow.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"edge_limit":100,"method_limit":25}],"properties":{"edge_limit":{"default":250,"description":"Maximum number of edge entries to return.","maximum":1000,"minimum":1,"type":"integer"},"edge_offset":{"default":0,"description":"Zero-based index of the first edge to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"field_limit":{"default":100,"description":"Maximum number of field entries to return.","maximum":500,"minimum":1,"type":"integer"},"field_offset":{"default":0,"description":"Zero-based index of the first field to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"instruction_anchor_limit":{"default":100,"description":"Maximum number of instruction anchor entries to return.","maximum":500,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_method_body_bytes":{"default":1048576,"description":"Maximum permitted method body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_method_instructions":{"default":10000,"description":"Maximum permitted method instructions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"member_ref_limit":{"default":100,"description":"Maximum number of member ref entries to return.","maximum":500,"minimum":1,"type":"integer"},"member_ref_offset":{"default":0,"description":"Zero-based index of the first member ref to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"method_limit":{"default":100,"description":"Maximum number of method entries to return.","maximum":500,"minimum":1,"type":"integer"},"method_offset":{"default":0,"description":"Zero-based index of the first method to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"type_limit":{"default":100,"description":"Maximum number of type entries to return.","maximum":500,"minimum":1,"type":"integer"},"type_offset":{"default":0,"description":"Zero-based index of the first type to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_members","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"call_edges":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"caller":{"anyOf":[{"type":"string"},{"type":"null"}]},"caller_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"opcode":{"type":"string"},"target_kind":{"enum":["method-def","member-ref","method-spec","unknown"],"type":"string"},"target_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"target_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["caller_token","caller","opcode","target_token","target_kind","target_name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"field_accesses":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"field_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"method_token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"opcode":{"type":"string"}},"required":["method_token","method","opcode","field_token","field_name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"fields":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"declaring_type_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","declaring_type_token","declaring_type","name","flags","signature"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"identity_scope":{"additionalProperties":false,"properties":{"requires_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"requires_mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"token_identity":{"const":"build-local","type":"string"}},"required":["token_identity","requires_artifact_sha256","requires_mvid"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"member_refs":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"parent_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","parent_token","name","signature"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","table_row_counts"],"type":"object"},"methods":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"body":{"additionalProperties":false,"properties":{"anchors":{"items":{"additionalProperties":false,"properties":{"il_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"opcode":{"minLength":1,"type":"string"},"operand":{"anyOf":[{"type":"string"},{"type":"null"}]},"operand_kind":{"enum":["none","branch","constant","field","method","signature","string","switch","token","type","variable","unknown"],"type":"string"}},"required":["il_offset","opcode","operand_kind","operand"],"type":"object"},"type":"array"},"decoded_instruction_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exception_regions":{"items":{"additionalProperties":false,"properties":{"class_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"filter_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"handler_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"handler_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"try_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"try_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["flags","try_offset","try_length","handler_offset","handler_length","class_token","filter_offset"],"type":"object"},"type":"array"},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"header_format":{"enum":["tiny","fat","none","unknown"],"type":"string"},"il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"SHA-256 of exactly the raw il_size CIL bytes; excludes the method header, locals signature, alignment, and extra sections"},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"init_locals":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"instruction_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"local_var_sig_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"max_stack":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Member-result-v1 SHA-256 of UTF-8 JSON [opcode, operand_kind, operand] tuples for a complete decode; retains build-local tokens, omits switch targets, and excludes headers, locals, and exception regions"},"opcode_counts":{"additionalProperties":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"status":{"enum":["present","partial","absent","malformed","too-large"],"type":"string"},"truncated_instructions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","header_format","rva","file_offset","max_stack","init_locals","local_var_sig_token","il_size","il_sha256","normalized_il_sha256","instruction_count","decoded_instruction_count","truncated_instructions","opcode_counts","anchors","exception_regions","issue"],"type":"object"},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"declaring_type_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"impl_flags":{"maximum":65535,"minimum":0,"type":"integer"},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"signature":{"additionalProperties":false,"properties":{"calling_convention":{"anyOf":[{"type":"string"},{"type":"null"}]},"field_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"generic_parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"issue":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["method","field","unknown"],"type":"string"},"parameter_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"parameter_types":{"items":{"type":"string"},"type":"array"},"parse_status":{"enum":["decoded","partial","unsupported","malformed"],"type":"string"},"raw_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"raw_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"return_type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["raw_length","raw_sha256","kind","parse_status","calling_convention","generic_parameter_count","parameter_count","return_type","parameter_types","field_type","issue"],"type":"object"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","declaring_type_token","declaring_type","name","rva","impl_flags","flags","signature","body"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"types":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"extends_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"field_list":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_row":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"last_row":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["first_row","last_row","count"],"type":"object"},"flags":{"maximum":4294967295,"minimum":0,"type":"integer"},"full_name":{"type":"string"},"method_list":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_row":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"last_row":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["first_row","last_row","count"],"type":"object"},"name":{"type":"string"},"namespace":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","namespace","name","full_name","flags","extends_token","field_list","method_list"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"}},"required":["schema_version","artifact","module","metadata","identity_scope","types","fields","methods","member_refs","call_edges","field_accesses","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Members"},{"analysisOperation":"inspect_managed_native_boundaries","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect PE/CLI ModuleRef, ImplMap/PInvoke declarations, CLI native-header indicators, and non-IL method implementation flags without loading or executing target code. Results are managed declarations and degraded native-boundary observations, not verified native exports or addresses.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"implementation_limit":50,"import_limit":50}],"properties":{"implementation_limit":{"default":100,"description":"Maximum number of implementation entries to return.","maximum":500,"minimum":1,"type":"integer"},"implementation_offset":{"default":0,"description":"Zero-based index of the first implementation to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"import_limit":{"default":100,"description":"Maximum number of import entries to return.","maximum":500,"minimum":1,"type":"integer"},"import_offset":{"default":0,"description":"Zero-based index of the first import to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"max_file_bytes":{"default":268435456,"description":"Maximum permitted file bytes for this operation.","maximum":1073741824,"minimum":4096,"type":"integer"},"max_heap_item_bytes":{"default":1048576,"description":"Maximum permitted heap item bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_metadata_bytes":{"default":67108864,"description":"Maximum permitted metadata bytes for this operation.","maximum":268435456,"minimum":256,"type":"integer"},"max_table_rows":{"default":100000,"description":"Maximum permitted table rows for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"module_ref_limit":{"default":100,"description":"Maximum number of module ref entries to return.","maximum":500,"minimum":1,"type":"integer"},"module_ref_offset":{"default":0,"description":"Zero-based index of the first module ref to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_native_boundaries","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"format":{"const":"pe","type":"string"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length","format"],"type":"object"},"cli_native":{"additionalProperties":false,"properties":{"il_only":{"type":"boolean"},"managed_native_header_rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"managed_native_header_size":{"maximum":4294967295,"minimum":0,"type":"integer"},"native_entry_point":{"type":"boolean"},"ready_to_run_signature":{"type":"boolean"},"requires_32bit":{"type":"boolean"},"strong_name_signed":{"type":"boolean"}},"required":["il_only","requires_32bit","strong_name_signed","native_entry_point","ready_to_run_signature","managed_native_header_rva","managed_native_header_size"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["invalid-cli-header","invalid-directory","invalid-metadata-root","invalid-stream","missing-stream","invalid-tables","invalid-row","invalid-heap-index","invalid-string","invalid-blob","invalid-guid","invalid-resource","limit-exceeded"],"type":"string"},"detail":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"scope":{"minLength":1,"type":"string"}},"required":["code","scope","offset","detail"],"type":"object"},"type":"array"},"state":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["state","issues"],"type":"object"},"identity_scope":{"additionalProperties":false,"properties":{"requires_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"requires_mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"token_identity":{"const":"build-local","type":"string"}},"required":["token_identity","requires_artifact_sha256","requires_mvid"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"table_row_counts":{"additionalProperties":{"maximum":4294967295,"minimum":0,"type":"integer"},"propertyNames":{"type":"string"},"type":"object"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["status","version","table_row_counts"],"type":"object"},"module":{"anyOf":[{"additionalProperties":false,"properties":{"enc_base_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"enc_id":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"generation":{"maximum":65535,"minimum":0,"type":"integer"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["name","generation","mvid","enc_id","enc_base_id","token","row_offset"],"type":"object"},{"type":"null"}]},"module_refs":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","name"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"native_implementations":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"body_interpretation":{"enum":["managed-cil","native-or-runtime","not-file-backed","unknown"],"type":"string"},"boundary_kind":{"enum":["pinvoke","native-body","runtime-provided","unmanaged-method","mixed-or-unknown"],"type":"string"},"code_type":{"enum":["il","native","optil","runtime","unknown"],"type":"string"},"flags":{"maximum":65535,"minimum":0,"type":"integer"},"impl_flags":{"maximum":65535,"minimum":0,"type":"integer"},"managed_kind":{"enum":["managed","unmanaged","unknown"],"type":"string"},"name":{"type":"string"},"pinvoke_declared":{"type":"boolean"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rva":{"maximum":4294967295,"minimum":0,"type":"integer"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","row_offset","name","rva","flags","impl_flags","code_type","managed_kind","pinvoke_declared","boundary_kind","body_interpretation"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"pinvoke_imports":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"additionalProperties":false,"properties":{"best_fit":{"enum":["assembly-default","enabled","disabled","unknown"],"type":"string"},"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"import_name":{"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"import_scope_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"mapping_flags":{"maximum":65535,"minimum":0,"type":"integer"},"mapping_flags_hex":{"pattern":"^0x[0-9a-f]{4}$","type":"string"},"member_kind":{"enum":["method","field","unknown"],"type":"string"},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"row_offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"supports_last_error":{"type":"boolean"},"throw_on_unmappable_char":{"enum":["assembly-default","enabled","disabled","unknown"],"type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"verification":{"const":"managed-declaration-only","type":"string"}},"required":["token","row_offset","mapping_flags","mapping_flags_hex","member_token","member_kind","member_name","import_name","import_scope_token","import_scope_name","no_mangle","char_set","call_convention","supports_last_error","best_fit","throw_on_unmappable_char","verification"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","returned","dropped","complete"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"mixed_mode_or_native_header":{"type":"boolean"},"module_ref_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_implementation_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_import_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ready_to_run":{"type":"boolean"}},"required":["module_ref_count","pinvoke_import_count","native_implementation_count","ready_to_run","mixed_mode_or_native_header"],"type":"object"}},"required":["schema_version","artifact","module","metadata","identity_scope","cli_native","module_refs","pinvoke_imports","native_implementations","summary","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Native Boundaries"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two authenticated inspect_managed_members Evidence records using unique-only decoded-CIL-v1/signature and structural method-shape tiers. Names are reported as observations but are not used as a matching basis; metadata tokens remain build-local coordinates bound to each artifact SHA-256 and MVID, and the v1 tuple digest does not itself remap them.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_id":"ev_45a77d52db5dc9beaf59a9b8ee062c945fda709bd0d3a91fa4e972d85a848324","limits":{"max_candidates":25,"max_field_matches":50,"max_method_matches":100},"right_evidence_id":"ev_8d6450759b2bb695b3b41b0db8d7ddc4a3e9f64a52b93194bc59d2b564c2285c"}],"properties":{"left_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidates":50,"max_field_matches":5000,"max_method_matches":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidates":{"default":50,"description":"Maximum permitted candidates for this operation.","maximum":500,"minimum":1,"type":"integer"},"max_field_matches":{"default":5000,"description":"Maximum permitted field matches for this operation.","maximum":50000,"minimum":0,"type":"integer"},"max_method_matches":{"default":10000,"description":"Maximum permitted method matches for this operation.","maximum":50000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"application","name":"compare_managed_members","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"algorithm":{"additionalProperties":false,"properties":{"name":{"const":"rea-managed-member-comparison","type":"string"},"name_matching":{"const":"not-used","type":"string"},"token_identity":{"const":"build-local","type":"string"},"version":{"const":1,"type":"number"}},"required":["name","version","token_identity","name_matching"],"type":"object"},"comparison_id":{"pattern":"^mmc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_status":{"enum":["complete","partial","unavailable"],"type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_status":{"enum":["complete","partial","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","left_status","right_status","omitted_methods","omitted_fields","omitted_candidates"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"fields":{"items":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_field_[a-f0-9]{64}$","type":"string"},"left":{"anyOf":[{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature","none"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"type":"array"},"confidence":{"enum":["exact","high","unknown"],"type":"string"},"status":{"enum":["matched","unmatched","ambiguous"],"type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"anyOf":[{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256"],"type":"object"},{"type":"null"}]},"status":{"enum":["unchanged","changed","added","removed","unknown"],"type":"string"}},"required":["item_id","status","left","right","match","evidence_links","limitations"],"type":"object"},"maxItems":50000,"type":"array"},"left":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"fields_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"methods_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","mvid","module_name","metadata_status","methods_total","fields_total"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"matching":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_il_signature":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"field_signature":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural_method_shape":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["exact_il_signature","structural_method_shape","field_signature","ambiguous","unmatched"],"type":"object"},"methods":{"items":{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"maxItems":7,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"item_id":{"pattern":"^mmc_method_[a-f0-9]{64}$","type":"string"},"left":{"anyOf":[{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature","none"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"maxItems":500,"type":"array"},"confidence":{"enum":["exact","high","unknown"],"type":"string"},"status":{"enum":["matched","unmatched","ambiguous"],"type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"anyOf":[{"additionalProperties":false,"properties":{"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256"],"type":"object"},{"type":"null"}]},"status":{"enum":["unchanged","changed","added","removed","unknown"],"type":"string"}},"required":["item_id","status","left","right","match","dimensions","evidence_links","limitations"],"type":"object"},"maxItems":50000,"type":"array"},"right":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"fields_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"methods_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","mvid","module_name","metadata_status","methods_total","fields_total"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","changed","added","removed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","algorithm","left","right","summary","matching","methods","fields","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Managed Members"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Verify managed P/Invoke/native-boundary declarations against authenticated native export or function Evidence without executing managed code or translating managed metadata tokens into native addresses. The workflow preserves declaration-only, verified, inferred, contradicted, and unresolved states.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limits":{"max_candidates_per_import":25,"max_native_observations":20},"managed_boundaries_evidence_id":"ev_5e142d4464b916bcff63fb0835c686152b5b0473a9f1d5f5060d329b1b29739d","native_observation_evidence_ids":["ev_74758ad108882d5752dae4f8fa030c1ed6c7dd62857cb9d2d3a7ce931b52ee7c"]}],"properties":{"limits":{"additionalProperties":false,"default":{"max_candidates_per_import":25,"max_native_observations":20},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidates_per_import":{"default":25,"description":"Maximum permitted candidates per import for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_native_observations":{"default":20,"description":"Maximum permitted native observations for this operation.","maximum":50,"minimum":1,"type":"integer"}},"type":"object"},"managed_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"native_observation_evidence_ids":{"description":"Unique session-owned native observation Evidence IDs","items":{"description":"Session-owned inspect_macho or analyze_function Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":50,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["managed_boundaries_evidence_id","native_observation_evidence_ids"],"type":"object"},"kind":"application","name":"verify_managed_native_boundaries","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"algorithm":{"additionalProperties":false,"properties":{"name":{"const":"rea-managed-native-verification","type":"string"},"token_identity":{"const":"build-local","type":"string"},"token_to_address_mapping":{"const":"not-inferred","type":"string"},"version":{"const":1,"type":"number"}},"required":["name","version","token_identity","token_to_address_mapping"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_native_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","omitted_native_observations","omitted_candidates"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":51,"minItems":2,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"managed_boundary":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"coverage_state":{"enum":["complete","partial","unavailable"],"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]},"native_implementations_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_imports_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["evidence_id","artifact_sha256","artifact_path","mvid","metadata_status","pinvoke_imports_total","native_implementations_total","coverage_state"],"type":"object"},"native_implementations":{"additionalProperties":false,"properties":{"reason":{"maxLength":4096,"minLength":1,"type":"string"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unresolved","reason"],"type":"object"},"native_observations":{"additionalProperties":false,"properties":{"accepted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symbols":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"truncated":{"type":"boolean"},"unsupported":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","accepted","unsupported","symbols","truncated"],"type":"object"},"pinvoke_imports":{"items":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-export-name","exact-function-name","decorated-name-candidate","module-mismatch","no-native-candidate","unsupported-native-evidence"],"type":"string"},"candidates":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"module_path":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"source":{"enum":["macho-export","function-dossier"],"type":"string"}},"required":["evidence_id","operation","name","address","module_name","module_path","source"],"type":"object"},"maxItems":100,"type":"array"},"confidence":{"enum":["observed","inferred","unknown"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":51,"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"managed":{"additionalProperties":false,"properties":{"call_convention":{"enum":["not-specified","winapi","cdecl","stdcall","thiscall","fastcall","unknown"],"type":"string"},"char_set":{"enum":["not-specified","ansi","unicode","auto","unknown"],"type":"string"},"declaration_verification":{"const":"managed-declaration-only","type":"string"},"import_name":{"minLength":1,"type":"string"},"import_scope_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"member_token":{"anyOf":[{"pattern":"^0x[0-9a-f]{8}$","type":"string"},{"type":"null"}]},"no_mangle":{"type":"boolean"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","member_token","member_name","import_name","import_scope_name","no_mangle","char_set","call_convention","declaration_verification"],"type":"object"},"matched_native":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"module_path":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"source":{"enum":["macho-export","function-dossier"],"type":"string"}},"required":["evidence_id","operation","name","address","module_name","module_path","source"],"type":"object"},{"type":"null"}]},"status":{"enum":["verified","inferred","unresolved","contradicted"],"type":"string"}},"required":["item_id","managed","status","basis","confidence","matched_native","candidates","evidence_links","limitations"],"type":"object"},"maxItems":50000,"type":"array"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"contradicted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inferred":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_body_unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["verified","inferred","unresolved","contradicted","native_body_unresolved"],"type":"object"},"verification_id":{"pattern":"^mnv_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","verification_id","algorithm","managed_boundary","native_observations","summary","pinvoke_imports","native_implementations","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Verify Managed Native Boundaries"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Import decompiler-produced managed reconstruction against authenticated inspect_managed_members Evidence. The workflow locks each method to artifact SHA-256, MVID, metadata token, signature hash, and the limited member-result-v1 decoded-IL tuple hash, records the decompiler identity and options, and marks C# or pseudocode as analyst inference rather than canonical byte observation.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"decompiler":{"executable_sha256":null,"family":"ilspy","name":"ilspycmd","options":["--disable-updatecheck","--type","Example.Program"],"version":"9.1.0.7988"},"methods":[{"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","reconstruction":{"end_line":1,"kind":"decompiled-csharp","language":"csharp","source_path":"/examples/Example.Program.cs","start_line":1,"text":"internal static void Main() { }"},"signature_sha256":"3333333333333333333333333333333333333333333333333333333333333333","token":"0x06000001"}],"notes":["Synthetic example only; decompiler output is imported as inference."],"static_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"properties":{"decompiler":{"additionalProperties":false,"description":"Value for decompiler.","properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of executable."},"family":{"description":"Value for family.","enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":512,"minLength":1,"type":"string"},"options":{"default":[],"description":"Value for options.","items":{"maxLength":512,"type":"string"},"maxItems":50,"type":"array"},"version":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["name","version","family","executable_sha256"],"type":"object"},"methods":{"description":"Value for methods.","items":{"additionalProperties":false,"properties":{"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of normalized il."},"reconstruction":{"additionalProperties":false,"description":"Value for reconstruction.","properties":{"end_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Value for end line."},"kind":{"description":"Value for kind.","enum":["decompiled-csharp","decompiled-il","semantic-pseudocode"],"type":"string"},"language":{"description":"Value for language.","enum":["csharp","il","pseudocode"],"type":"string"},"source_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Local filesystem path for source."},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Value for start line."},"text":{"description":"Value for text.","maxLength":65536,"minLength":1,"type":"string"},"text_sha256":{"description":"Exact SHA-256 digest of text.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["kind","language","text"],"type":"object"},"signature_sha256":{"description":"Exact SHA-256 digest of signature.","pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"description":"Value for token.","pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","signature_sha256","normalized_il_sha256","reconstruction"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"notes":{"default":[],"description":"Value for notes.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"static_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["decompiler","methods","static_members_evidence_id"],"type":"object"},"kind":"application","name":"import_managed_reconstruction","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"decompiler":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"family":{"enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"maxLength":512,"minLength":1,"type":"string"},"options":{"default":[],"items":{"maxLength":512,"type":"string"},"maxItems":50,"type":"array"},"options_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"anyOf":[{"maxLength":128,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["name","version","family","executable_sha256","options","options_sha256"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"executed":{"const":false,"type":"boolean"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"methods":{"items":{"additionalProperties":false,"properties":{"body_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reconstruction":{"additionalProperties":false,"properties":{"end_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"kind":{"enum":["decompiled-csharp","decompiled-il","semantic-pseudocode"],"type":"string"},"language":{"enum":["csharp","il","pseudocode"],"type":"string"},"line_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"text":{"maxLength":65536,"minLength":1,"type":"string"},"text_length":{"maximum":65536,"minimum":1,"type":"integer"},"text_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["kind","language","text","text_sha256","text_length","line_count","source_path","start_line","end_line"],"type":"object"},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"validation":{"additionalProperties":false,"properties":{"canonical_observation":{"const":false,"type":"boolean"},"confidence_floor":{"const":"inference","type":"string"},"exact_build_required":{"const":true,"type":"boolean"},"matched_static_member":{"const":true,"type":"boolean"}},"required":["matched_static_member","exact_build_required","canonical_observation","confidence_floor"],"type":"object"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256","body_sha256","il_size","reconstruction","validation"],"type":"object"},"maxItems":50,"minItems":1,"type":"array"},"notes":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"phase":{"const":"reconstruction-import","type":"string"},"reconstruction_id":{"pattern":"^mre_[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"static_observation":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","artifact_path","byte_length","module_name","mvid","metadata_status"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"decompiled_csharp_methods":{"maximum":50,"minimum":0,"type":"integer"},"decompiled_il_methods":{"maximum":50,"minimum":0,"type":"integer"},"imported_methods":{"maximum":50,"minimum":1,"type":"integer"},"pseudocode_methods":{"maximum":50,"minimum":0,"type":"integer"},"total_text_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["imported_methods","decompiled_csharp_methods","decompiled_il_methods","pseudocode_methods","total_text_bytes"],"type":"object"}},"required":["schema_version","reconstruction_id","phase","executed","static_observation","decompiler","summary","methods","notes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Import Managed Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Prepare a separately authorized managed runtime-correlation admission plan from authenticated inspect_managed_members Evidence. The operation is default-disabled, requires the managed_runtime permission ceiling and grant, locks the exact artifact SHA-256, MVID, method signature, and limited member-result-v1 decoded-IL tuple hash, distinguishes attach/load/debugger/reflection/instrumentation effects, and records that no target code was executed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"bounds":{"allow_network":false,"allow_ui":false,"max_output_bytes":65536,"max_threads":32,"timeout_ms":5000},"host":{"architecture":"x86_64","clr_family":"dotnet","os":"linux"},"method":{"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","signature_sha256":"3333333333333333333333333333333333333333333333333333333333333333","token":"0x06000001"},"requested_effect":"attach","static_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"properties":{"bounds":{"additionalProperties":false,"default":{"allow_network":false,"allow_ui":false,"max_output_bytes":65536,"max_threads":32,"timeout_ms":5000},"description":"Value for bounds.","properties":{"allow_network":{"const":false,"default":false,"description":"Value for allow network.","type":"boolean"},"allow_ui":{"const":false,"default":false,"description":"Value for allow ui.","type":"boolean"},"max_output_bytes":{"default":65536,"description":"Maximum permitted output bytes for this operation.","maximum":1048576,"minimum":0,"type":"integer"},"max_threads":{"default":32,"description":"Maximum permitted threads for this operation.","maximum":256,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"type":"object"},"host":{"additionalProperties":false,"description":"Value for host.","properties":{"architecture":{"description":"Value for architecture.","enum":["x86","x86_64","arm","arm64"],"type":"string"},"clr_family":{"description":"Value for clr family.","enum":["dotnet","dotnet-framework","mono","unknown"],"type":"string"},"os":{"description":"Value for os.","enum":["linux","macos","windows"],"type":"string"}},"required":["os","clr_family","architecture"],"type":"object"},"method":{"additionalProperties":false,"description":"Value for method.","properties":{"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of normalized il."},"signature_sha256":{"description":"Exact SHA-256 digest of signature.","pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"description":"Value for token.","pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","signature_sha256","normalized_il_sha256"],"type":"object"},"requested_effect":{"description":"Value for requested effect.","enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"static_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["method","requested_effect","host","static_members_evidence_id"],"type":"object"},"kind":"application","name":"plan_managed_runtime_correlation","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"authority_model":{"additionalProperties":false,"properties":{"capability":{"const":"managed_runtime","type":"string"},"default_enabled":{"const":false,"type":"boolean"},"per_call_approval_required":{"const":true,"type":"boolean"},"permission_grant_id":{"minLength":1,"type":"string"}},"required":["capability","permission_grant_id","default_enabled","per_call_approval_required"],"type":"object"},"bounds":{"additionalProperties":false,"properties":{"allow_network":{"const":false,"default":false,"type":"boolean"},"allow_ui":{"const":false,"default":false,"type":"boolean"},"max_output_bytes":{"default":65536,"maximum":1048576,"minimum":0,"type":"integer"},"max_threads":{"default":32,"maximum":256,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"maximum":60000,"minimum":1,"type":"integer"}},"required":["timeout_ms","max_threads","max_output_bytes","allow_network","allow_ui"],"type":"object"},"correlation_id":{"pattern":"^mrc_[a-f0-9]{64}$","type":"string"},"effect_taxonomy":{"additionalProperties":false,"properties":{"attaches_process":{"type":"boolean"},"instruments_code":{"type":"boolean"},"invokes_target_code":{"const":false,"type":"boolean"},"loads_target":{"type":"boolean"},"uses_debugger":{"type":"boolean"},"uses_reflection":{"type":"boolean"}},"required":["attaches_process","loads_target","uses_debugger","uses_reflection","instruments_code","invokes_target_code"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"executed":{"const":false,"type":"boolean"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"method_lock":{"additionalProperties":false,"properties":{"body_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"body_status":{"enum":["present","partial","absent","malformed","too-large"],"type":"string"},"declaring_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"exact_build_required":{"const":true,"type":"boolean"},"il_size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"name":{"type":"string"},"normalized_il_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"signature_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"token":{"pattern":"^0x[0-9a-f]{8}$","type":"string"}},"required":["token","declaring_type","name","signature_sha256","normalized_il_sha256","body_sha256","il_size","body_status","exact_build_required"],"type":"object"},"phase":{"const":"admission-plan","type":"string"},"requested_runtime":{"additionalProperties":false,"properties":{"effect":{"enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"executable_path":{"minLength":1,"type":"string"},"filesystem":{"const":"owned-artifacts-only","type":"string"},"host":{"additionalProperties":false,"properties":{"architecture":{"enum":["x86","x86_64","arm","arm64"],"type":"string"},"clr_family":{"enum":["dotnet","dotnet-framework","mono","unknown"],"type":"string"},"os":{"enum":["linux","macos","windows"],"type":"string"}},"required":["os","clr_family","architecture"],"type":"object"},"network":{"const":"none","type":"string"}},"required":["effect","host","executable_path","network","filesystem"],"type":"object"},"schema_version":{"const":1,"type":"number"},"static_observation":{"additionalProperties":false,"properties":{"artifact_path":{"minLength":1,"type":"string"},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"metadata_status":{"enum":["absent","complete","partial","malformed"],"type":"string"},"module_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"mvid":{"anyOf":[{"pattern":"^[0-9a-fA-F]{8}(?:-[0-9a-fA-F]{4}){3}-[0-9a-fA-F]{12}$","type":"string"},{"type":"null"}]}},"required":["evidence_id","artifact_sha256","artifact_path","byte_length","module_name","mvid","metadata_status"],"type":"object"},"unsupported_until_executor_exists":{"const":true,"type":"boolean"}},"required":["schema_version","correlation_id","phase","executed","authority_model","static_observation","method_lock","requested_runtime","effect_taxonomy","bounds","unsupported_until_executor_exists","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Plan Managed Runtime Correlation"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Project authenticated managed artifact, member, and native-boundary Evidence into the provider-neutral application graph without executing managed code, loading assemblies, or translating managed metadata tokens to native addresses. The graph preserves managed static observations as managed-specific nodes linked to source Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"limits":{"additionalProperties":false,"default":{"max_fields":5000,"max_methods":10000,"max_native_implementations":5000,"max_pinvoke_imports":5000,"max_types":5000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_fields":{"default":5000,"description":"Maximum permitted fields for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_methods":{"default":10000,"description":"Maximum permitted methods for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_native_implementations":{"default":5000,"description":"Maximum permitted native implementations for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_pinvoke_imports":{"default":5000,"description":"Maximum permitted pinvoke imports for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_types":{"default":5000,"description":"Maximum permitted types for this operation.","maximum":100000,"minimum":0,"type":"integer"}},"type":"object"},"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_artifact_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"additionalProperties":false,"default":{"max_fields":5000,"max_methods":10000,"max_native_implementations":5000,"max_pinvoke_imports":5000,"max_types":5000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_fields":{"default":5000,"description":"Maximum permitted fields for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_methods":{"default":10000,"description":"Maximum permitted methods for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_native_implementations":{"default":5000,"description":"Maximum permitted native implementations for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_pinvoke_imports":{"default":5000,"description":"Maximum permitted pinvoke imports for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_types":{"default":5000,"description":"Maximum permitted types for this operation.","maximum":100000,"minimum":0,"type":"integer"}},"type":"object"},"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_members_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"additionalProperties":false,"default":{"max_fields":5000,"max_methods":10000,"max_native_implementations":5000,"max_pinvoke_imports":5000,"max_types":5000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_fields":{"default":5000,"description":"Maximum permitted fields for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_methods":{"default":10000,"description":"Maximum permitted methods for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_native_implementations":{"default":5000,"description":"Maximum permitted native implementations for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_pinvoke_imports":{"default":5000,"description":"Maximum permitted pinvoke imports for this operation.","maximum":100000,"minimum":0,"type":"integer"},"max_types":{"default":5000,"description":"Maximum permitted types for this operation.","maximum":100000,"minimum":0,"type":"integer"}},"type":"object"},"managed_artifact_evidence_id":{"description":"Session-owned inspect_managed_artifact Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_members_evidence_id":{"description":"Session-owned inspect_managed_members Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"managed_native_boundaries_evidence_id":{"description":"Session-owned inspect_managed_native_boundaries Evidence ID","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["managed_native_boundaries_evidence_id"],"type":"object"}],"examples":[{"limits":{"max_fields":100,"max_methods":100,"max_native_implementations":100,"max_pinvoke_imports":100,"max_types":100},"managed_members_evidence_id":"ev_4871226711dcb86d73cebb54bc54c6e1d6cf227c94c7cf67685dc5d805511493"}],"type":"object"},"kind":"application","name":"project_managed_application_graph","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_native_implementations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_pinvoke_imports":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_types":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","omitted_types","omitted_methods","omitted_fields","omitted_pinvoke_imports","omitted_native_implementations"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3,"minItems":1,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"projection_id":{"pattern":"^magp_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"source_evidence":{"additionalProperties":false,"properties":{"managed_artifact_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"managed_members_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"managed_native_boundaries_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["managed_artifact_evidence_id","managed_members_evidence_id","managed_native_boundaries_evidence_id"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"assemblies":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_implementations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pinvoke_imports":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"types":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["graph_nodes","graph_edges","assemblies","modules","types","methods","fields","pinvoke_imports","native_implementations"],"type":"object"}},"required":["schema_version","projection_id","root_artifact_sha256","source_evidence","summary","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Project Managed Application Graph"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List bounded page targets from an approved user-owned loopback Chrome DevTools Protocol endpoint. Only targets whose current URL matches an approved exact origin are returned; URL credentials, query values, and fragments are redacted.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","limit":100,"offset":0}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["cdp_endpoint","allowed_origins","approved"],"type":"object"},"kind":"browser-provider","name":"list_browser_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"excluded":{"additionalProperties":false,"properties":{"disallowed_origin":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"non_page":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["disallowed_origin","unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"origin":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Browser Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one approved page target through CDP without evaluating JavaScript, navigating, clicking, closing, or mutating the page. Returns bounded DOM structure, accessibility, scripts, resources, attach-window network and console metadata, workers, and redacted storage inventory as Evidence v2.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":false,"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":false,"default":false,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id"],"type":"object"},{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved"],"type":"object"}],"examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","console_text_approved":false,"include_accessibility_text":false,"include_console_text":false,"include_json_body_shapes":false,"include_script_sources":false,"include_storage_fingerprints":false,"include_storage_keys":false,"include_websocket_shapes":false,"json_body_schema_approved":false,"limits":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"observation_ms":500,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS","websocket_shape_approved":false}],"type":"object"},"kind":"browser-provider","name":"inspect_web_page","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"accessibility":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"ignored":{"type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"node_id":{"type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"states":{"default":[],"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}]}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored","states"],"type":"object"},"type":"array"},"text_capture":{"additionalProperties":false,"properties":{"excluded_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"properties":{"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"additionalProperties":false,"properties":{"coverage_started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"items":{"additionalProperties":false,"properties":{"argument_types":{"items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"text_capture":{"additionalProperties":false,"properties":{"retained_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"items":{"additionalProperties":false,"properties":{"argument_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"type":{"type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"type":"number"},"type":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"attribute_names":{"items":{"type":"string"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"type":"string"},"node_type":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"items":{"additionalProperties":false,"properties":{"frame_id":{"type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"metadata":{"additionalProperties":false,"properties":{"agent_hints":{"items":{"additionalProperties":false,"properties":{"declaration":{"type":"string"},"mechanism":{"enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"items":{"additionalProperties":false,"properties":{"attribute":{"enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"type":"boolean"},"responses":{"items":{"additionalProperties":false,"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"csp":{"additionalProperties":false,"properties":{"directives":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"sources":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"items":{"additionalProperties":false,"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}]},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}]},"destination_scope":{"enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}]},"rel":{"items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"policies":{"additionalProperties":false,"properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}]},"coop":{"anyOf":[{"type":"string"},{"type":"null"}]},"corp":{"anyOf":[{"type":"string"},{"type":"null"}]},"permissions_policy_features":{"items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}]},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"type":"string"},"url":{"type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"additionalProperties":false,"properties":{"coverage_started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"type":"boolean"},"requests":{"items":{"additionalProperties":false,"properties":{"body_shapes":{"additionalProperties":false,"properties":{"request":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"response":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"status":{"enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"initiator":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"type":{"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["type","url","line","column"],"type":"object"},"method":{"type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"anyOf":[{"type":"number"},{"type":"null"}]},"url":{"type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"items":{"additionalProperties":false,"properties":{"direction":{"enum":["sent","received"],"type":"string"},"opcode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"additionalProperties":false,"properties":{"format":{"enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}]},"request_id":{"type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"mime_type":{"type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"resource_key":{"pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"is_module":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"resource_reconciliation":{"oneOf":[{"additionalProperties":false,"properties":{"resource_key":{"type":"string"},"status":{"const":"exact","type":"string"}},"required":["status","resource_key"],"type":"object"},{"additionalProperties":false,"properties":{"candidate_resource_keys":{"items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"const":"no_exact_sanitized_url","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"url":{"type":"string"}},"required":["script_key","frame_id","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"additionalProperties":false,"properties":{"cache_names":{"items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"items":{"additionalProperties":false,"properties":{"complete":{"type":"boolean"},"identity_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","type":"string"},"fingerprints_complete":{"default":false,"type":"boolean"},"indexed_db_names":{"items":{"type":"string"},"type":"array"},"local_storage_keys":{"items":{"type":"string"},"type":"array"},"origin":{"type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"session_storage_keys":{"items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"values_redacted":{"const":true,"type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","content_fingerprints","fingerprint_algorithm","fingerprints_complete","values_redacted"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"origin":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"target_id":{"type":"string"},"type":{"type":"string"},"url":{"type":"string"}},"required":["target_id","type","url","origin","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Web Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Capture explicitly approved JavaScript source from one approved CDP page and statically derive a bounded chunk graph, route and endpoint candidates, vendor fingerprints, page-declared WebMCP metadata, and optional separately approved source-map evidence. JavaScript is parsed but never executed.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"analysis_limits":{"default":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"description":"Value for analysis limits.","properties":{"max_ast_nodes":{"default":250000,"description":"Maximum permitted ast nodes for this operation.","maximum":2000000,"minimum":1,"type":"integer"},"max_findings":{"default":1000,"description":"Maximum permitted findings for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_original_sources":{"default":2000,"description":"Maximum permitted original sources for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_source_map_bytes":{"default":4194304,"description":"Maximum permitted source map bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_source_map_mappings":{"default":10000,"description":"Maximum permitted source map mappings for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_source_maps":{"default":100,"description":"Maximum permitted source maps for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_total_source_map_bytes":{"default":16777216,"description":"Maximum permitted total source map bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"}},"type":"object"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"fetch_source_maps":{"const":false,"default":false,"description":"Value for fetch source maps.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"source_map_fetch_approved":{"const":false,"default":false,"description":"Explicit operator approval for source map fetch.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved"],"type":"object"},{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"analysis_limits":{"default":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"description":"Value for analysis limits.","properties":{"max_ast_nodes":{"default":250000,"description":"Maximum permitted ast nodes for this operation.","maximum":2000000,"minimum":1,"type":"integer"},"max_findings":{"default":1000,"description":"Maximum permitted findings for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_original_sources":{"default":2000,"description":"Maximum permitted original sources for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_source_map_bytes":{"default":4194304,"description":"Maximum permitted source map bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_source_map_mappings":{"default":10000,"description":"Maximum permitted source map mappings for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_source_maps":{"default":100,"description":"Maximum permitted source maps for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_total_source_map_bytes":{"default":16777216,"description":"Maximum permitted total source map bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"}},"type":"object"},"approved":{"const":true,"description":"Explicit approval for browser observation","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"console_text_approved":{"default":false,"description":"Explicit operator approval for console text.","type":"boolean"},"fetch_source_maps":{"const":true,"description":"Value for fetch source maps.","type":"boolean"},"include_accessibility_text":{"default":false,"description":"Whether to include accessibility text in the result.","type":"boolean"},"include_console_text":{"default":false,"description":"Whether to include console text in the result.","type":"boolean"},"include_json_body_shapes":{"default":false,"description":"Whether to include json body shapes in the result.","type":"boolean"},"include_script_sources":{"const":true,"default":true,"description":"Whether to include script sources in the result.","type":"boolean"},"include_storage_fingerprints":{"default":false,"description":"Whether to include storage fingerprints in the result.","type":"boolean"},"include_storage_keys":{"default":false,"description":"Whether to include storage keys in the result.","type":"boolean"},"include_websocket_shapes":{"default":false,"description":"Whether to include websocket shapes in the result.","type":"boolean"},"json_body_schema_approved":{"default":false,"description":"Explicit operator approval for json body schema.","type":"boolean"},"limits":{"default":{"max_ax_nodes":2000,"max_ax_text_field_bytes":1024,"max_console_events":200,"max_console_text_field_bytes":1024,"max_dom_nodes":2000,"max_frames":200,"max_json_body_bytes":1048576,"max_json_shape_depth":20,"max_json_shape_nodes":5000,"max_network_events":1000,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":200,"max_storage_keys":1000,"max_total_ax_text_bytes":65536,"max_total_console_text_bytes":65536,"max_total_json_body_bytes":4194304,"max_total_script_source_bytes":4194304,"max_total_websocket_shape_bytes":1048576,"max_websocket_events":500,"max_websocket_shape_bytes":65536,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_ax_nodes":{"default":2000,"description":"Maximum permitted ax nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_ax_text_field_bytes":{"default":1024,"description":"Maximum permitted ax text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_console_events":{"default":200,"description":"Maximum permitted console events for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_console_text_field_bytes":{"default":1024,"description":"Maximum permitted console text field bytes for this operation.","maximum":16384,"minimum":1,"type":"integer"},"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_json_body_bytes":{"default":1048576,"description":"Maximum permitted json body bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_json_shape_depth":{"default":20,"description":"Maximum permitted json shape depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_json_shape_nodes":{"default":5000,"description":"Maximum permitted json shape nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_network_events":{"default":1000,"description":"Maximum permitted network events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":200,"description":"Maximum permitted scripts for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_storage_keys":{"default":1000,"description":"Maximum permitted storage keys for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_ax_text_bytes":{"default":65536,"description":"Maximum permitted total ax text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_console_text_bytes":{"default":65536,"description":"Maximum permitted total console text bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_total_json_body_bytes":{"default":4194304,"description":"Maximum permitted total json body bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_total_websocket_shape_bytes":{"default":1048576,"description":"Maximum permitted total websocket shape bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_websocket_events":{"default":500,"description":"Maximum permitted websocket events for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_websocket_shape_bytes":{"default":65536,"description":"Maximum permitted websocket shape bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"source_map_fetch_approved":{"const":true,"description":"Explicit operator approval for source map fetch.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"},"websocket_shape_approved":{"default":false,"description":"Explicit operator approval for websocket shape.","type":"boolean"}},"required":["cdp_endpoint","allowed_origins","approved","target_id","source_capture_approved","fetch_source_maps","source_map_fetch_approved"],"type":"object"}],"examples":[{"allowed_origins":["https://app.example.test"],"analysis_limits":{"max_ast_nodes":250000,"max_findings":1000,"max_original_sources":2000,"max_source_map_bytes":4194304,"max_source_map_mappings":10000,"max_source_maps":100,"max_total_source_map_bytes":16777216},"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","fetch_source_maps":false,"include_accessibility_text":false,"include_script_sources":true,"include_storage_keys":false,"observation_ms":500,"source_capture_approved":true,"source_map_fetch_approved":false,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"type":"object"},"kind":"browser-provider","name":"analyze_web_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"capture":{"additionalProperties":false,"properties":{"scripts_analyzed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_artifacts":{"items":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text_available":{"const":true,"type":"boolean"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text_available"],"type":"object"},"type":"array"},"target_url":{"type":"string"}},"required":["target_url","scripts_observed","scripts_analyzed","source_artifacts"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"dropped_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete_within_limits","truncated","partial"],"type":"string"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","parsed_scripts","parse_failures","visited_ast_nodes","dropped_findings"],"type":"object"},"inferences":{"items":{"additionalProperties":false,"properties":{"basis":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"detector":{"type":"string"},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","artifact_sha256","line","column","detector"],"type":"object"},"minItems":1,"type":"array"},"confidence":{"enum":["low","medium","high"],"type":"string"},"kind":{"enum":["vendor_fingerprint","route_framework","bundle_runtime"],"type":"string"},"value":{"type":"string"}},"required":["kind","value","confidence","basis"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observations":{"additionalProperties":false,"properties":{"chunks":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"from_script_key":{"type":"string"},"kind":{"enum":["static_import","dynamic_import","require","worker_import"],"type":"string"},"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"resolved_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"specifier":{"type":"string"}},"required":["from_script_key","kind","specifier","resolved_url","location"],"type":"object"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"script_key":{"type":"string"},"url":{"type":"string"}},"required":["script_key","url","artifact_sha256","bytes"],"type":"object"},"type":"array"}},"required":["nodes","edges"],"type":"object"},"endpoints":{"items":{"additionalProperties":false,"properties":{"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"mechanism":{"type":"string"},"value":{"type":"string"}},"required":["value","mechanism","location"],"type":"object"},"type":"array"},"routes":{"items":{"additionalProperties":false,"properties":{"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"mechanism":{"type":"string"},"value":{"type":"string"}},"required":["value","mechanism","location"],"type":"object"},"type":"array"},"source_maps":{"additionalProperties":false,"properties":{"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dropped_script_keys":{"items":{"type":"string"},"type":"array"},"items":{"items":{"additionalProperties":false,"properties":{"artifact":{"anyOf":[{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},{"type":"null"}]},"declared_url":{"type":"string"},"limitation":{"anyOf":[{"type":"string"},{"type":"null"}]},"mappings":{"items":{"additionalProperties":false,"properties":{"generated_column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"generated_line":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"original_column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_line":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"type":"string"}},"required":["generated_line","generated_column","source","original_line","original_column","name"],"type":"object"},"type":"array"},"original_module_edges":{"items":{"additionalProperties":false,"properties":{"from_source":{"type":"string"},"kind":{"enum":["static_import","dynamic_import","require"],"type":"string"},"resolved_source":{"anyOf":[{"type":"string"},{"type":"null"}]},"specifier":{"type":"string"}},"required":["from_source","kind","specifier","resolved_source"],"type":"object"},"type":"array"},"original_sources":{"items":{"additionalProperties":false,"properties":{"artifact":{"anyOf":[{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},{"type":"null"}]},"source":{"type":"string"}},"required":["source","artifact"],"type":"object"},"type":"array"},"script_key":{"type":"string"},"status":{"enum":["included","fetch_failed","invalid","policy_filtered","truncated"],"type":"string"}},"required":["script_key","declared_url","status","artifact","original_sources","original_module_edges","mappings","limitation"],"type":"object"},"type":"array"},"processed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["not_requested","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","requested","processed","dropped","dropped_script_keys","items"],"type":"object"},"webmcp_declarations":{"items":{"additionalProperties":false,"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"script_key":{"type":"string"}},"required":["script_key","line","column"],"type":"object"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"schema_property_names":{"items":{"type":"string"},"type":"array"},"trust":{"const":"page-declared-untrusted","type":"string"}},"required":["name","description","schema_property_names","trust","location"],"type":"object"},"type":"array"}},"required":["chunks","routes","endpoints","webmcp_declarations","source_maps"],"type":"object"},"schema_version":{"const":1,"type":"number"},"unknowns":{"items":{"additionalProperties":false,"properties":{"affected_script_keys":{"items":{"type":"string"},"type":"array"},"dimension":{"type":"string"},"reason":{"type":"string"}},"required":["dimension","reason","affected_script_keys"],"type":"object"},"type":"array"}},"required":["schema_version","capture","observations","inferences","unknowns","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Web Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Arm a bounded CDP observation window while the user operates the page. Allows approved same-origin reload and SPA navigation, records ordered navigation, redirect, lifecycle, and failure metadata, and stops before retaining an out-of-policy destination.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","max_timeline_events":2000,"observation_ms":10000,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"max_timeline_events":{"default":2000,"description":"Maximum permitted timeline events for this operation.","maximum":20000,"minimum":1,"type":"integer"},"observation_ms":{"default":10000,"description":"Value for observation ms.","maximum":60000,"minimum":1,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved"],"type":"object"},"kind":"browser-provider","name":"observe_web_session","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"target":{"additionalProperties":false,"properties":{"final_url":{"anyOf":[{"type":"string"},{"type":"null"}]},"initial_url":{"type":"string"},"target_id":{"type":"string"}},"required":["target_id","initial_url","final_url"],"type":"object"},"timeline":{"items":{"additionalProperties":false,"properties":{"destination_scope":{"anyOf":[{"enum":["approved","outside_policy","unsupported"],"type":"string"},{"type":"null"}]},"detail":{"anyOf":[{"type":"string"},{"type":"null"}]},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"loader_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"request_id":{"anyOf":[{"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timestamp":{"minimum":0,"type":"number"},"type":{"enum":["navigation_requested","navigation_committed","same_origin_reload","same_document_navigation","redirect","load_failed","lifecycle","target_terminated"],"type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["sequence","type","timestamp","frame_id","loader_id","request_id","url","destination_scope","detail"],"type":"object"},"type":"array"},"window":{"additionalProperties":false,"properties":{"armed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"end_reason":{"enum":["window_elapsed","target_left_scope","target_terminated"],"type":"string"},"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"requested_ms":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["armed_at","ended_at","requested_ms","end_reason"],"type":"object"}},"required":["schema_version","browser","target","window","timeline","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Observe Web Session"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inventory page-registered WebMCP tools using the experimental CDP WebMCP domain. Metadata is bounded and page-declared-untrusted; REA never registers or invokes discovered tools.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","max_schema_bytes":262144,"max_schema_depth":20,"max_schema_nodes":5000,"max_tools":500,"observation_ms":100,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"max_schema_bytes":{"default":262144,"description":"Maximum permitted schema bytes for this operation.","maximum":1048576,"minimum":1,"type":"integer"},"max_schema_depth":{"default":20,"description":"Maximum permitted schema depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_schema_nodes":{"default":5000,"description":"Maximum permitted schema nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_tools":{"default":500,"description":"Maximum permitted tools for this operation.","maximum":5000,"minimum":1,"type":"integer"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved"],"type":"object"},"kind":"browser-provider","name":"discover_webmcp_tools","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"status":{"enum":["available","unavailable"],"type":"string"},"target":{"additionalProperties":false,"properties":{"origin":{"type":"string"},"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}]}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"enum":["declarative","imperative"],"type":"string"},"description":{"type":"string"},"frame_id":{"type":"string"},"frame_url":{"type":"string"},"input_schema_shape":{"anyOf":[{"additionalProperties":false,"properties":{"max_depth_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"items":{"additionalProperties":false,"properties":{"observations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"type":"string"},"types":{"items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}]},"name":{"type":"string"},"owner_origin":{"type":"string"},"registration_source":{"anyOf":[{"additionalProperties":false,"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"url":{"type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}]},"tool_key":{"pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Discover Webmcp Tools"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Compare either passive web captures or step-indexed browser scenarios. Scenario comparison aligns exact step IDs, records deterministic literal normalization, and exposes bounded artifact-level changes plus alignment failures. Missing or truncated evidence never proves equality.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"after":{"description":"Later passive web-page capture.","properties":{"inspection":{"description":"Value for inspection.","properties":{"accessibility":{"description":"Value for accessibility.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for description."},"ignored":{"description":"Value for ignored.","type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"node_id":{"description":"Value for node id.","type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent id."},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for role."},"states":{"default":[],"description":"Value for states.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"Value for value."}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored"],"type":"object"},"type":"array"},"text_capture":{"description":"Value for text capture.","properties":{"excluded_fields":{"description":"Value for excluded fields.","maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"description":"Value for truncated fields.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"description":"Value for capture window.","properties":{"ended_at":{"description":"Value for ended at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"description":"Value for started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"description":"Value for console.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"description":"Value for events.","items":{"properties":{"argument_types":{"description":"Value for argument types.","items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"text_capture":{"description":"Value for text capture.","properties":{"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"description":"Value for truncated values.","maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"description":"Value for values.","items":{"properties":{"argument_index":{"description":"Value for argument index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","type":"string"},"type":{"description":"Value for type.","type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"description":"Value for timestamp.","type":"number"},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"description":"Value for dom.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"attribute_names":{"description":"Value for attribute names.","items":{"type":"string"},"type":"array"},"index":{"description":"Value for index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"description":"Value for node name.","type":"string"},"node_type":{"description":"Value for node type.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"description":"Value for node value length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"description":"Value for parent index.","maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"description":"Value for frames.","items":{"properties":{"frame_id":{"description":"Value for frame id.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent frame id."},"url":{"description":"Value for url.","type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"metadata":{"description":"Value for metadata.","properties":{"agent_hints":{"description":"Value for agent hints.","items":{"properties":{"declaration":{"description":"Value for declaration.","type":"string"},"mechanism":{"description":"Value for mechanism.","enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"description":"Value for dom urls.","items":{"properties":{"attribute":{"description":"Value for attribute.","enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"description":"Value for node index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"description":"Value for excluded dom urls.","maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"description":"Value for headers allowlisted.","type":"boolean"},"responses":{"description":"Value for responses.","items":{"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for content encoding."},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for content length."},"csp":{"description":"Value for csp.","properties":{"directives":{"description":"Value for directives.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"sources":{"description":"Value for sources.","items":{"properties":{"kind":{"description":"Value for kind.","enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for value."}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"description":"Value for hash count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"description":"Value for nonce count.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"description":"Value for links.","items":{"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for as."},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for crossorigin."},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for href."},"rel":{"description":"Value for rel.","items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for type."}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"policies":{"description":"Value for policies.","properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coep."},"coop":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coop."},"corp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for corp."},"permissions_policy_features":{"description":"Value for permissions policy features.","items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for referrer policy."},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for x content type options."}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"description":"Value for request id.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"description":"Value for network.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"},"requests":{"description":"Value for requests.","items":{"properties":{"body_shapes":{"description":"Value for body shapes.","properties":{"request":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for request."},"response":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for encoded data length."},"initiator":{"description":"Value for initiator.","properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","url","line","column"],"type":"object"},"method":{"description":"Value for method.","type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"request_id":{"description":"Value for request id.","type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for resource type."},"status":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Current lifecycle or verification status."},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"description":"Value for websocket events.","items":{"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["sent","received"],"type":"string"},"opcode":{"description":"Value for opcode.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"properties":{"format":{"description":"Declared input artifact format.","enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for json shape."},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}],"description":"Value for payload shape."},"request_id":{"description":"Value for request id.","type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"description":"Value for resources.","items":{"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for content size."},"mime_type":{"description":"Value for mime type.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_key":{"description":"Value for resource key.","pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"scripts":{"description":"Value for scripts.","properties":{"items":{"description":"Value for items.","items":{"properties":{"cdp_hash":{"description":"Value for cdp hash.","type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for frame id."},"is_module":{"description":"Whether is module.","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for language."},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_reconciliation":{"description":"Value for resource reconciliation.","oneOf":[{"properties":{"resource_key":{"description":"Value for resource key.","type":"string"},"status":{"const":"exact","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","resource_key"],"type":"object"},{"properties":{"candidate_resource_keys":{"description":"Value for candidate resource keys.","items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"properties":{"reason":{"const":"no_exact_sanitized_url","description":"Value for reason.","type":"string"},"status":{"const":"unmatched","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"description":"Value for script key.","pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"description":"Value for source.","oneOf":[{"properties":{"included":{"const":false,"description":"Value for included.","type":"boolean"},"reason":{"description":"Value for reason.","type":"string"}},"required":["included","reason"],"type":"object"},{"properties":{"artifact":{"description":"Value for artifact.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","description":"Value for charset.","type":"string"},"media_type":{"description":"Value for media type.","maxLength":256,"minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"description":"Value for included.","type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for source map url."},"url":{"description":"Value for url.","type":"string"}},"required":["script_key","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"description":"Value for storage.","properties":{"cache_names":{"description":"Value for cache names.","items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"description":"Value for content fingerprints.","items":{"properties":{"complete":{"description":"Value for complete.","type":"boolean"},"identity_sha256":{"description":"Exact SHA-256 digest of identity.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"description":"Value for scope.","enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","description":"Value for fingerprint algorithm.","type":"string"},"fingerprints_complete":{"default":false,"description":"Value for fingerprints complete.","type":"boolean"},"indexed_db_names":{"description":"Value for indexed db names.","items":{"type":"string"},"type":"array"},"local_storage_keys":{"description":"Value for local storage keys.","items":{"type":"string"},"type":"array"},"origin":{"description":"Value for origin.","type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for quota."},"session_storage_keys":{"description":"Value for session storage keys.","items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for usage."},"values_redacted":{"const":true,"description":"Value for values redacted.","type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","values_redacted"],"type":"object"},"target":{"description":"Value for target.","properties":{"attached":{"description":"Value for attached.","type":"boolean"},"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"title":{"description":"Value for title.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"description":"Value for workers.","items":{"properties":{"attached":{"description":"Value for attached.","type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for opener target id."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for parent frame id."},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","url","origin","attached"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"},"webmcp":{"anyOf":[{"properties":{"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["available","unavailable"],"type":"string"},"target":{"description":"Value for target.","properties":{"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"description":"Value for tools.","properties":{"items":{"description":"Value for items.","items":{"properties":{"annotations":{"description":"Value for annotations.","properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for autosubmit."},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for read only."},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for untrusted content."}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"description":"Value for declaration kind.","enum":["declarative","imperative"],"type":"string"},"description":{"description":"Value for description.","type":"string"},"frame_id":{"description":"Value for frame id.","type":"string"},"frame_url":{"description":"Value for frame url.","type":"string"},"input_schema_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for input schema shape."},"name":{"description":"Exact name used by this operation.","type":"string"},"owner_origin":{"description":"Value for owner origin.","type":"string"},"registration_source":{"anyOf":[{"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"url":{"description":"Value for url.","type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}],"description":"Value for registration source."},"tool_key":{"description":"Value for tool key.","pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for webmcp."}},"required":["inspection"],"type":"object"},"before":{"description":"Earlier passive web-page capture.","properties":{"inspection":{"description":"Value for inspection.","properties":{"accessibility":{"description":"Value for accessibility.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"description":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for description."},"ignored":{"description":"Value for ignored.","type":"boolean"},"name":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"node_id":{"description":"Value for node id.","type":"string"},"parent_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent id."},"role":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for role."},"states":{"default":[],"description":"Value for states.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value":{"anyOf":[{"type":"boolean"},{"type":"number"},{"type":"string"}],"description":"Value for value."}},"required":["name","value"],"type":"object"},"type":"array"}},"required":["node_id","parent_id","role","name","description","ignored"],"type":"object"},"type":"array"},"text_capture":{"description":"Value for text capture.","properties":{"excluded_fields":{"description":"Value for excluded fields.","maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated","unavailable"],"type":"string"},"truncated_fields":{"description":"Value for truncated fields.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","retained_bytes","excluded_fields","truncated_fields"],"type":"object"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","text_capture","nodes"],"type":"object"},"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"description":"Value for capture window.","properties":{"ended_at":{"description":"Value for ended at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"description":"Value for started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"console":{"description":"Value for console.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"events":{"description":"Value for events.","items":{"properties":{"argument_types":{"description":"Value for argument types.","items":{"type":"string"},"type":"array"},"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"text_capture":{"description":"Value for text capture.","properties":{"retained_bytes":{"description":"Bounded byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","truncated"],"type":"string"},"truncated_values":{"description":"Value for truncated values.","maximum":9007199254740991,"minimum":0,"type":"integer"},"values":{"description":"Value for values.","items":{"properties":{"argument_index":{"description":"Value for argument index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","type":"string"},"type":{"description":"Value for type.","type":"string"}},"required":["argument_index","type","text"],"type":"object"},"type":"array"}},"required":["status","values","retained_bytes","truncated_values"],"type":"object"},"timestamp":{"description":"Value for timestamp.","type":"number"},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","timestamp","argument_types","url","line","column","text_capture"],"type":"object"},"type":"array"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"}},"required":["events","coverage_started_at","prior_activity_available"],"type":"object"},"dom":{"description":"Value for dom.","properties":{"nodes":{"description":"Value for nodes.","items":{"properties":{"attribute_names":{"description":"Value for attribute names.","items":{"type":"string"},"type":"array"},"index":{"description":"Value for index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"description":"Value for node name.","type":"string"},"node_type":{"description":"Value for node type.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"description":"Value for node value length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"description":"Value for parent index.","maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"description":"Value for total nodes.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"description":"Value for frames.","items":{"properties":{"frame_id":{"description":"Value for frame id.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for parent frame id."},"url":{"description":"Value for url.","type":"string"}},"required":["frame_id","parent_frame_id","url","origin"],"type":"object"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"metadata":{"description":"Value for metadata.","properties":{"agent_hints":{"description":"Value for agent hints.","items":{"properties":{"declaration":{"description":"Value for declaration.","type":"string"},"mechanism":{"description":"Value for mechanism.","enum":["link_rel","dom_link_rel","well_known_resource","response_header"],"type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["mechanism","declaration","url","trust"],"type":"object"},"type":"array"},"dom_urls":{"description":"Value for dom urls.","items":{"properties":{"attribute":{"description":"Value for attribute.","enum":["href","src","action","formaction","poster"],"type":"string"},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"node_index":{"description":"Value for node index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["node_index","attribute","url","destination_scope"],"type":"object"},"type":"array"},"excluded_dom_urls":{"description":"Value for excluded dom urls.","maximum":9007199254740991,"minimum":0,"type":"integer"},"headers_allowlisted":{"const":true,"description":"Value for headers allowlisted.","type":"boolean"},"responses":{"description":"Value for responses.","items":{"properties":{"content_encoding":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for content encoding."},"content_length":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for content length."},"csp":{"description":"Value for csp.","properties":{"directives":{"description":"Value for directives.","items":{"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"sources":{"description":"Value for sources.","items":{"properties":{"kind":{"description":"Value for kind.","enum":["keyword","scheme","approved_origin","external_origin","other"],"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for value."}},"required":["kind","value"],"type":"object"},"type":"array"}},"required":["name","sources"],"type":"object"},"type":"array"},"hash_count":{"description":"Value for hash count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"nonce_count":{"description":"Value for nonce count.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["directives","nonce_count","hash_count"],"type":"object"},"links":{"description":"Value for links.","items":{"properties":{"as":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for as."},"crossorigin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for crossorigin."},"destination_scope":{"description":"Value for destination scope.","enum":["approved","outside_policy","unsupported"],"type":"string"},"href":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for href."},"rel":{"description":"Value for rel.","items":{"type":"string"},"type":"array"},"type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for type."}},"required":["href","destination_scope","rel","as","type","crossorigin"],"type":"object"},"type":"array"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"policies":{"description":"Value for policies.","properties":{"coep":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coep."},"coop":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for coop."},"corp":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for corp."},"permissions_policy_features":{"description":"Value for permissions policy features.","items":{"type":"string"},"type":"array"},"referrer_policy":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for referrer policy."},"x_content_type_options":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for x content type options."}},"required":["coop","coep","corp","referrer_policy","x_content_type_options","permissions_policy_features"],"type":"object"},"request_id":{"description":"Value for request id.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","mime_type","content_length","content_encoding","csp","links","policies"],"type":"object"},"type":"array"}},"required":["responses","dom_urls","agent_hints","excluded_dom_urls","headers_allowlisted"],"type":"object"},"network":{"description":"Value for network.","properties":{"coverage_started_at":{"description":"Value for coverage started at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"prior_activity_available":{"const":false,"description":"Value for prior activity available.","type":"boolean"},"requests":{"description":"Value for requests.","items":{"properties":{"body_shapes":{"description":"Value for body shapes.","properties":{"request":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for request."},"response":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable","truncated"],"type":"string"}},"required":["status","request","response"],"type":"object"},"encoded_data_length":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for encoded data length."},"initiator":{"description":"Value for initiator.","properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"type":{"description":"Value for type.","type":"string"},"url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for url."}},"required":["type","url","line","column"],"type":"object"},"method":{"description":"Value for method.","type":"string"},"mime_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for mime type."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"request_id":{"description":"Value for request id.","type":"string"},"resource_type":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for resource type."},"status":{"anyOf":[{"type":"number"},{"type":"null"}],"description":"Current lifecycle or verification status."},"url":{"description":"Value for url.","type":"string"}},"required":["request_id","url","origin","method","resource_type","status","mime_type","encoded_data_length","initiator","body_shapes"],"type":"object"},"type":"array"},"websocket_events":{"description":"Value for websocket events.","items":{"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["sent","received"],"type":"string"},"opcode":{"description":"Value for opcode.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_shape":{"anyOf":[{"properties":{"format":{"description":"Declared input artifact format.","enum":["json","text","binary"],"type":"string"},"json_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for json shape."},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["format","json_shape","truncated"],"type":"object"},{"type":"null"}],"description":"Value for payload shape."},"request_id":{"description":"Value for request id.","type":"string"}},"required":["request_id","direction","opcode","payload_bytes","payload_shape"],"type":"object"},"type":"array"}},"required":["requests","websocket_events","coverage_started_at","prior_activity_available"],"type":"object"},"resources":{"description":"Value for resources.","items":{"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Value for content size."},"mime_type":{"description":"Value for mime type.","type":"string"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_key":{"description":"Value for resource key.","pattern":"^res_[a-f0-9]{64}$","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["resource_key","url","origin","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"scripts":{"description":"Value for scripts.","properties":{"items":{"description":"Value for items.","items":{"properties":{"cdp_hash":{"description":"Value for cdp hash.","type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for frame id."},"is_module":{"description":"Whether is module.","type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for language."},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"resource_reconciliation":{"description":"Value for resource reconciliation.","oneOf":[{"properties":{"resource_key":{"description":"Value for resource key.","type":"string"},"status":{"const":"exact","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","resource_key"],"type":"object"},{"properties":{"candidate_resource_keys":{"description":"Value for candidate resource keys.","items":{"type":"string"},"type":"array"},"status":{"const":"ambiguous","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","candidate_resource_keys"],"type":"object"},{"properties":{"reason":{"const":"no_exact_sanitized_url","description":"Value for reason.","type":"string"},"status":{"const":"unmatched","description":"Current lifecycle or verification status.","type":"string"}},"required":["status","reason"],"type":"object"}]},"script_key":{"description":"Value for script key.","pattern":"^scr_[a-f0-9]{64}(?:_[0-9]+)?$","type":"string"},"source":{"description":"Value for source.","oneOf":[{"properties":{"included":{"const":false,"description":"Value for included.","type":"boolean"},"reason":{"description":"Value for reason.","type":"string"}},"required":["included","reason"],"type":"object"},{"properties":{"artifact":{"description":"Value for artifact.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","description":"Value for charset.","type":"string"},"media_type":{"description":"Value for media type.","maxLength":256,"minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"description":"Value for included.","type":"boolean"}},"required":["included","artifact"],"type":"object"}]},"source_map_url":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for source map url."},"url":{"description":"Value for url.","type":"string"}},"required":["script_key","url","origin","cdp_hash","length","is_module","language","source_map_url","resource_reconciliation","source"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"storage":{"description":"Value for storage.","properties":{"cache_names":{"description":"Value for cache names.","items":{"type":"string"},"type":"array"},"content_fingerprints":{"default":[],"description":"Value for content fingerprints.","items":{"properties":{"complete":{"description":"Value for complete.","type":"boolean"},"identity_sha256":{"description":"Exact SHA-256 digest of identity.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"description":"Value for scope.","enum":["cookie","local_storage","session_storage","indexed_db_schema","indexed_db_record","cache_entry"],"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."}},"required":["scope","identity_sha256","value_sha256","complete"],"type":"object"},"type":"array"},"fingerprint_algorithm":{"const":"sha256","default":"sha256","description":"Value for fingerprint algorithm.","type":"string"},"fingerprints_complete":{"default":false,"description":"Value for fingerprints complete.","type":"boolean"},"indexed_db_names":{"description":"Value for indexed db names.","items":{"type":"string"},"type":"array"},"local_storage_keys":{"description":"Value for local storage keys.","items":{"type":"string"},"type":"array"},"origin":{"description":"Value for origin.","type":"string"},"quota_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for quota."},"session_storage_keys":{"description":"Value for session storage keys.","items":{"type":"string"},"type":"array"},"usage_bytes":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"description":"Bounded byte count for usage."},"values_redacted":{"const":true,"description":"Value for values redacted.","type":"boolean"}},"required":["origin","usage_bytes","quota_bytes","local_storage_keys","session_storage_keys","indexed_db_names","cache_names","values_redacted"],"type":"object"},"target":{"description":"Value for target.","properties":{"attached":{"description":"Value for attached.","type":"boolean"},"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"title":{"description":"Value for title.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","title","url","origin","attached"],"type":"object"},"workers":{"description":"Value for workers.","items":{"properties":{"attached":{"description":"Value for attached.","type":"boolean"},"opener_target_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for opener target id."},"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for parent frame id."},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"type":{"description":"Value for type.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","type","url","origin","attached"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"},"webmcp":{"anyOf":[{"properties":{"browser":{"description":"Value for browser.","properties":{"js_version":{"description":"Value for js version.","type":"string"},"product":{"description":"Value for product.","type":"string"},"protocol_version":{"description":"Value for protocol version.","type":"string"},"revision":{"description":"Value for revision.","type":"string"},"user_agent":{"description":"Value for user agent.","type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"completeness":{"description":"Value for completeness.","properties":{"attach_limited_sections":{"description":"Value for attach limited sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"description":"Value for conditions.","items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"description":"Value for dropped events.","properties":{"console_events":{"description":"Value for console events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"description":"Value for network requests.","maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"description":"Value for scripts.","maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"description":"Value for timeline events.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"description":"Value for webmcp tools.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"description":"Value for websocket connections.","maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"description":"Value for websocket frames.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"description":"Value for excluded.","items":{"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for count."},"reason":{"description":"Value for reason.","enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"description":"Value for section.","enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"description":"Value for policy filtered sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"description":"Value for unavailable sections.","items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["available","unavailable"],"type":"string"},"target":{"description":"Value for target.","properties":{"origin":{"description":"Value for origin.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","type":"string"},"url":{"description":"Value for url.","type":"string"}},"required":["target_id","url","origin"],"type":"object"},"tools":{"description":"Value for tools.","properties":{"items":{"description":"Value for items.","items":{"properties":{"annotations":{"description":"Value for annotations.","properties":{"autosubmit":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for autosubmit."},"read_only":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for read only."},"untrusted_content":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for untrusted content."}},"required":["read_only","untrusted_content","autosubmit"],"type":"object"},"declaration_kind":{"description":"Value for declaration kind.","enum":["declarative","imperative"],"type":"string"},"description":{"description":"Value for description.","type":"string"},"frame_id":{"description":"Value for frame id.","type":"string"},"frame_url":{"description":"Value for frame url.","type":"string"},"input_schema_shape":{"anyOf":[{"properties":{"max_depth_observed":{"description":"Maximum permitted depth observed for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"node_count":{"description":"Value for node count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"properties":{"description":"Value for properties.","items":{"properties":{"observations":{"description":"Value for observations.","maximum":9007199254740991,"minimum":1,"type":"integer"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"types":{"description":"Value for types.","items":{"enum":["object","array","string","number","boolean","null"],"type":"string"},"minItems":1,"type":"array"}},"required":["path","types","observations"],"type":"object"},"type":"array"},"root_type":{"description":"Value for root type.","enum":["object","array","string","number","boolean","null"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["root_type","node_count","max_depth_observed","properties","truncated"],"type":"object"},{"type":"null"}],"description":"Value for input schema shape."},"name":{"description":"Exact name used by this operation.","type":"string"},"owner_origin":{"description":"Value for owner origin.","type":"string"},"registration_source":{"anyOf":[{"properties":{"column":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for column."},"line":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for line."},"url":{"description":"Value for url.","type":"string"}},"required":["url","line","column"],"type":"object"},{"type":"null"}],"description":"Value for registration source."},"tool_key":{"description":"Value for tool key.","pattern":"^webmcp_[a-f0-9]{64}$","type":"string"},"trust":{"const":"page-declared-untrusted","description":"Value for trust.","type":"string"}},"required":["tool_key","name","description","frame_id","frame_url","owner_origin","declaration_kind","input_schema_shape","annotations","registration_source","trust"],"type":"object"},"type":"array"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"}},"required":["schema_version","browser","target","status","tools","completeness","limitations"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for webmcp."}},"required":["inspection"],"type":"object"},"max_changes":{"default":2000,"description":"Maximum normalized change records to retain.","maximum":20000,"minimum":1,"type":"integer"}},"required":["before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after_scenario":{"additionalProperties":false,"description":"Later browser scenario capture.","properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"cleanup":{"description":"Value for cleanup.","enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["launch","connect"],"type":"string"},"process_ownership":{"description":"Value for process ownership.","enum":["provider-owned","external"],"type":"string"},"product":{"description":"Value for product.","maxLength":1024,"minLength":1,"type":"string"},"version":{"description":"Value for version.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"equality_eligible":{"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"duration_ms":{"description":"Value for duration ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"events":{"additionalProperties":false,"description":"Value for events.","properties":{"dropped":{"description":"Value for dropped.","maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"description":"Value for items.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","description":"Value for kind.","type":"string"},"level":{"description":"Value for level.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","maxLength":65536,"type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","description":"Value for kind.","type":"string"},"message":{"description":"Value for message.","maxLength":65536,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}],"description":"Value for stack."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Value for failure."},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"description":"Value for kind.","enum":["request","response","request-failed"],"type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"anyOf":[{"maximum":599,"minimum":100,"type":"integer"},{"type":"null"}],"description":"Current lifecycle or verification status."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","method","url","resource_type","status","header_names","failure"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-opened","websocket-closed"],"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"anyOf":[{"maxLength":65536,"type":"string"},{"type":"null"}],"description":"Value for payload text."},"payload_type":{"description":"Value for payload type.","enum":["text","binary"],"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"description":"Value for truncated.","type":"boolean"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_type","payload_bytes","payload_text","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["frame-attached","frame-detached","frame-navigated","worker-created","worker-closed","popup-opened","popup-closed"],"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","description":"Value for kind.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"description":"Value for suggested filename.","maxLength":1024,"type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"description":"Value for start origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"steps":{"description":"Value for steps.","items":{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"equality_eligible":{"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"elapsed_ms":{"description":"Value for elapsed ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}],"description":"Structured, caller-actionable error when the operation fails."},"event_sequence_end":{"description":"Value for event sequence end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"description":"Value for event sequence start.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["completed","failed","cancelled"],"type":"string"},"step_id":{"description":"Value for step id.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","status","elapsed_ms","before_url","after_url","error","event_sequence_start","event_sequence_end","artifacts","completeness"],"type":"object"},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"before_scenario":{"additionalProperties":false,"description":"Earlier browser scenario capture.","properties":{"browser":{"additionalProperties":false,"description":"Value for browser.","properties":{"cleanup":{"description":"Value for cleanup.","enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"description":"Operation mode that selects the requested behavior.","enum":["launch","connect"],"type":"string"},"process_ownership":{"description":"Value for process ownership.","enum":["provider-owned","external"],"type":"string"},"product":{"description":"Value for product.","maxLength":1024,"minLength":1,"type":"string"},"version":{"description":"Value for version.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"equality_eligible":{"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"duration_ms":{"description":"Value for duration ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"events":{"additionalProperties":false,"description":"Value for events.","properties":{"dropped":{"description":"Value for dropped.","maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"description":"Value for items.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","description":"Value for kind.","type":"string"},"level":{"description":"Value for level.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"description":"Value for text.","maxLength":65536,"type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","description":"Value for kind.","type":"string"},"message":{"description":"Value for message.","maxLength":65536,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}],"description":"Value for stack."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Value for failure."},"header_names":{"description":"Value for header names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"description":"Value for kind.","enum":["request","response","request-failed"],"type":"string"},"method":{"description":"Value for method.","maxLength":32,"minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","maxLength":64,"minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"anyOf":[{"maximum":599,"minimum":100,"type":"integer"},{"type":"null"}],"description":"Current lifecycle or verification status."},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","method","url","resource_type","status","header_names","failure"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-opened","websocket-closed"],"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Bounded byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"anyOf":[{"maxLength":65536,"type":"string"},{"type":"null"}],"description":"Value for payload text."},"payload_type":{"description":"Value for payload type.","enum":["text","binary"],"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"description":"Value for truncated.","type":"boolean"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_type","payload_bytes","payload_text","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["frame-attached","frame-detached","frame-navigated","worker-created","worker-closed","popup-opened","popup-closed"],"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}],"description":"Exact name used by this operation."},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}],"description":"Value for url."}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","description":"Value for kind.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"description":"Value for suggested filename.","maxLength":1024,"type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"description":"Value for limitations.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"description":"Value for start origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"steps":{"description":"Value for steps.","items":{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","maxLength":64,"minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"description":"Value for artifacts.","properties":{"accessibility":{"description":"Value for accessibility.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"description":"Value for dom.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"description":"Value for history.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"current_url":{"description":"Value for current url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"description":"Value for length.","maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"description":"Value for navigation entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"description":"Value for type.","enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"description":"Value for screenshot.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"description":"Value for storage.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"additionalProperties":false,"description":"Value for value.","properties":{"cookies":{"description":"Value for cookies.","items":{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","maxLength":2048,"type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of value."},"value_state":{"description":"Value for value state.","enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"description":"Value for url.","oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","description":"Value for state.","type":"string"},"value":{"description":"Value for value.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","description":"Value for state.","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","description":"Value for state.","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"description":"Value for observed.","maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"},"retained":{"description":"Value for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","description":"Value for state.","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"description":"Value for before url.","properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"additionalProperties":false,"description":"Value for completeness.","properties":{"equality_eligible":{"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"elapsed_ms":{"description":"Value for elapsed ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}],"description":"Structured, caller-actionable error when the operation fails."},"event_sequence_end":{"description":"Value for event sequence end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"description":"Value for event sequence start.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["completed","failed","cancelled"],"type":"string"},"step_id":{"description":"Value for step id.","maxLength":64,"minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","status","elapsed_ms","before_url","after_url","error","event_sequence_start","event_sequence_end","artifacts","completeness"],"type":"object"},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"max_changes":{"default":2000,"description":"Maximum normalized change records to retain.","maximum":20000,"minimum":1,"type":"integer"},"normalization":{"additionalProperties":false,"default":{"rules":[]},"description":"Exact-literal normalization policy.","properties":{"rules":{"default":[],"description":"Value for rules.","items":{"additionalProperties":false,"properties":{"artifacts":{"description":"Artifact families whose durable string fields use this rule.","items":{"enum":["action_state","dom","accessibility","url","history","storage","events"],"type":"string"},"maxItems":7,"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","maxLength":4096,"minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","maxLength":4096,"type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","maxLength":64,"minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"maxItems":128,"type":"array"}},"type":"object"}},"required":["before_scenario","after_scenario"],"type":"object"}],"examples":[{"after_scenario":{"browser":{"cleanup":"disconnected-external","mode":"connect","process_ownership":"external","product":"Chromium","version":"149"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"duration_ms":10,"events":{"dropped":0,"items":[],"retained":0},"limitations":[],"scenario":{"action_count":1,"allowed_origins":["https://app.example.test"],"secret_references":[],"start_origin":"https://app.example.test"},"schema_version":1,"steps":[{"action":"scenario_start","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":0,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"scenario_start","step_index":0},{"action":"click","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":10,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"open-settings","step_index":1}]},"before_scenario":{"browser":{"cleanup":"disconnected-external","mode":"connect","process_ownership":"external","product":"Chromium","version":"149"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"duration_ms":10,"events":{"dropped":0,"items":[],"retained":0},"limitations":[],"scenario":{"action_count":1,"allowed_origins":["https://app.example.test"],"secret_references":[],"start_origin":"https://app.example.test"},"schema_version":1,"steps":[{"action":"scenario_start","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":0,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"scenario_start","step_index":0},{"action":"click","after_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"artifacts":{"accessibility":{"state":"not_requested"},"dom":{"state":"not_requested"},"history":{"state":"not_requested"},"screenshot":{"state":"not_requested"},"storage":{"state":"not_requested"},"url":{"state":"not_requested"}},"before_url":{"origin":"https://app.example.test","query_parameter_names":[],"redacted":false,"url":"https://app.example.test/"},"completeness":{"equality_eligible":true,"missing_sections":[],"status":"complete","truncated_sections":[]},"elapsed_ms":10,"error":null,"event_sequence_end":0,"event_sequence_start":1,"status":"completed","step_id":"open-settings","step_index":1}]},"max_changes":2000,"normalization":{"rules":[{"artifacts":["dom","accessibility"],"match":"build-123","replacement":"[BUILD_ID]","rule_id":"volatile-build-id"}]}}],"type":"object"},"kind":"browser-provider","name":"compare_web_captures","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"after_only":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":129,"type":"array"},"aligned_steps":{"maximum":129,"minimum":0,"type":"integer"},"before_only":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":129,"type":"array"},"failures":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate_before_step_id","duplicate_after_step_id","missing_before_step","missing_after_step","action_mismatch","capture_context_mismatch"],"type":"string"},"reason":{"maxLength":2048,"minLength":1,"type":"string"},"step_id":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["code","step_id","reason"],"type":"object"},"maxItems":520,"type":"array"},"status":{"enum":["aligned","partial","failed"],"type":"string"}},"required":["status","aligned_steps","before_only","after_only","failures"],"type":"object"},"artifact_diffs":{"additionalProperties":false,"properties":{"omitted":{"maximum":1032,"minimum":0,"type":"integer"},"retained":{"maximum":1032,"minimum":0,"type":"integer"},"total":{"maximum":1032,"minimum":0,"type":"integer"}},"required":["total","retained","omitted"],"type":"object"},"comparison_kind":{"const":"browser_scenario","type":"string"},"limitations":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"normalization":{"additionalProperties":false,"properties":{"built_in_rules":{"items":{"enum":["ignore_step_elapsed_ms","ignore_event_sequence","ignore_event_step_index","compare_screenshot_content_digest","compare_normalized_text_content"],"type":"string"},"maxItems":5,"minItems":5,"type":"array"},"rules":{"items":{"additionalProperties":false,"properties":{"artifacts":{"description":"Artifact families whose durable string fields use this rule.","items":{"enum":["action_state","dom","accessibility","url","history","storage","events"],"type":"string"},"maxItems":7,"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","maxLength":4096,"minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","maxLength":4096,"type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","maxLength":64,"minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"maxItems":128,"type":"array"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["built_in_rules","rules","sha256"],"type":"object"},"overall_status":{"enum":["changed","unchanged","unknown"],"type":"string"},"schema_version":{"const":1,"type":"number"},"steps":{"items":{"additionalProperties":false,"properties":{"after_action":{"maxLength":64,"minLength":1,"type":"string"},"after_step_index":{"maximum":128,"minimum":0,"type":"integer"},"artifact_diffs":{"items":{"additionalProperties":false,"properties":{"after_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"after_state":{"enum":["captured","not_requested","missing","truncated"],"type":"string"},"artifact":{"enum":["action_state","screenshot","dom","accessibility","url","history","storage","events"],"type":"string"},"before_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"before_state":{"enum":["captured","not_requested","missing","truncated"],"type":"string"},"reason":{"anyOf":[{"maxLength":2048,"minLength":1,"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unknown"],"type":"string"}},"required":["artifact","status","before_state","after_state","before_sha256","after_sha256","reason"],"type":"object"},"maxItems":8,"type":"array"},"before_action":{"maxLength":64,"minLength":1,"type":"string"},"before_step_index":{"maximum":128,"minimum":0,"type":"integer"},"omitted_artifact_diffs":{"maximum":8,"minimum":0,"type":"integer"},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"step_id":{"maxLength":64,"minLength":1,"type":"string"}},"required":["step_id","before_step_index","after_step_index","before_action","after_action","status","artifact_diffs","omitted_artifact_diffs"],"type":"object"},"maxItems":129,"type":"array"}},"required":["schema_version","comparison_kind","overall_status","normalization","alignment","steps","artifact_diffs","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"after_target":{"additionalProperties":false,"properties":{"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url"],"type":"object"},"before_target":{"additionalProperties":false,"properties":{"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url"],"type":"object"},"dimensions":{"additionalProperties":false,"properties":{"accessibility":{"additionalProperties":false,"default":{"changes":[],"omitted_changes":0,"reason":"Dimension was not recorded by this version 1 capture diff.","status":"unknown","total_changes":0},"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"dom_structure":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"metadata":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"network":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"resources":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"scripts":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"storage":{"additionalProperties":false,"default":{"changes":[],"omitted_changes":0,"reason":"Dimension was not recorded by this version 1 capture diff.","status":"unknown","total_changes":0},"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"},"webmcp":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change":{"enum":["added","removed","modified"],"type":"string"},"identity":{"type":"string"}},"required":["identity","change"],"type":"object"},"type":"array"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","total_changes","changes","omitted_changes","reason"],"type":"object"}},"required":["dom_structure","scripts","resources","network","metadata","webmcp","accessibility","storage"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"overall_status":{"enum":["changed","unchanged","unknown"],"type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","overall_status","before_target","after_target","dimensions","limitations"],"type":"object"}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Web Captures"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Capture the current visible viewport of one approved page as a bounded, content-addressed PNG artifact. Screenshot capture requires separate explicit approval and never scrolls, navigates, or evaluates page JavaScript.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_origins":["https://app.example.test"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9222","maximum_image_bytes":4194304,"screenshot_approved":true,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"maximum_image_bytes":{"default":4194304,"description":"Bounded byte count for maximum image.","maximum":8388608,"minimum":1,"type":"integer"},"screenshot_approved":{"const":true,"description":"Explicit operator approval for screenshot.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_origins","target_id","approved","screenshot_approved"],"type":"object"},"kind":"browser-provider","name":"capture_web_screenshot","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"captured_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"target":{"additionalProperties":false,"properties":{"origin":{"type":"string"},"target_id":{"type":"string"},"url":{"type":"string"}},"required":["target_id","url","origin"],"type":"object"},"viewport":{"additionalProperties":false,"properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["width","height"],"type":"object"}},"required":["schema_version","browser","target","captured_at","viewport","artifact","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Web Screenshot"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Compare two self-verifying PNG screenshot artifacts with bounded local pixel metrics. Returns exact changed-pixel ratios and channel deltas without OCR or external services.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"after":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c","uri":"rea://web-screenshot/sha256/153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"before":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c","uri":"rea://web-screenshot/sha256/153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"channel_threshold":0,"maximum_pixels":16000000}],"properties":{"after":{"description":"The later or right-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"before":{"description":"The earlier or left-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","description":"Value for media type.","type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"description":"Value for uri.","pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"},"channel_threshold":{"default":0,"description":"Value for channel threshold.","maximum":255,"minimum":0,"type":"integer"},"maximum_pixels":{"default":16000000,"description":"Value for maximum pixels.","maximum":32000000,"minimum":1,"type":"integer"}},"required":["before","after"],"type":"object"},"kind":"browser-provider","name":"compare_web_screenshots","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"after":{"additionalProperties":false,"properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["width","height"],"type":"object"},"before":{"additionalProperties":false,"properties":{"height":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"width":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["width","height"],"type":"object"},"changed_pixels":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"changed_ratio":{"anyOf":[{"maximum":1,"minimum":0,"type":"number"},{"type":"null"}]},"channel_threshold":{"maximum":255,"minimum":0,"type":"integer"},"compared_pixels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"maximum_channel_delta":{"anyOf":[{"maximum":255,"minimum":0,"type":"integer"},{"type":"null"}]},"mean_absolute_channel_delta":{"anyOf":[{"maximum":255,"minimum":0,"type":"number"},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"status":{"enum":["identical","different","dimension_mismatch"],"type":"string"}},"required":["schema_version","status","before","after","channel_threshold","compared_pixels","changed_pixels","changed_ratio","maximum_channel_delta","mean_absolute_channel_delta","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Web Screenshots"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run one approved, bounded browser scenario through Playwright. Launch mode owns and terminates a temporary browser profile; connect mode attaches to one exact loopback CDP target and disconnects without terminating the external browser. Only the fixed action vocabulary is accepted. Navigation, storage, requests, redirects, secrets, redaction, captures, and limits must be declared before execution. Returns step-indexed Evidence with screenshots, DOM, accessibility, URL/history/storage state, runtime events, explicit missing/truncated sections, and equality eligibility.","effects":{"accessesNetwork":true,"changesUiState":true,"idempotent":false,"launchesProcess":true,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"actions":[{"action":"wait_for","locator":{"kind":"test_id","value":"application-ready"},"state":"visible","step_id":"ready"}],"allowed_origins":["https://app.example.test"],"approved":true,"browser":{"cleanup":"close-and-delete-profile","executable_path":"/opt/chromium/chrome","headless":true,"mode":"launch","user_data":"temporary-owned"},"capture":{"after_each_step":["screenshot","url","accessibility"],"at_end":["dom","history","storage"],"events":["console","page-errors","network","websockets"]},"environment":{"color_scheme":"light","locale":"en-US","reduced_motion":"reduce","service_workers":"block","timezone":"UTC","viewport":{"device_scale_factor":1,"height":720,"width":1280}},"limits":{"action_timeout_ms":5000,"max_accessibility_nodes":10000,"max_dom_nodes":10000,"max_duration_ms":60000,"max_events":2000,"max_frames":100,"max_popups":10,"max_screenshot_bytes":4194304,"max_screenshots":16,"max_storage_entries":256,"max_total_metadata_bytes":4194304,"max_websockets":100,"max_workers":20,"navigation_timeout_ms":10000},"redaction":{"header_names":["authorization","cookie","proxy-authorization","set-cookie"],"query_parameter_names":[],"secret_values":"replace-with-secret-reference"},"request_replay":{"mode":"disabled"},"schema_version":1,"secrets":[],"start_url":{"query":[],"url":"https://app.example.test/"},"storage":{"cookies":[],"local_storage":[],"session_storage":[]}}],"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"action":{"const":"goto","description":"Value for action.","type":"string"},"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"wait_until":{"description":"Value for wait until.","enum":["commit","domcontentloaded","load"],"type":"string"}},"required":["step_id","action","destination","wait_until"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"click","description":"Value for action.","type":"string"},"button":{"default":"left","description":"Value for button.","enum":["left","middle","right"],"type":"string"},"click_count":{"default":1,"description":"Value for click count.","maximum":3,"minimum":1,"type":"integer"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"fill","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["step_id","action","locator","value"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"press","description":"Value for action.","type":"string"},"key":{"description":"Value for key.","maxLength":64,"minLength":1,"type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator","key"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"select_option","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["step_id","action","locator","value"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","enum":["check","uncheck"],"type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"wait_for","description":"Value for action.","type":"string"},"locator":{"description":"Value for locator.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"test_id","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":512,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"exact":{"const":true,"description":"Value for exact.","type":"boolean"},"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"role":{"description":"Value for role.","enum":["button","checkbox","combobox","dialog","link","listbox","menuitem","option","radio","slider","spinbutton","switch","tab","textbox"],"type":"string"}},"required":["kind","role","name","exact"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","selector","approved"],"type":"object"}]},"state":{"description":"Value for state.","enum":["attached","detached","visible","hidden"],"type":"string"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"timeout_ms":{"description":"Value for timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["step_id","action","locator","state"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"const":"wait_for_timeout","description":"Value for action.","type":"string"},"duration_ms":{"description":"Value for duration ms.","maximum":60000,"minimum":1,"type":"integer"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["step_id","action","duration_ms"],"type":"object"}]},"maxItems":128,"minItems":1,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"browser":{"description":"Value for browser.","oneOf":[{"additionalProperties":false,"properties":{"cleanup":{"const":"close-and-delete-profile","description":"Value for cleanup.","type":"string"},"executable_path":{"description":"Local filesystem path for executable.","maxLength":4096,"minLength":1,"type":"string"},"headless":{"const":true,"description":"Value for headless.","type":"boolean"},"mode":{"const":"launch","description":"Operation mode that selects the requested behavior.","type":"string"},"user_data":{"const":"temporary-owned","description":"Value for user data.","type":"string"}},"required":["mode","executable_path","headless","user_data","cleanup"],"type":"object"},{"additionalProperties":false,"properties":{"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"cleanup":{"const":"disconnect-only","description":"Value for cleanup.","type":"string"},"mode":{"const":"connect","description":"Operation mode that selects the requested behavior.","type":"string"},"ownership":{"const":"external","description":"Value for ownership.","type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["mode","cdp_endpoint","target_id","ownership","cleanup"],"type":"object"}]},"capture":{"additionalProperties":false,"description":"Value for capture.","properties":{"after_each_step":{"description":"Value for after each step.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"maxItems":6,"type":"array"},"at_end":{"description":"Value for at end.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"maxItems":6,"type":"array"},"events":{"description":"Value for events.","items":{"enum":["console","page-errors","network","websockets","frames","workers","popups","downloads"],"type":"string"},"type":"array"}},"required":["after_each_step","at_end","events"],"type":"object"},"environment":{"additionalProperties":false,"description":"Value for environment.","properties":{"color_scheme":{"description":"Value for color scheme.","enum":["light","dark","no-preference"],"type":"string"},"locale":{"description":"Value for locale.","maxLength":64,"minLength":2,"pattern":"^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$","type":"string"},"reduced_motion":{"description":"Value for reduced motion.","enum":["reduce","no-preference"],"type":"string"},"service_workers":{"const":"block","description":"Value for service workers.","type":"string"},"timezone":{"description":"Value for timezone.","maxLength":128,"minLength":1,"pattern":"^[A-Za-z0-9_+-]+(?:\\\\/[A-Za-z0-9_+-]+)*$","type":"string"},"viewport":{"additionalProperties":false,"description":"Value for viewport.","properties":{"device_scale_factor":{"default":1,"description":"Value for device scale factor.","maximum":4,"minimum":0.5,"type":"number"},"height":{"description":"Value for height.","maximum":4320,"minimum":240,"type":"integer"},"width":{"description":"Value for width.","maximum":7680,"minimum":320,"type":"integer"}},"required":["width","height"],"type":"object"}},"required":["viewport","locale","timezone","color_scheme","reduced_motion","service_workers"],"type":"object"},"limits":{"additionalProperties":false,"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"action_timeout_ms":{"description":"Value for action timeout ms.","maximum":60000,"minimum":1,"type":"integer"},"max_accessibility_nodes":{"description":"Maximum permitted accessibility nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_dom_nodes":{"description":"Maximum permitted dom nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_duration_ms":{"description":"Maximum permitted duration ms for this operation.","maximum":300000,"minimum":100,"type":"integer"},"max_events":{"description":"Maximum permitted events for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_frames":{"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_popups":{"description":"Maximum permitted popups for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_screenshot_bytes":{"description":"Maximum permitted screenshot bytes for this operation.","maximum":8388608,"minimum":1,"type":"integer"},"max_screenshots":{"description":"Maximum permitted screenshots for this operation.","maximum":256,"minimum":0,"type":"integer"},"max_storage_entries":{"description":"Maximum permitted storage entries for this operation.","maximum":512,"minimum":0,"type":"integer"},"max_total_metadata_bytes":{"description":"Maximum permitted total metadata bytes for this operation.","maximum":67108864,"minimum":1024,"type":"integer"},"max_websockets":{"description":"Maximum permitted websockets for this operation.","maximum":10000,"minimum":0,"type":"integer"},"max_workers":{"description":"Maximum permitted workers for this operation.","maximum":1000,"minimum":0,"type":"integer"},"navigation_timeout_ms":{"description":"Value for navigation timeout ms.","maximum":60000,"minimum":1,"type":"integer"}},"required":["max_duration_ms","action_timeout_ms","navigation_timeout_ms","max_events","max_frames","max_workers","max_popups","max_websockets","max_dom_nodes","max_accessibility_nodes","max_screenshots","max_screenshot_bytes","max_storage_entries","max_total_metadata_bytes"],"type":"object"},"redaction":{"additionalProperties":false,"description":"Value for redaction.","properties":{"header_names":{"description":"Value for header names.","items":{"maxLength":256,"minLength":1,"type":"string"},"maxItems":128,"type":"array"},"query_parameter_names":{"description":"Value for query parameter names.","items":{"maxLength":256,"minLength":1,"type":"string"},"maxItems":128,"type":"array"},"secret_values":{"const":"replace-with-secret-reference","description":"Value for secret values.","type":"string"}},"required":["secret_values"],"type":"object"},"request_replay":{"description":"Value for request replay.","oneOf":[{"additionalProperties":false,"properties":{"mode":{"const":"disabled","description":"Operation mode that selects the requested behavior.","type":"string"}},"required":["mode"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"const":"exact","description":"Operation mode that selects the requested behavior.","type":"string"},"routes":{"description":"Value for routes.","items":{"additionalProperties":false,"properties":{"method":{"description":"Value for method.","enum":["GET","HEAD","POST","PUT","PATCH","DELETE","OPTIONS"],"type":"string"},"request":{"additionalProperties":false,"description":"Value for request.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"response":{"description":"Value for response.","oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]},"headers":{"description":"Value for headers.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+\\\\-.^_`|~0-9A-Za-z]+$","type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"}},"required":["kind","status"],"type":"object"},{"additionalProperties":false,"properties":{"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"kind":{"const":"redirect","description":"Value for kind.","type":"string"},"status":{"anyOf":[{"const":301,"type":"number"},{"const":302,"type":"number"},{"const":303,"type":"number"},{"const":307,"type":"number"},{"const":308,"type":"number"}],"description":"Current lifecycle or verification status."}},"required":["kind","status","destination"],"type":"object"}]},"route_id":{"description":"Value for route id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["route_id","method","request","response"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"unmatched":{"description":"Value for unmatched.","enum":["abort","passthrough-approved-origins"],"type":"string"}},"required":["mode","unmatched","routes"],"type":"object"}]},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"secrets":{"default":[],"description":"Value for secrets.","items":{"additionalProperties":false,"properties":{"environment_variable":{"description":"Value for environment variable.","pattern":"^[A-Z_][A-Z0-9_]{0,127}$","type":"string"},"purpose":{"description":"Value for purpose.","enum":["input","storage","request-replay"],"type":"string"},"redaction":{"const":"replace-with-secret-reference","description":"Value for redaction.","type":"string"},"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["secret_id","environment_variable","purpose","redaction"],"type":"object"},"maxItems":64,"type":"array"},"start_url":{"additionalProperties":false,"description":"Value for start url.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"storage":{"additionalProperties":false,"description":"Value for storage.","properties":{"cookies":{"description":"Value for cookies.","items":{"additionalProperties":false,"properties":{"destination":{"additionalProperties":false,"description":"Value for destination.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":256,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":64,"type":"array"},"url":{"description":"Value for url.","maxLength":65536,"minLength":1,"type":"string"}},"required":["url"],"type":"object"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value","destination","http_only","secure","same_site"],"type":"object"},"maxItems":128,"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"additionalProperties":false,"properties":{"entries":{"description":"Value for entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":128,"type":"array"},"origin":{"description":"Value for origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"maxItems":32,"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"additionalProperties":false,"properties":{"entries":{"description":"Value for entries.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","maxLength":1024,"minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"classification":{"const":"public","description":"Value for classification.","type":"string"},"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","maxLength":65536,"type":"string"}},"required":["source","value","classification"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"maxItems":128,"type":"array"},"origin":{"description":"Value for origin.","maxLength":2048,"minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"maxItems":32,"type":"array"}},"type":"object"}},"required":["schema_version","browser","start_url","allowed_origins","environment","actions","storage","request_replay","redaction","capture","limits","approved"],"type":"object"},"kind":"browser-provider","name":"capture_browser_scenario","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"cleanup":{"enum":["terminated-owned-process","disconnected-external"],"type":"string"},"mode":{"enum":["launch","connect"],"type":"string"},"process_ownership":{"enum":["provider-owned","external"],"type":"string"},"product":{"maxLength":1024,"minLength":1,"type":"string"},"version":{"maxLength":256,"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"equality_eligible":{"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"duration_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"events":{"additionalProperties":false,"properties":{"dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"items":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","type":"string"},"level":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"maxLength":65536,"type":"string"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}]}},"required":["sequence","step_index","kind","level","text","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"page-error","type":"string"},"message":{"maxLength":65536,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"maxLength":262144,"type":"string"},{"type":"null"}]},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","step_index","kind","message","stack"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"header_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"kind":{"enum":["request","response","request-failed"],"type":"string"},"method":{"maxLength":32,"minLength":1,"type":"string"},"resource_type":{"maxLength":64,"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"anyOf":[{"maximum":599,"minimum":100,"type":"integer"},{"type":"null"}]},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","method","url","resource_type","status","header_names","failure"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"enum":["websocket-opened","websocket-closed"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"anyOf":[{"maxLength":65536,"type":"string"},{"type":"null"}]},"payload_type":{"enum":["text","binary"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_type","payload_bytes","payload_text","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"enum":["frame-attached","frame-detached","frame-navigated","worker-created","worker-closed","popup-opened","popup-closed"],"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},{"type":"null"}]}},"required":["sequence","step_index","kind","url","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"download-cancelled","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"suggested_filename":{"maxLength":1024,"type":"string"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"maxItems":100000,"type":"array"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"scenario":{"additionalProperties":false,"properties":{"action_count":{"maximum":128,"minimum":1,"type":"integer"},"allowed_origins":{"items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"secret_references":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":64,"type":"array"},"start_origin":{"maxLength":2048,"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"schema_version":{"const":1,"type":"number"},"steps":{"items":{"additionalProperties":false,"properties":{"action":{"maxLength":64,"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"artifacts":{"additionalProperties":false,"properties":{"accessibility":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"dom":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":16777216,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"maxLength":1048576,"type":"string"}},"required":["sha256","bytes","text"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"history":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"current_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"navigation_entries":{"items":{"additionalProperties":false,"properties":{"name":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"type":{"enum":["navigate","reload","back_forward","prerender","unknown"],"type":"string"}},"required":["type","name"],"type":"object"},"maxItems":256,"type":"array"}},"required":["length","current_url","navigation_entries"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"screenshot":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"bytes":{"maximum":8388608,"minimum":1,"type":"integer"},"data_base64":{"maxLength":11184815,"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-screenshot\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","data_base64"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"storage":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"cookies":{"items":{"additionalProperties":false,"properties":{"domain":{"maxLength":2048,"type":"string"},"http_only":{"type":"boolean"},"name":{"maxLength":1024,"type":"string"},"path":{"maxLength":4096,"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"value_state":{"enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"local_storage":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"value_state":{"enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"},"session_storage":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":1024,"type":"string"},"value_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"value_state":{"enum":["hashed","redacted-secret"],"type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},"maxItems":512,"type":"array"}},"required":["cookies","local_storage","session_storage"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]},"url":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"captured","type":"string"},"value":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"state":{"const":"not_requested","type":"string"}},"required":["state"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"maxLength":1024,"minLength":1,"type":"string"},"state":{"const":"missing","type":"string"}},"required":["state","reason"],"type":"object"},{"additionalProperties":false,"properties":{"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"maxLength":1024,"minLength":1,"type":"string"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"truncated","type":"string"}},"required":["state","observed","retained","reason"],"type":"object"}]}},"required":["screenshot","dom","accessibility","url","history","storage"],"type":"object"},"before_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"maxLength":256,"type":"string"},"maxItems":256,"type":"array"},"redacted":{"type":"boolean"},"url":{"maxLength":131072,"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"equality_eligible":{"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"enum":["complete","incomplete","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}]},"event_sequence_end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"enum":["completed","failed","cancelled"],"type":"string"},"step_id":{"maxLength":64,"minLength":1,"type":"string"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","status","elapsed_ms","before_url","after_url","error","event_sequence_start","event_sequence_end","artifacts","completeness"],"type":"object"},"maxItems":129,"minItems":1,"type":"array"}},"required":["schema_version","browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Browser Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List Electron file:// page targets from an approved user-owned loopback CDP endpoint. Every path is canonicalized and must remain contained by an approved filesystem root, including after symlink resolution.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"allowed_file_roots":["/Applications/Example.app/Contents/Resources"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9223","limit":100,"offset":0}],"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["cdp_endpoint","allowed_file_roots","approved"],"type":"object"},"kind":"electron-provider","name":"list_electron_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"excluded":{"additionalProperties":false,"properties":{"non_page":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_root":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_root","unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}},"required":["target_id","type","title","file_path","attached"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Electron Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one approved Electron file page through CDP. Returns root-confined frames, DOM structure, resource paths, and scripts without evaluating renderer JavaScript or invoking Electron APIs; script contents require separate approval.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"include_script_sources":{"const":false,"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"limits":{"default":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":500,"description":"Maximum permitted scripts for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":false,"default":false,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_file_roots","approved","target_id"],"type":"object"},{"properties":{"allowed_file_roots":{"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"minItems":1,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cdp_endpoint":{"description":"Approved literal loopback Chrome DevTools Protocol endpoint.","maxLength":2048,"minLength":1,"type":"string"},"include_script_sources":{"const":true,"description":"Whether to include script sources in the result.","type":"boolean"},"limits":{"default":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_dom_nodes":{"default":2000,"description":"Maximum permitted dom nodes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_frames":{"default":200,"description":"Maximum permitted frames for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_resources":{"default":2000,"description":"Maximum permitted resources for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_script_source_bytes":{"default":1048576,"description":"Maximum permitted script source bytes for this operation.","maximum":4194304,"minimum":1,"type":"integer"},"max_scripts":{"default":500,"description":"Maximum permitted scripts for this operation.","maximum":2000,"minimum":1,"type":"integer"},"max_total_script_source_bytes":{"default":4194304,"description":"Maximum permitted total script source bytes for this operation.","maximum":16777216,"minimum":1,"type":"integer"},"max_workers":{"default":500,"description":"Maximum permitted workers for this operation.","maximum":5000,"minimum":1,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"source_capture_approved":{"const":true,"description":"Explicit operator approval for source capture.","type":"boolean"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["cdp_endpoint","allowed_file_roots","approved","target_id","include_script_sources","source_capture_approved"],"type":"object"}],"examples":[{"allowed_file_roots":["/Applications/Example.app/Contents/Resources"],"approved":true,"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":false,"limits":{"max_dom_nodes":2000,"max_frames":200,"max_resources":2000,"max_script_source_bytes":1048576,"max_scripts":500,"max_total_script_source_bytes":4194304,"max_workers":500},"observation_ms":100,"source_capture_approved":false,"target_id":"TARGET_ID_FROM_LIST_ELECTRON_TARGETS"}],"type":"object"},"kind":"electron-provider","name":"inspect_electron_page","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"browser":{"additionalProperties":false,"properties":{"js_version":{"type":"string"},"product":{"type":"string"},"protocol_version":{"type":"string"},"revision":{"type":"string"},"user_agent":{"type":"string"}},"required":["product","protocol_version","revision","user_agent","js_version"],"type":"object"},"capture_window":{"additionalProperties":false,"properties":{"ended_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["started_at","ended_at","observation_ms"],"type":"object"},"completeness":{"additionalProperties":false,"properties":{"attach_limited_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"conditions":{"items":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"maxItems":3,"minItems":1,"type":"array"},"dropped_events":{"additionalProperties":false,"properties":{"console_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"network_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeline_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"webmcp_tools":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"websocket_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["scripts","network_requests","console_events","websocket_connections","websocket_frames","webmcp_tools","timeline_events","total"],"type":"object"},"excluded":{"items":{"additionalProperties":false,"properties":{"count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"reason":{"enum":["disallowed_origin","unsupported_url","unattributed_origin","not_approved","out_of_target_scope","provider_unavailable","invalid_protocol_value"],"type":"string"},"section":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"}},"required":["section","reason","count"],"type":"object"},"type":"array"},"policy_filtered_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"status":{"enum":["complete_within_window","policy_filtered","attach_limited","truncated"],"type":"string"},"truncated_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"},"unavailable_sections":{"items":{"enum":["frames","dom","accessibility","scripts","script_sources","resources","network_requests","network_initiators","console_events","console_text","websocket_connections","websocket_frames","websocket_shapes","json_body_shapes","workers","storage","storage_keys","metadata","webmcp_tools","screenshot","source_maps","timeline"],"type":"string"},"type":"array"}},"required":["status","conditions","policy_filtered_sections","attach_limited_sections","truncated_sections","unavailable_sections","excluded","dropped_events"],"type":"object"},"dom":{"additionalProperties":false,"properties":{"nodes":{"items":{"additionalProperties":false,"properties":{"attribute_names":{"items":{"type":"string"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_name":{"type":"string"},"node_type":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_value_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parent_index":{"maximum":9007199254740991,"minimum":-1,"type":"integer"}},"required":["index","parent_index","node_type","node_name","node_value_length","attribute_names"],"type":"object"},"type":"array"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_nodes","nodes"],"type":"object"},"frames":{"items":{"additionalProperties":false,"properties":{"file_path":{"type":"string"},"frame_id":{"type":"string"},"parent_frame_id":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["frame_id","parent_frame_id","file_path"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"resources":{"items":{"additionalProperties":false,"properties":{"content_size":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}]},"file_path":{"type":"string"},"mime_type":{"type":"string"},"resource_key":{"pattern":"^electron_resource_[a-f0-9]{64}$","type":"string"},"type":{"type":"string"}},"required":["resource_key","file_path","type","mime_type","content_size"],"type":"object"},"type":"array"},"schema_version":{"const":1,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"type":"string"},"file_path":{"type":"string"},"frame_id":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"is_module":{"type":"boolean"},"language":{"anyOf":[{"type":"string"},{"type":"null"}]},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"script_key":{"pattern":"^electron_script_[a-f0-9]{64}$","type":"string"},"source":{"oneOf":[{"additionalProperties":false,"properties":{"included":{"const":false,"type":"boolean"},"reason":{"type":"string"}},"required":["included","reason"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"maxLength":256,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"},"uri":{"pattern":"^rea:\\\\/\\\\/web-content\\\\/sha256\\\\/[a-f0-9]{64}$","type":"string"}},"required":["uri","sha256","bytes","media_type","charset","text"],"type":"object"},"included":{"const":true,"type":"boolean"}},"required":["included","artifact"],"type":"object"}]}},"required":["script_key","frame_id","file_path","cdp_hash","length","is_module","language","source"],"type":"object"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","items"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"target_id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"}},"required":["target_id","type","title","file_path","attached"],"type":"object"},"workers":{"default":[],"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"file_path":{"type":"string"},"opener_target_id":{"anyOf":[{"maxLength":256,"minLength":1,"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"maxLength":256,"minLength":1,"type":"string"},{"type":"null"}]},"target_id":{"maxLength":256,"minLength":1,"type":"string"},"type":{"maxLength":100,"minLength":1,"type":"string"}},"required":["target_id","type","file_path","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["schema_version","browser","target","capture_window","completeness","frames","dom","scripts","resources","workers","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Inspect Electron Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Statically reconstruct one approved local ASAR or extracted JavaScript application without executing it. The default summary returns architecture/security counts, top evidence-backed findings, unknowns, and paged graph resource URIs; request detail=full only when the complete graph must be returned immediately. Identical inputs are deterministic, so do not repeat the call or reread full Evidence without a specific missing detail.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"detail":"summary","format":"auto","input_path":"/Applications/Example.app/Contents/Resources/app.asar","source_map_read_approved":false}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"detail":{"default":"summary","description":"summary returns bounded findings and paged graph resource URIs; full returns the complete graph only when explicitly required","enum":["summary","full"],"type":"string"},"format":{"default":"auto","description":"Declared input artifact format.","enum":["auto","asar","directory"],"type":"string"},"input_path":{"description":"Local filesystem path for input.","maxLength":16384,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_artifact_entry_bytes":134217728,"max_ast_nodes":2000000,"max_compression_ratio":1000,"max_depth":64,"max_entries":8000,"max_findings":8000,"max_modules":20000,"max_parse_milliseconds":30000,"max_path_bytes":4096,"max_source_map_sources":5000,"max_text_file_bytes":8388608,"max_text_files":5000,"max_total_artifact_bytes":536870912,"max_total_text_bytes":134217728},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_artifact_entry_bytes":{"default":134217728,"description":"Maximum permitted artifact entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_ast_nodes":{"default":2000000,"description":"Maximum permitted ast nodes for this operation.","maximum":20000000,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":64,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_entries":{"default":8000,"description":"Maximum permitted entries for this operation.","maximum":1000000,"minimum":1,"type":"integer"},"max_findings":{"default":8000,"description":"Maximum permitted findings for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_modules":{"default":20000,"description":"Maximum permitted modules for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_parse_milliseconds":{"default":30000,"description":"Maximum permitted parse milliseconds for this operation.","maximum":300000,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_source_map_sources":{"default":5000,"description":"Maximum permitted source map sources for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_text_file_bytes":{"default":8388608,"description":"Maximum permitted text file bytes for this operation.","maximum":67108864,"minimum":1,"type":"integer"},"max_text_files":{"default":5000,"description":"Maximum permitted text files for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_total_artifact_bytes":{"default":536870912,"description":"Maximum permitted total artifact bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_total_text_bytes":{"default":134217728,"description":"Maximum permitted total text bytes for this operation.","maximum":536870912,"minimum":1,"type":"integer"}},"type":"object"},"source_map_read_approved":{"default":false,"description":"Explicit operator approval for source map read.","type":"boolean"}},"required":["input_path","approved"],"type":"object"},"kind":"electron-provider","name":"analyze_javascript_application","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"node_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_kinds":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"}},"required":["kind","count"],"type":"object"},"type":"array"},"pages":{"additionalProperties":false,"properties":{"edges":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"nodes":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"page_limit":{"maximum":500,"minimum":1,"type":"integer"}},"required":["nodes","edges","page_limit"],"type":"object"},"roots":{"additionalProperties":false,"properties":{"items":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["items","total","truncated"],"type":"object"},"top_findings":{"items":{"additionalProperties":false,"properties":{"authority":{"type":"string"},"confidence":{"type":"string"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"$ref":"#/$defs/__schema0"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"state":{"type":"string"}},"required":["node_id","kind","label","authority","state","confidence","location"],"type":"object"},"type":"array"}},"required":["graph_id","node_count","edge_count","roots","node_kinds","top_findings","coverage","limitations","pages"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","summary","statistics","limitations","unknowns","graph"],"type":"object"},{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edge_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"node_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"node_kinds":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"}},"required":["kind","count"],"type":"object"},"type":"array"},"pages":{"additionalProperties":false,"properties":{"edges":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"nodes":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/.*","type":"string"},"page_limit":{"maximum":500,"minimum":1,"type":"integer"}},"required":["nodes","edges","page_limit"],"type":"object"},"roots":{"additionalProperties":false,"properties":{"items":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["items","total","truncated"],"type":"object"},"top_findings":{"items":{"additionalProperties":false,"properties":{"authority":{"type":"string"},"confidence":{"type":"string"},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"$ref":"#/$defs/__schema0"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"state":{"type":"string"}},"required":["node_id","kind","label","authority","state","confidence","location"],"type":"object"},"type":"array"}},"required":["graph_id","node_count","edge_count","roots","node_kinds","top_findings","coverage","limitations","pages"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":2,"type":"number"},"semantic_graph":{"additionalProperties":false,"properties":{"coverage":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"fingerprints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"query_tool":{"const":"trace_javascript_semantics","type":"string"},"relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_frontiers":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["graph_id","nodes","relations","unknown_frontiers","fingerprints","coverage","query_tool"],"type":"object"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","summary","statistics","limitations","unknowns","graph","semantic_graph"],"type":"object"}]},{"oneOf":[{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","graph","summary","statistics","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"inventory_graph_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"inventory_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":2,"type":"number"},"semantic_graph":{"additionalProperties":false,"properties":{"application_graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"families":{"items":{"additionalProperties":false,"properties":{"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"omitted_relations":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"retained_relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial","unknown","unsupported"],"type":"string"},"unknown_ids":{"items":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"}},"required":["family","status","retained_relations","omitted_relations","unknown_ids"],"type":"object"},"maxItems":12,"minItems":12,"type":"array"},"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_nodes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"omitted_relations":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_nodes","omitted_relations","limits","families"],"type":"object"},"fingerprints":{"items":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea.javascript-semantic-function/v1","type":"string"},"components":{"additionalProperties":false,"properties":{"control_flow_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"effects":{"items":{"enum":["async","child-process","event","network","promise","resource","timer"],"type":"string"},"maxItems":7,"type":"array"},"literal_set_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"normalized_ast_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameter_arity":{"maximum":10000,"minimum":0,"type":"integer"},"relation_shape_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["parameter_arity","normalized_ast_sha256","control_flow_sha256","relation_shape_sha256","literal_set_sha256","effects"],"type":"object"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"fingerprint_id":{"pattern":"^jsrg_fingerprint_[a-f0-9]{64}$","type":"string"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"function_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"status":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["function_node_id","algorithm","status","components","limitations","evidence","fingerprint_id","fingerprint_sha256"],"type":"object"},"maxItems":20000,"type":"array"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"function_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"identity":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"role_key":{"maxLength":1024,"minLength":1,"type":"string"},"source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]}},"required":["artifact_sha256","module_path","source_range","role_key"],"type":"object"},"kind":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"relations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"relation_id":{"pattern":"^jsrg_relation_[a-f0-9]{64}$","type":"string"},"resolution":{"enum":["resolved","candidate"],"type":"string"},"source_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","resolution","properties","evidence","relation_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"root_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptSemanticRelationGraph","type":"string"},"schema_version":{"const":1,"type":"number"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reason":{"enum":["ambiguous-target","bound-reached","dynamic-call","dynamic-property","eval-or-generated-code","incomplete-module","missing-source","unsupported-syntax"],"type":"string"},"relation_kinds":{"items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":45,"minItems":1,"type":"array"},"unknown_id":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"}},"required":["node_id","family","relation_kinds","reason","detail","candidate_node_ids","evidence","unknown_id"],"type":"object"},"maxItems":100000,"type":"array"}},"required":["schema","schema_version","root_artifact_sha256","application_graph_id","root_node_ids","nodes","relations","fingerprints","unknowns","coverage","limitations","graph_id"],"type":"object"},"statistics":{"additionalProperties":false,"properties":{"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"invalid_utf8_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limit_omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"policy_filtered_text_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_files_selected":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated_scopes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["relevant_files","nested_asar_containers","text_files_selected","text_bytes_read","omitted_text_files","limit_omitted_text_files","policy_filtered_text_files","invalid_utf8_files","parsed_javascript_files","visited_ast_nodes","findings","modules","parse_failures","truncated_scopes"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"browser_windows":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"context_bridge_apis":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"explicit_web_preferences":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exposed_api_members":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ipc":{"additionalProperties":false,"properties":{"ambiguous_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"dynamic_channel_operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"literal_channels":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"main_handlers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_listeners":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_literal_renderer_transmissions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["operations","literal_channels","dynamic_channel_operations","renderer_transmissions","renderer_listeners","main_handlers","paired_renderer_transmissions","ambiguous_renderer_transmissions","unpaired_literal_renderer_transmissions"],"type":"object"},"native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"preload_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_native_addon_bindings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"resolved_utility_entrypoints":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sender_validation_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"utility_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["browser_windows","explicit_web_preferences","preload_entrypoints","context_bridge_apis","exposed_api_members","ipc","sender_validation_observations","utility_processes","resolved_utility_entrypoints","native_addon_bindings","resolved_native_addon_bindings"],"type":"object"}},"required":["schema_version","input_path","format","root_artifact_sha256","inventory_manifest_id","inventory_graph_sha256","graph","summary","statistics","limitations","semantic_graph"],"type":"object"}]}]}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Analyze Javascript Application"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Reconcile verified static JavaScript application graphs with existing passive web/Electron CDP, passive V8 Inspector, or provider-owned active Electron Evidence. Active Electron captures contribute an explicitly partial target-only runtime record; they never invent renderer scripts, frames, workers, or execution claims. Exact captured-source digests take priority over caller-declared file/URL mappings; target, frame, script, and worker ambiguity remains explicit, and source-map authority stays separate.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"runtime_observations":[{"authority":"external-service","confidence":"observed","environment":null,"evidence_id":"ev_e9ffe953ecde3cee6f8b1e2e2fc8be64bf58d17b3c680d1230587294f6b02c3a","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"browser":{"js_version":"1","product":"Electron/example","protocol_version":"1.3","revision":"example","user_agent":"Electron example"},"capture_window":{"ended_at":"2026-07-15T00:00:00.100Z","observation_ms":100,"started_at":"2026-07-15T00:00:00.000Z"},"completeness":{"attach_limited_sections":[],"conditions":["complete_within_window"],"dropped_events":{"console_events":0,"network_requests":0,"scripts":0,"timeline_events":0,"total":0,"webmcp_tools":0,"websocket_connections":0,"websocket_frames":0},"excluded":[],"policy_filtered_sections":[],"status":"complete_within_window","truncated_sections":[],"unavailable_sections":[]},"dom":{"nodes":[],"total_nodes":0},"frames":[],"limitations":["Example passive capture."],"resources":[],"schema_version":1,"scripts":{"items":[{"cdp_hash":"example","file_path":"/Applications/Example.app/Contents/Resources/app/renderer.js","frame_id":null,"is_module":true,"language":"JavaScript","length":29,"script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","source":{"artifact":{"bytes":29,"charset":"utf-8","media_type":"text/javascript","sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","text":"export const example = true;\\n","uri":"rea://web-content/sha256/c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"included":true}}],"total":1},"target":{"attached":false,"file_path":"/Applications/Example.app/Contents/Resources/app/index.html","target_id":"example-target","title":"Example","type":"page"},"workers":[]},"operation":"inspect_electron_page","parameters":{"allowed_file_roots":["/Applications/Example.app/Contents/Resources/app"],"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":true,"source_capture_approved":true,"target_id":"example-target"},"predicate_type":"rea.electron-page-inspection/v1","provider":{"id":"rea-cdp-electron","name":"REA Electron file-page CDP observation provider","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"static_layers":[{"analysis":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_9f1239eec535ee47ca0af92a544b16a3b4be7ce7478e0a7a6b6201b91cc39d5c","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_361585714eb0138287533474fede3727b19167348e3843c577f82b68337c7234","limitations":[],"nodes":[{"identity":{"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","stability":"global-exact","strategy":"content-digest"},"kind":"javascript-asset","node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","observations":[{"evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"artifact-bytes","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":[],"extractor":{"executable_sha256":null,"name":"rea-javascript-application","operation":"inventory-relevant-file","version":"1"},"limitations":[],"location":{"available":true,"value":{"kind":"artifact-path","path":"renderer.js"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"renderer.js","observation_id":"jag_observation_20b4d076ce370db14ae2b477915624c62e0c4a0c9e56803a2c5cb4fa60c16230","properties":{"bytes":29,"path":"renderer.js"}}]}],"root_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"schema":"JavaScriptApplicationGraph","schema_version":1},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","schema_version":1,"statistics":{"findings":0,"invalid_utf8_files":0,"limit_omitted_text_files":0,"modules":0,"nested_asar_containers":0,"omitted_text_files":0,"parse_failures":0,"parsed_javascript_files":1,"policy_filtered_text_files":0,"relevant_files":1,"text_bytes_read":29,"text_files_selected":1,"truncated_scopes":0,"visited_ast_nodes":1},"summary":{"browser_windows":0,"context_bridge_apis":0,"explicit_web_preferences":0,"exposed_api_members":0,"ipc":{"ambiguous_renderer_transmissions":0,"dynamic_channel_operations":0,"literal_channels":0,"main_handlers":0,"operations":0,"paired_renderer_transmissions":0,"renderer_listeners":0,"renderer_transmissions":0,"unpaired_literal_renderer_transmissions":0},"native_addon_bindings":0,"preload_entrypoints":0,"resolved_native_addon_bindings":0,"resolved_utility_entrypoints":0,"sender_validation_observations":0,"utility_processes":0}},"operation":"analyze_javascript_application","parameters":{"approved":true,"source_map_read_approved":false},"predicate_type":"rea.javascript-application-analysis/v1","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"schema_version":2,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"role":"application"}]}],"properties":{"limits":{"additionalProperties":false,"default":{"max_reconciliation_items":20000,"max_runtime_entities":10000,"max_static_load_states":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_reconciliation_items":{"default":20000,"description":"Maximum permitted reconciliation items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_runtime_entities":{"default":10000,"description":"Maximum permitted runtime entities for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_static_load_states":{"default":20000,"description":"Maximum permitted static load states for this operation.","maximum":50000,"minimum":1,"type":"integer"}},"type":"object"},"runtime_observations":{"description":"Value for runtime observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"static_layers":{"description":"Value for static layers.","items":{"additionalProperties":false,"properties":{"analysis":{"additionalProperties":false,"description":"Value for analysis.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"role":{"description":"Value for role.","enum":["application","cache","assets"],"type":"string"},"runtime_mappings":{"default":[],"description":"Value for runtime mappings.","items":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","maxLength":4096,"type":"string"},"kind":{"const":"file-root","description":"Value for kind.","type":"string"},"root":{"description":"Value for root.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","root"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","maxLength":4096,"type":"string"},"kind":{"const":"url-prefix","description":"Value for kind.","type":"string"},"prefix":{"description":"Value for prefix.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","prefix"],"type":"object"}]},"maxItems":32,"type":"array"}},"required":["role","analysis"],"type":"object"},"maxItems":8,"minItems":1,"type":"array"}},"required":["static_layers","runtime_observations"],"type":"object"},"kind":"electron-provider","name":"reconcile_javascript_runtime","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"omitted_graph_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_reconciliation_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_runtime_entities":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_static_load_states":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_runtime_entities","omitted_reconciliation_items","omitted_static_load_states","omitted_graph_items"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":40,"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"reconciliation_id":{"pattern":"^jrr_[a-f0-9]{64}$","type":"string"},"reconciliations":{"items":{"additionalProperties":false,"properties":{"basis":{"enum":["content-and-location","content-sha256","module-source-sha256","artifact-path","operator-file-mapping","operator-url-mapping","none"],"type":"string"},"candidate_static_count":{"maximum":800000,"minimum":0,"type":"integer"},"candidate_static_nodes":{"items":{"additionalProperties":false,"properties":{"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["static_layer_id","static_node_id"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"entity_kind":{"enum":["target","frame","script","worker"],"type":"string"},"reason":{"enum":["content-and-location-match","unique-content-match","unique-location-match","ambiguous-static-candidates","captured-content-disagrees-with-static-location","no-static-content-match","no-authorized-location-mapping","runtime-frame-unattributed","static-or-runtime-coverage-incomplete","reconciliation-limit-reached"],"type":"string"},"reconciliation_id":{"pattern":"^jrr_item_[a-f0-9]{64}$","type":"string"},"runtime_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"runtime_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"static_layer_id":{"anyOf":[{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"static_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["matched","ambiguous","unmatched","unknown"],"type":"string"}},"required":["reconciliation_id","entity_kind","runtime_evidence_id","runtime_node_id","static_layer_id","static_node_id","status","basis","confidence","reason","candidate_static_count","candidate_static_nodes"],"type":"object"},"maxItems":50000,"type":"array"},"runtime_captures":{"items":{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["browser","electron","v8-inspector","electron-active"],"type":"string"},"scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scripts_complete_within_scope":{"type":"boolean"},"target_key":{"maxLength":4096,"minLength":1,"type":"string"},"target_location":{"maxLength":4096,"minLength":1,"type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"workers":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["evidence_id","capture_sha256","kind","target_node_id","target_key","target_location","frames","scripts","workers","scripts_complete_within_scope"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"schema_version":{"const":1,"type":"number"},"source_map_authority":{"additionalProperties":false,"properties":{"limitation":{"maxLength":4096,"minLength":1,"type":"string"},"runtime_script_declarations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_layers_with_read_approval":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"used_for_primary_matching":{"const":false,"type":"boolean"}},"required":["used_for_primary_matching","static_layers_with_read_approval","runtime_script_declarations","limitation"],"type":"object"},"static_layers":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"format":{"enum":["asar","directory"],"type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"input_path":{"maxLength":16384,"minLength":1,"type":"string"},"layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"role":{"enum":["application","cache","assets"],"type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_mappings":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","maxLength":4096,"type":"string"},"kind":{"const":"file-root","type":"string"},"root":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","root","artifact_prefix"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","maxLength":4096,"type":"string"},"kind":{"const":"url-prefix","type":"string"},"prefix":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","prefix","artifact_prefix"],"type":"object"}]},"maxItems":32,"type":"array"}},"required":["layer_id","role","evidence_id","graph_id","root_artifact_sha256","input_path","format","runtime_mappings"],"type":"object"},"maxItems":8,"minItems":1,"type":"array"},"static_load_states":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["javascript-asset","javascript-chunk","javascript-module"],"type":"string"},"reason":{"enum":["runtime-script-correspondence","containing-asset-was-loaded","not-observed-in-bounded-capture","layer-outside-runtime-scope","static-or-runtime-coverage-incomplete"],"type":"string"},"runtime_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":10000,"type":"array"},"static_layer_id":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"enum":["loaded","resident-in-loaded-asset","not-observed-in-capture","unknown"],"type":"string"}},"required":["static_layer_id","static_node_id","kind","status","runtime_node_ids","reason"],"type":"object"},"maxItems":50000,"type":"array"},"summary":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"matched":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_frames":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_targets":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_workers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_loaded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_not_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_resident":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["runtime_targets","runtime_frames","runtime_scripts","runtime_workers","matched","ambiguous","unmatched","unknown","static_loaded","static_resident","static_not_observed","static_unknown"],"type":"object"}},"required":["schema_version","reconciliation_id","static_layers","runtime_captures","graph","summary","reconciliations","static_load_states","source_map_authority","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Reconcile Javascript Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Use this for an explicitly approved, provider-owned Electron run when passive CDP or Inspector observation cannot exercise application behavior. REA owns startup and teardown, accepts bounded click/wait actions plus window-targeted renderer reload/crash and synthetic open-url/second-instance delivery, and returns correlated window/WebContents/process/preload/session/navigation/shell/IPC evidence without retaining payload values. Results identify observed and unavailable event families, coverage status, action targets, and truncation. External shell, navigation, permission, download, popup, updater, and OS-integration effects are blocked and recorded. Use passive Electron tools for observation-only work.","effects":{"accessesNetwork":true,"changesUiState":true,"idempotent":false,"launchesProcess":true,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":true,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"actions":[{"kind":"click","selector":"#run","step_id":"exercise-ipc"}],"application_path":"/Applications/Example.app/Contents/Resources/main.js","application_root":"/Applications/Example.app/Contents/Resources","approved":true,"args":[],"executable_path":"/Applications/Electron.app/Contents/MacOS/Electron","limits":{"action_timeout_ms":5000,"max_actions":20,"max_duration_ms":60000,"max_ipc_events":2000,"max_processes":32,"max_windows":32},"schema_version":1}],"properties":{"actions":{"default":[],"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"click","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","maxLength":512,"minLength":1,"type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind","selector"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":10000,"minimum":0,"type":"integer"},"kind":{"const":"wait","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind","duration_ms"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"renderer-reload","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"renderer-crash","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":99,"minimum":0,"type":"integer"}},"required":["step_id","kind"],"type":"object"},{"additionalProperties":false,"properties":{"delivery":{"description":"Value for delivery.","enum":["open-url","second-instance"],"type":"string"},"kind":{"const":"deep-link","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","maxLength":128,"minLength":1,"type":"string"},"url":{"description":"Value for url.","maxLength":4096,"minLength":1,"type":"string"}},"required":["step_id","kind","delivery","url"],"type":"object"}]},"maxItems":100,"type":"array"},"application_path":{"description":"Local filesystem path for application.","maxLength":16384,"minLength":1,"type":"string"},"application_root":{"description":"Approved canonical filesystem application root.","maxLength":16384,"minLength":1,"type":"string"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"args":{"default":[],"description":"Value for args.","items":{"maxLength":4096,"type":"string"},"maxItems":32,"type":"array"},"executable_path":{"description":"Local filesystem path for executable.","maxLength":16384,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"action_timeout_ms":5000,"max_actions":20,"max_duration_ms":60000,"max_ipc_events":2000,"max_processes":32,"max_runtime_events":5000,"max_windows":32},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"action_timeout_ms":{"default":5000,"description":"Value for action timeout ms.","maximum":30000,"minimum":1,"type":"integer"},"max_actions":{"default":20,"description":"Maximum permitted actions for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_duration_ms":{"default":60000,"description":"Maximum permitted duration ms for this operation.","maximum":120000,"minimum":1,"type":"integer"},"max_ipc_events":{"default":2000,"description":"Maximum permitted ipc events for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_processes":{"default":32,"description":"Maximum permitted processes for this operation.","maximum":100,"minimum":1,"type":"integer"},"max_runtime_events":{"default":5000,"description":"Maximum permitted runtime events for this operation.","maximum":20000,"minimum":1,"type":"integer"},"max_windows":{"default":32,"description":"Maximum permitted windows for this operation.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","executable_path","application_path","application_root","approved"],"type":"object"},"kind":"electron-provider","name":"capture_electron_scenario","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"actions":{"items":{"additionalProperties":false,"properties":{"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["click","wait","renderer-reload","renderer-crash","deep-link"],"type":"string"},"status":{"enum":["completed","failed","cancelled"],"type":"string"},"step_id":{"maxLength":128,"minLength":1,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":99,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","status","elapsed_ms","error"],"type":"object"},"maxItems":100,"type":"array"},"application":{"additionalProperties":false,"properties":{"application_path":{"maxLength":16384,"minLength":1,"type":"string"},"cleanup":{"const":"terminated-owned-process","type":"string"},"electron_version":{"maxLength":256,"minLength":1,"type":"string"},"executable_path":{"maxLength":16384,"minLength":1,"type":"string"},"process_ownership":{"const":"provider-owned","type":"string"}},"required":["executable_path","application_path","electron_version","process_ownership","cleanup"],"type":"object"},"coverage":{"additionalProperties":false,"default":{"observed_event_families":[],"observed_roles":[],"pre_capture_activity":"unavailable","status":"partial_attach","unavailable_event_families":[]},"properties":{"observed_event_families":{"items":{"maxLength":128,"type":"string"},"maxItems":32,"type":"array"},"observed_roles":{"items":{"maxLength":128,"type":"string"},"maxItems":16,"type":"array"},"pre_capture_activity":{"const":"unavailable","type":"string"},"status":{"enum":["complete","partial_attach","capture_truncated","hook_conflict","target_exited","cleanup_failed"],"type":"string"},"unavailable_event_families":{"items":{"maxLength":128,"type":"string"},"maxItems":32,"type":"array"}},"required":["status","observed_event_families","unavailable_event_families","observed_roles","pre_capture_activity"],"type":"object"},"ipc":{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"maxLength":64,"type":"string"},"maxItems":32,"type":"array"},"argument_shapes_truncated":{"default":false,"type":"boolean"},"artifact_path":{"anyOf":[{"maxLength":16384,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"capture_method":{"default":"api-wrapper","enum":["api-wrapper","event-emitter","process-hook"],"type":"string"},"channel":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"channel_truncated":{"default":false,"type":"boolean"},"correlation_id":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"direction":{"anyOf":[{"enum":["renderer-to-main","main-to-renderer","main-to-utility","utility-to-main"],"type":"string"},{"type":"null"}]},"error":{"type":"boolean"},"event":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"kind":{"enum":["main-handler-invocation","main-event-invocation","utility-process-fork","utility-process-message","ipc-main-to-renderer","ipc-utility-to-main","ipc-renderer-send","ipc-renderer-invoke","ipc-renderer-post-message"],"type":"string"},"phase":{"anyOf":[{"enum":["attempted","completed","blocked","failed","observed"],"type":"string"},{"type":"null"}]},"process_type":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"default":"electron-active-hook","maxLength":64,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","channel","channel_truncated","frame","argument_shapes","argument_shapes_truncated","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"maxItems":10000,"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["events","observed","retained","truncated"],"type":"object"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"processes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"name":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"service_name":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"type":{"maxLength":128,"minLength":1,"type":"string"}},"required":["pid","type","name","service_name"],"type":"object"},"maxItems":100,"type":"array"},"truncated":{"type":"boolean"}},"required":["items","truncated"],"type":"object"},"schema_version":{"const":1,"type":"number"},"timeline":{"additionalProperties":false,"default":{"events":[],"observed":0,"retained":0,"truncated":false},"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"maxLength":64,"type":"string"},"maxItems":32,"type":"array"},"argument_shapes_truncated":{"type":"boolean"},"artifact_path":{"anyOf":[{"maxLength":16384,"type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"capture_method":{"enum":["api-wrapper","event-emitter","process-hook"],"type":"string"},"channel":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"channel_truncated":{"type":"boolean"},"correlation_id":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null},"direction":{"anyOf":[{"enum":["renderer-to-main","main-to-renderer","main-to-utility","utility-to-main"],"type":"string"},{"type":"null"}]},"error":{"type":"boolean"},"event":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"kind":{"enum":["main-handler-invocation","main-event-invocation","utility-process-fork","utility-process-message","ipc-main-to-renderer","ipc-utility-to-main","ipc-renderer-send","ipc-renderer-invoke","ipc-renderer-post-message","app-lifecycle","window-lifecycle","web-contents-lifecycle","navigation","shell-attempt","process-lifecycle","permission","popup-attempt","download","protocol","preload","native-addon","updater","error"],"type":"string"},"phase":{"enum":["attempted","completed","blocked","failed","observed"],"type":"string"},"process_type":{"anyOf":[{"maxLength":128,"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"maxLength":64,"type":"string"},"target":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","event","phase","channel","channel_truncated","direction","sender","receiver","frame","target","argument_shapes","argument_shapes_truncated","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"maxItems":20000,"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["events","observed","retained","truncated"],"type":"object"},"windows":{"items":{"additionalProperties":false,"properties":{"destroyed":{"type":"boolean"},"title":{"maxLength":16384,"type":"string"},"url":{"maxLength":65536,"type":"string"},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"web_contents_id":{"maxLength":256,"type":"string"},"window_id":{"maxLength":256,"type":"string"}},"required":["window_id","web_contents_id","url","title","visible","destroyed"],"type":"object"},"maxItems":100,"type":"array"},"windows_truncated":{"type":"boolean"}},"required":["schema_version","application","actions","windows","windows_truncated","processes","ipc","timeline","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Capture Electron Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List attachable Node/Electron V8 Inspector targets from one approved literal-loopback endpoint. Only targets inside exact canonical file roots or exact HTTP(S) origins are retained; excluded target locations never enter Evidence.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/opt/example-app"],"allowed_origins":[],"approved":true,"inspector_endpoint":"http://127.0.0.1:9229","limit":100,"offset":0}],"properties":{"allowed_file_roots":{"default":[],"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"inspector_endpoint":{"description":"Value for inspector endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["inspector_endpoint","approved"],"type":"object"},"kind":"runtime-provider","name":"list_javascript_runtime_targets","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"outside_file_roots":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_origins":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unconnectable":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_file_roots","outside_origins","unsupported_location","unconnectable"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"maxLength":1024,"minLength":1,"type":"string"},"protocol_version":{"maxLength":100,"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"schema_version":{"const":1,"type":"number"},"targets":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"protocol_type":{"maxLength":100,"minLength":1,"type":"string"},"target_id":{"maxLength":256,"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location"],"type":"object"},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["schema_version","runtime","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"List Javascript Runtime Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Attach passively to one exact approved Node/Electron V8 Inspector target and capture bounded Debugger.scriptParsed plus Runtime execution-context events. REA sends only Runtime.enable and Debugger.enable: it never evaluates, pauses, resumes, reads source, or instruments the target. require/import edges, EventEmitter activity, and Electron IPC remain explicit unknowns; reconcile the returned Evidence with static Application Graph Evidence using reconcile_javascript_runtime.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"allowed_file_roots":["/opt/example-app"],"allowed_origins":[],"approved":true,"inspector_endpoint":"http://127.0.0.1:9229","limits":{"max_events":10000,"max_execution_contexts":1000,"max_location_bytes":16384,"max_scripts":2000,"max_total_metadata_bytes":4194304},"observation_ms":100,"runtime_kind":"node","target_id":"TARGET_ID_FROM_LIST_JAVASCRIPT_RUNTIME_TARGETS"}],"properties":{"allowed_file_roots":{"default":[],"description":"Approved canonical filesystem allowed file roots.","items":{"maxLength":16384,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"allowed_origins":{"description":"Value for allowed origins.","items":{"maxLength":2048,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"inspector_endpoint":{"description":"Value for inspector endpoint.","maxLength":2048,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_events":10000,"max_execution_contexts":1000,"max_location_bytes":16384,"max_scripts":2000,"max_total_metadata_bytes":4194304},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_events":{"default":10000,"description":"Maximum permitted events for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_execution_contexts":{"default":1000,"description":"Maximum permitted execution contexts for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_location_bytes":{"default":16384,"description":"Maximum permitted location bytes for this operation.","maximum":65536,"minimum":64,"type":"integer"},"max_scripts":{"default":2000,"description":"Maximum permitted scripts for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_total_metadata_bytes":{"default":4194304,"description":"Maximum permitted total metadata bytes for this operation.","maximum":33554432,"minimum":1024,"type":"integer"}},"type":"object"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":10000,"minimum":0,"type":"integer"},"runtime_kind":{"description":"Value for runtime kind.","enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},"target_id":{"description":"Exact authorized CDP target identifier.","maxLength":256,"minLength":1,"type":"string"}},"required":["inspector_endpoint","approved","target_id","runtime_kind"],"type":"object"},"kind":"runtime-provider","name":"observe_javascript_runtime","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"capture":{"additionalProperties":false,"properties":{"events_dropped":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"events_observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"events_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"metadata_bytes_retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observation_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"},"truncation_reasons":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"}},"required":["observation_ms","events_observed","events_retained","events_dropped","metadata_bytes_retained","truncated","truncation_reasons"],"type":"object"},"directly_observed":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"execution_contexts":{"items":{"additionalProperties":false,"properties":{"context_key":{"maxLength":64,"minLength":1,"type":"string"},"name":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"null"}]},"state":{"enum":["created","destroyed","cleared"],"type":"string"}},"required":["context_key","state","name","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"maxLength":1024,"minLength":1,"type":"string"},"protocol_version":{"maxLength":100,"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"maxLength":1024,"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"schema_version":{"const":1,"type":"number"},"scripts":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"invalid_protocol_value":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_file_roots":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outside_origins":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["outside_file_roots","outside_origins","unsupported_location","invalid_protocol_value"],"type":"object"},"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"anyOf":[{"maxLength":512,"type":"string"},{"type":"null"}]},"execution_context_key":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}]},"is_module":{"type":"boolean"},"length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"script_key":{"pattern":"^v8_script_[a-f0-9]{64}$","type":"string"},"status":{"const":"observed-loaded","type":"string"}},"required":["script_key","location","execution_context_key","cdp_hash","length","is_module","status"],"type":"object"},"type":"array"},"observed_total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","observed_total","excluded"],"type":"object"},"target":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"maxLength":16384,"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"maxLength":2048,"minLength":1,"type":"string"},"sanitized_url":{"maxLength":65536,"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},"protocol_type":{"maxLength":100,"minLength":1,"type":"string"},"runtime_kind":{"enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},"runtime_kind_authority":{"const":"caller-declared-unverified","type":"string"},"target_id":{"maxLength":256,"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location","runtime_kind","runtime_kind_authority"],"type":"object"},"unavailable_without_instrumentation":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"unknowns":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["schema_version","runtime","target","capture","scripts","execution_contexts","directly_observed","unavailable_without_instrumentation","unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Observe Javascript Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a typed literal seed through an authenticated JavaScript Application Graph supplied as full Evidence or an Evidence ID returned earlier in this session. Explicit direction, depth, node, edge, and path bounds apply. Original static, native, passive-runtime, inferred, and unknown authorities remain distinct; native addon handoffs never open a provider or execute the application.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"direction":{"default":"both","description":"Direction in which to traverse or compare relationships.","enum":["outgoing","incoming","both"],"type":"string"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_nodes":2000,"max_paths":100,"max_seed_matches":25},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_paths":{"default":100,"description":"Maximum permitted paths for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"native_observations":{"default":[],"description":"Value for native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"seed":{"additionalProperties":false,"description":"Value for seed.","properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"kind":{"description":"Value for kind.","enum":["node-id","route","string","api","channel","module","native-export"],"type":"string"},"match":{"anyOf":[{"enum":["exact","contains"],"type":"string"},{"type":"null"}],"default":null,"description":"Value for match."},"value":{"description":"Value for value.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"}},"required":["seed","application"],"type":"object"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"direction":{"default":"both","description":"Direction in which to traverse or compare relationships.","enum":["outgoing","incoming","both"],"type":"string"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_nodes":2000,"max_paths":100,"max_seed_matches":25},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_paths":{"default":100,"description":"Maximum permitted paths for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"native_observations":{"default":[],"description":"Value for native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"seed":{"additionalProperties":false,"description":"Value for seed.","properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"kind":{"description":"Value for kind.","enum":["node-id","route","string","api","channel","module","native-export"],"type":"string"},"match":{"anyOf":[{"enum":["exact","contains"],"type":"string"},{"type":"null"}],"default":null,"description":"Value for match."},"value":{"description":"Value for value.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"}},"required":["seed","application_evidence_id"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","direction":"both","seed":{"case_sensitive":false,"kind":"module","match":"exact","value":"renderer.js"}}],"type":"object"},"kind":"application","name":"trace_application_feature","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"frontier_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"type":"array"},"omitted_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_paths":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scanned_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-source","partial","truncated","no-match"],"type":"string"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","source_graph_status","scanned_nodes","total_seed_matches","omitted_seed_matches","omitted_nodes","omitted_edges","omitted_paths","frontier_node_ids"],"type":"object"},"direction":{"enum":["outgoing","incoming","both"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":65,"minItems":1,"type":"array"},"graph":{"anyOf":[{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"native_handoffs":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]},"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"export_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"native_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"maxItems":64,"type":"array"},"recommended_tools":{"items":{"enum":["open_binary","binary_overview","search_procedures","analyze_function","xrefs"],"type":"string"},"maxItems":5,"type":"array"},"requested_exports":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"status":{"enum":["evidence-linked","requires-provider-analysis"],"type":"string"}},"required":["native_node_id","artifact_sha256","artifact_path","export_node_ids","requested_exports","status","providers","evidence_ids","recommended_tools"],"type":"object"},"maxItems":10000,"type":"array"},"paths":{"items":{"additionalProperties":false,"properties":{"authorities":{"items":{"maxLength":128,"minLength":1,"type":"string"},"maxItems":16,"type":"array"},"contains_inference":{"type":"boolean"},"edge_ids":{"items":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"end_kind":{"maxLength":128,"minLength":1,"type":"string"},"end_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":65,"minItems":1,"type":"array"},"path_id":{"pattern":"^jatp_[a-f0-9]{64}$","type":"string"},"start_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["path_id","start_node_id","end_node_id","end_kind","node_ids","edge_ids","authorities","contains_inference"],"type":"object"},"maxItems":1000,"type":"array"},"schema_version":{"const":1,"type":"number"},"seed":{"additionalProperties":false,"properties":{"case_sensitive":{"default":false,"type":"boolean"},"kind":{"enum":["node-id","route","string","api","channel","module","native-export"],"type":"string"},"match":{"anyOf":[{"enum":["exact","contains"],"type":"string"},{"type":"null"}],"default":null},"value":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","value","match","case_sensitive"],"type":"object"},"seed_matches":{"items":{"additionalProperties":false,"properties":{"basis":{"enum":["node-id","label","identity","property"],"type":"string"},"field":{"maxLength":256,"minLength":1,"type":"string"},"kind":{"maxLength":128,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","kind","basis","field"],"type":"object"},"maxItems":1000,"type":"array"},"source_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"source_graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"summary":{"additionalProperties":false,"properties":{"inferred_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"matched_seeds":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"native_handoffs":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observed_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"terminal_paths":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traced_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traced_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unavailable_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_facts":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["matched_seeds","traced_nodes","traced_edges","terminal_paths","native_handoffs","observed_facts","inferred_facts","unknown_facts","unavailable_facts"],"type":"object"},"trace_id":{"pattern":"^jatr_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","trace_id","source_evidence_id","source_graph_id","seed","direction","seed_matches","graph","paths","native_handoffs","summary","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Application Feature"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace bounded static JavaScript data-flow, direct call/return, and closure relations from authenticated analyze_javascript_application v2 Evidence. Queries declare direction and exact node, relation, depth, function, module, and page limits. Dynamic or unsupported semantics remain explicit unknowns; static reachability never claims runtime execution.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"query":{"additionalProperties":false,"description":"Non-empty feature or text query to investigate.","properties":{"allowed_relations":{"description":"Value for allowed relations.","items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":44,"minItems":1,"type":"array"},"cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null,"description":"Value for cursor."},"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"expected":{"anyOf":[{"additionalProperties":false,"properties":{"classes":{"description":"Value for classes.","items":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"maxItems":24,"minItems":1,"type":"array"},"role":{"description":"Value for role.","enum":["source","sink"],"type":"string"}},"required":["role","classes"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for expected."},"include_ambiguous_dynamic_edges":{"default":false,"description":"Whether to include ambiguous dynamic edges in the result.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_functions":500,"max_modules":500,"max_nodes":2000,"max_seed_matches":25,"max_unknowns":1000,"page_size":200},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"description":"Maximum permitted functions for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"description":"Maximum permitted modules for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"description":"Maximum permitted unknowns for this operation.","maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"description":"Value for page size.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"seed":{"description":"Value for seed.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","description":"Value for kind.","type":"string"},"value":{"$ref":"#/$defs/__schema0","description":"Value for value."}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"description":"Exact SHA-256 digest of fingerprint.","pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]},"source_map_authority":{"additionalProperties":false,"default":{"authority":"none"},"description":"Value for source map authority.","properties":{"authority":{"const":"none","description":"Value for authority.","type":"string"}},"required":["authority"],"type":"object"}},"required":["seed","direction"],"type":"object"}},"required":["application","query"],"type":"object"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"query":{"additionalProperties":false,"description":"Non-empty feature or text query to investigate.","properties":{"allowed_relations":{"description":"Value for allowed relations.","items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":44,"minItems":1,"type":"array"},"cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null,"description":"Value for cursor."},"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"expected":{"anyOf":[{"additionalProperties":false,"properties":{"classes":{"description":"Value for classes.","items":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"maxItems":24,"minItems":1,"type":"array"},"role":{"description":"Value for role.","enum":["source","sink"],"type":"string"}},"required":["role","classes"],"type":"object"},{"type":"null"}],"default":null,"description":"Value for expected."},"include_ambiguous_dynamic_edges":{"default":false,"description":"Whether to include ambiguous dynamic edges in the result.","type":"boolean"},"limits":{"additionalProperties":false,"default":{"max_depth":12,"max_edges":4000,"max_functions":500,"max_modules":500,"max_nodes":2000,"max_seed_matches":25,"max_unknowns":1000,"page_size":200},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_depth":{"default":12,"description":"Maximum permitted depth for this operation.","maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"description":"Maximum permitted edges for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"description":"Maximum permitted functions for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"description":"Maximum permitted modules for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"description":"Maximum permitted nodes for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"description":"Maximum permitted seed matches for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"description":"Maximum permitted unknowns for this operation.","maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"description":"Value for page size.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"seed":{"description":"Value for seed.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","description":"Value for kind.","type":"string"},"node_id":{"description":"Value for node id.","pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","description":"Value for kind.","type":"string"},"value":{"$ref":"#/$defs/__schema0","description":"Value for value."}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"description":"Exact SHA-256 digest of fingerprint.","pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","description":"Value for kind.","type":"string"},"value":{"description":"Value for value.","maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]},"source_map_authority":{"additionalProperties":false,"default":{"authority":"none"},"description":"Value for source map authority.","properties":{"authority":{"const":"none","description":"Value for authority.","type":"string"}},"required":["authority"],"type":"object"}},"required":["seed","direction"],"type":"object"}},"required":["application_evidence_id","query"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","query":{"direction":"backward-provenance","seed":{"kind":"semantic-node","node_id":"jsrg_node_0000000000000000000000000000000000000000000000000000000000000000"},"source_map_authority":{"authority":"none"}}}],"type":"object"},"kind":"application","name":"trace_javascript_semantics","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"accepted_limit_ranges":{"additionalProperties":false,"properties":{"max_depth":{"additionalProperties":false,"properties":{"maximum":{"const":64,"type":"number"},"minimum":{"const":0,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_edges":{"additionalProperties":false,"properties":{"maximum":{"const":100000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_functions":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_modules":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_nodes":{"additionalProperties":false,"properties":{"maximum":{"const":50000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_seed_matches":{"additionalProperties":false,"properties":{"maximum":{"const":1000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"max_unknowns":{"additionalProperties":false,"properties":{"maximum":{"const":10000,"type":"number"},"minimum":{"const":0,"type":"number"}},"required":["minimum","maximum"],"type":"object"},"page_size":{"additionalProperties":false,"properties":{"maximum":{"const":1000,"type":"number"},"minimum":{"const":1,"type":"number"}},"required":["minimum","maximum"],"type":"object"}},"required":["max_seed_matches","max_nodes","max_edges","max_depth","max_functions","max_modules","max_unknowns","page_size"],"type":"object"},"applied_limits":{"additionalProperties":false,"properties":{"max_depth":{"default":12,"maximum":64,"minimum":0,"type":"integer"},"max_edges":{"default":4000,"maximum":100000,"minimum":1,"type":"integer"},"max_functions":{"default":500,"maximum":10000,"minimum":1,"type":"integer"},"max_modules":{"default":500,"maximum":10000,"minimum":1,"type":"integer"},"max_nodes":{"default":2000,"maximum":50000,"minimum":1,"type":"integer"},"max_seed_matches":{"default":25,"maximum":1000,"minimum":1,"type":"integer"},"max_unknowns":{"default":1000,"maximum":10000,"minimum":0,"type":"integer"},"page_size":{"default":200,"maximum":1000,"minimum":1,"type":"integer"}},"required":["max_seed_matches","max_nodes","max_edges","max_depth","max_functions","max_modules","max_unknowns","page_size"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"frontier":{"items":{"additionalProperties":false,"properties":{"depth":{"maximum":65,"minimum":0,"type":"integer"},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"reason":{"enum":["max-depth","max-edges","max-functions","max-modules","max-nodes","max-seed-matches"],"type":"string"}},"required":["node_id","depth","reason"],"type":"object"},"maxItems":100000,"type":"array"},"status":{"enum":["complete","partial","truncated","unavailable"],"type":"string"}},"required":["status","frontier"],"type":"object"},"direction":{"enum":["backward-provenance","forward-influence","callers","ownership"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"expected_match_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"function_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"identity":{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"role_key":{"maxLength":1024,"minLength":1,"type":"string"},"source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]}},"required":["artifact_sha256","module_path","source_range","role_key"],"type":"object"},"kind":{"enum":["module","function","parameter","binding","expression","literal","property-slot","call-site","return-site","closure-capture","promise","task","event","listener","timer","child-process","stdio","signal","config-source","request","response","boundary","resource","unknown-frontier"],"type":"string"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"maxItems":3000,"type":"array"},"page":{"additionalProperties":false,"properties":{"next_cursor":{"anyOf":[{"pattern":"^jsrqc_[0-9]+_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"size":{"maximum":1000,"minimum":0,"type":"integer"}},"required":["offset","size","next_cursor"],"type":"object"},"query_id":{"pattern":"^jsrq_[a-f0-9]{64}$","type":"string"},"relations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"relation_id":{"pattern":"^jsrg_relation_[a-f0-9]{64}$","type":"string"},"resolution":{"enum":["resolved","candidate"],"type":"string"},"source_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","resolution","properties","evidence","relation_id","identifier_strategy"],"type":"object"},"maxItems":1000,"type":"array"},"schema_version":{"const":1,"type":"number"},"seed":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"semantic-node","type":"string"},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"application-node","type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["kind","node_id"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"literal","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"function","type":"string"}},"required":["kind","fingerprint_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"property","type":"string"},"name":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","type":"string"},"value":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","type":"string"},"name":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"boundary-field","type":"string"}},"required":["kind","field"],"type":"object"}]},"seed_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"source_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"source_graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"status":{"enum":["found","no-match","ambiguous","partial","truncated","unsupported"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"relevant_unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_unknowns":{"maximum":10000,"minimum":0,"type":"integer"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_functions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"traversed_relations":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total_seed_matches","retained_seed_matches","traversed_nodes","traversed_relations","traversed_functions","traversed_modules","relevant_unknowns","retained_unknowns"],"type":"object"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"family":{"enum":["boundary","call-flow","child-process","closure","configuration","data-flow","event","object-flow","promise-ownership","request","resource-lifecycle","timer"],"type":"string"},"node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"reason":{"enum":["ambiguous-target","bound-reached","dynamic-call","dynamic-property","eval-or-generated-code","incomplete-module","missing-source","unsupported-syntax"],"type":"string"},"relation_kinds":{"items":{"enum":["acquires","aggregates","aliases","argument-to-parameter","awaits","calls","cancels-timer","captures","chains","coerces","connects-stdio","consumed-by","constructs-request","creates-promise","defaults","defines","destructures","detaches-task","dispatches-candidate","forwards-signal","listens-error","listens-exit","owns","overrides","parses","reads","reads-argv","reads-config","reads-environment","reads-property","registers-listener","releases","removes-listener","returns-task","returns-to-call","schedules-timer","spawns","spreads","supplies-argv","supplies-env","supplies-request-field","validates","writes","writes-property"],"type":"string"},"maxItems":45,"minItems":1,"type":"array"},"unknown_id":{"pattern":"^jsrg_unknown_[a-f0-9]{64}$","type":"string"}},"required":["node_id","family","relation_kinds","reason","detail","candidate_node_ids","evidence","unknown_id"],"type":"object"},"maxItems":100000,"type":"array"}},"required":["schema_version","query_id","source_graph_id","seed","direction","status","seed_node_ids","nodes","relations","unknowns","expected_match_node_ids","summary","coverage","page","applied_limits","accepted_limit_ranges","limitations","source_evidence_id","evidence_links"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Trace Javascript Semantics"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two authenticated JavaScript Application Graph versions supplied as full Evidence or Evidence IDs returned earlier in this session. Uses unique-only exact digest, module source digest, source-map identity, structural fingerprint, and non-module semantic-key tiers. Reports added, removed, changed, ambiguous, and unknown entities plus a bounded changed_from graph without fuzzy or module-ordinal pairing.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left","right"],"type":"object"},{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left","right_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the left native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"left_native_observations":{"default":[],"description":"Value for left native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"limits":{"additionalProperties":false,"default":{"max_candidate_nodes":100,"max_comparison_items":20000,"max_graph_edges":40000,"max_graph_nodes":20000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_comparison_items":{"default":20000,"description":"Maximum permitted comparison items for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_graph_edges":{"default":40000,"description":"Maximum permitted graph edges for this operation.","maximum":200000,"minimum":1,"type":"integer"},"max_graph_nodes":{"default":20000,"description":"Maximum permitted graph nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_native_observation_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the right native observation observations.","items":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":64,"type":"array"},"right_native_observations":{"default":[],"description":"Value for right native observations.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":64,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"}],"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111"}],"type":"object"},"kind":"application","name":"compare_application_versions","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"comparison_id":{"pattern":"^javc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"omitted_candidate_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_comparison_items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_graph_observations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","left_graph_status","right_graph_status","omitted_comparison_items","omitted_candidate_references","omitted_graph_nodes","omitted_graph_edges","omitted_graph_observations"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"edges":{"items":{"additionalProperties":false,"properties":{"edge_id":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"relationship-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"},"relation":{"enum":["contains","loads","imports","maps_to","exposes","sends","invokes","handles","calls","persists_to","observed_as","changed_from"],"type":"string"},"source_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"target_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["source_node_id","target_node_id","relation","properties","evidence","edge_id","identifier_strategy"],"type":"object"},"maxItems":200000,"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"identity":{"oneOf":[{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"global-exact","type":"string"},"strategy":{"const":"content-digest","type":"string"}},"required":["strategy","stability","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"original_source":{"maxLength":4096,"minLength":1,"type":"string"},"source_map_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"stability":{"const":"source-map-exact","type":"string"},"strategy":{"const":"source-map-original","type":"string"}},"required":["strategy","stability","source_map_sha256","original_source","source_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"canonical-path","type":"string"}},"required":["strategy","stability","artifact_sha256","path"],"type":"object"},{"additionalProperties":false,"properties":{"algorithm":{"maxLength":128,"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"maxItems":6,"minItems":1,"type":"array"},"fingerprint_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"stability":{"const":"cross-version-inference","type":"string"},"strategy":{"const":"structural-fingerprint","type":"string"}},"required":["strategy","stability","algorithm","fingerprint_sha256","basis"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"key":{"maxLength":4096,"minLength":1,"type":"string"},"namespace":{"maxLength":512,"minLength":1,"type":"string"},"stability":{"const":"artifact-version","type":"string"},"strategy":{"const":"artifact-local-key","type":"string"}},"required":["strategy","stability","artifact_sha256","namespace","key"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime_key":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"capture-only","type":"string"},"strategy":{"const":"runtime-instance","type":"string"}},"required":["strategy","stability","capture_sha256","runtime_key"],"type":"object"},{"additionalProperties":false,"properties":{"observation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope":{"maxLength":4096,"minLength":1,"type":"string"},"stability":{"const":"observation-only","type":"string"},"strategy":{"const":"observation-fingerprint","type":"string"}},"required":["strategy","stability","observation_sha256","scope"],"type":"object"}]},"kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"observations":{"items":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"artifact":{"oneOf":[{"additionalProperties":false,"properties":{"artifact_id":{"pattern":"^art_[a-f0-9]{64}$","type":"string"},"available":{"const":true,"type":"boolean"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["available","artifact_id","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"authority":{"enum":["artifact-bytes","ast-static-analysis","static-relationship-inference","passive-cdp-runtime","cross-layer-reconciliation","cross-version-comparison","controlled-replay","native-analysis-provider","managed-static-analysis","historical-reference","user-assertion","unknown"],"type":"string"},"confidence":{"enum":["exact","high","medium","low","unknown"],"type":"string"},"coverage":{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"maxLength":128,"minLength":1,"type":"string"},"unit":{"enum":["items","bytes","milliseconds","depth","characters","instructions","other"],"type":"string"},"value":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["name","value","unit"],"type":"object"},"maxItems":32,"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"maxLength":128,"minLength":1,"type":"string"},"operation":{"maxLength":256,"minLength":1,"type":"string"},"version":{"maxLength":128,"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"kind":{"const":"source-range","type":"string"},"source":{"maxLength":4096,"minLength":1,"type":"string"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["kind","source","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"url":{"maxLength":16384,"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"maxLength":512,"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"maxLength":512,"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"maxLength":4096,"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"maxLength":512,"minLength":1,"type":"string"}},"required":["kind","package_name","export_path"],"type":"object"}]}},"required":["available","value"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","not-approved","truncated","provider-unavailable","unresolved","unknown"],"type":"string"}},"required":["available","reason","detail"],"type":"object"}]},"state":{"enum":["observed","inferred","unknown","unavailable"],"type":"string"}},"required":["authority","state","confidence","artifact","location","extractor","coverage","limitations","evidence_ids"],"type":"object"},"identifier_strategy":{"additionalProperties":false,"properties":{"stability":{"const":"observation-exact","type":"string"},"strategy":{"const":"semantic-content-sha256","type":"string"}},"required":["strategy","stability"],"type":"object"},"label":{"anyOf":[{"maxLength":1024,"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"maxLength":128,"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"maxItems":100000,"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"},"schema_version":{"const":1,"type":"number"}},"required":["schema","schema_version","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"items":{"items":{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"maxItems":6,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":130,"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-node-identity","exact-content-digest","exact-module-source-digest","source-map-identity","structural-fingerprint","semantic-key","none"],"type":"string"},"candidate_left_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"candidate_right_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","unknown"],"type":"string"},"status":{"enum":["matched","unmatched","ambiguous"],"type":"string"}},"required":["status","basis","confidence","candidate_left_node_ids","candidate_right_node_ids"],"type":"object"},"node_kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"right_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","added","removed","changed","unknown"],"type":"string"}},"required":["item_id","status","node_kind","left_node_id","right_node_id","match","dimensions","evidence_links","limitations"],"type":"object"},"maxItems":50000,"type":"array"},"left":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"matching":{"additionalProperties":false,"properties":{"ambiguous":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_content_digest":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_module_source_digest":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"exact_node_identity":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"semantic_key":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_map_identity":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural_fingerprint":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unmatched":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["exact_node_identity","exact_content_digest","exact_module_source_digest","source_map_identity","structural_fingerprint","semantic_key","ambiguous","unmatched"],"type":"object"},"right":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","added","removed","changed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","left","right","summary","matching","items","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Application Versions"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare a cryptographically committed HistoricalSourceGraph/v1 with authenticated JavaScript Application Graph Evidence supplied directly or by session Evidence ID. Uses explicit exact-digest, source-map path, current-path, suffix, and basename signals with stable weights. Classifies unchanged, modified, removed, split, merged, duplicated, and unknown; incomplete coverage and ambiguous weak signals never become absence or forced matches.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"description":"Value for application.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"limits":{"additionalProperties":false,"default":{"max_application_nodes":20000,"max_candidate_evaluations":1000000,"max_candidate_nodes":100,"max_source_files":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_application_nodes":{"default":20000,"description":"Maximum permitted application nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_candidate_evaluations":{"default":1000000,"description":"Maximum permitted candidate evaluations for this operation.","maximum":10000000,"minimum":1,"type":"integer"},"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_source_files":{"default":10000,"description":"Maximum permitted source files for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"reference":{"additionalProperties":false,"description":"Value for reference.","properties":{"authority":{"const":"historical-reference","description":"Value for authority.","type":"string"},"entries":{"description":"Value for entries.","items":{"oneOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["hashed","redacted-secret","excluded","unreadable","too-large","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for sha256."},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for size."}},"required":["path","classifications","limitations","kind","sha256","size","language","content_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"tree_state":{"description":"Value for tree state.","enum":["enumerated","partial","excluded","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","tree_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"target":{"description":"Value for target.","maxLength":4096,"minLength":1,"type":"string"},"target_state":{"description":"Value for target state.","enum":["internal","external","missing","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","target","target_state"],"type":"object"}]},"maxItems":100000,"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","enum":["configured-secret","symlink-escape","size-limit","inventory-limit","unreadable","caller-excluded"],"type":"string"}},"required":["path","reason"],"type":"object"},"maxItems":100000,"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"maxLength":100,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"manifests":{"description":"Value for manifests.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":10000,"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","maxLength":100,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"maxItems":10000,"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","maxLength":200,"minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","maxLength":100,"minLength":1,"type":"string"},"importer_version":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for importer version."}},"required":["importer","importer_version","caller"],"type":"object"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"from_path":{"description":"Local filesystem path for from.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"description":"Value for kind.","enum":["imports","requires","references","declares-module"],"type":"string"},"parse_state":{"description":"Value for parse state.","enum":["parsed","partial","unknown"],"type":"string"},"resolution":{"description":"Value for resolution.","enum":["internal","external","unresolved","unknown"],"type":"string"},"to":{"description":"Value for to.","maxLength":4096,"minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"maxItems":200000,"type":"array"},"root_alias":{"const":"$REFERENCE_ROOT","description":"Value for root alias.","type":"string"},"root_sha256":{"description":"Exact SHA-256 digest of root.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema":{"const":"HistoricalSourceGraph/v1","description":"Value for schema.","type":"string"},"vcs":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"dirty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for dirty."},"head":{"description":"Value for head.","pattern":"^(?:[a-f0-9]{40}|[a-f0-9]{64})$","type":"string"},"kind":{"const":"git","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"none","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"unknown","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"}]},{"type":"null"}],"description":"Value for vcs."}},"required":["schema","authority","root_alias","root_sha256","inventory_state","entries","relationships","parse_failures","exclusions","languages","manifests","vcs","provenance","limitations"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["reference","application"],"type":"object"},{"additionalProperties":false,"properties":{"application_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"limits":{"additionalProperties":false,"default":{"max_application_nodes":20000,"max_candidate_evaluations":1000000,"max_candidate_nodes":100,"max_source_files":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_application_nodes":{"default":20000,"description":"Maximum permitted application nodes for this operation.","maximum":100000,"minimum":1,"type":"integer"},"max_candidate_evaluations":{"default":1000000,"description":"Maximum permitted candidate evaluations for this operation.","maximum":10000000,"minimum":1,"type":"integer"},"max_candidate_nodes":{"default":100,"description":"Maximum permitted candidate nodes for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_source_files":{"default":10000,"description":"Maximum permitted source files for this operation.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"reference":{"additionalProperties":false,"description":"Value for reference.","properties":{"authority":{"const":"historical-reference","description":"Value for authority.","type":"string"},"entries":{"description":"Value for entries.","items":{"oneOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["hashed","redacted-secret","excluded","unreadable","too-large","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for sha256."},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for size."}},"required":["path","classifications","limitations","kind","sha256","size","language","content_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"tree_state":{"description":"Value for tree state.","enum":["enumerated","partial","excluded","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","tree_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"target":{"description":"Value for target.","maxLength":4096,"minLength":1,"type":"string"},"target_state":{"description":"Value for target state.","enum":["internal","external","missing","unreadable","unknown"],"type":"string"}},"required":["path","classifications","limitations","kind","target","target_state"],"type":"object"}]},"maxItems":100000,"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","enum":["configured-secret","symlink-escape","size-limit","inventory-limit","unreadable","caller-excluded"],"type":"string"}},"required":["path","reason"],"type":"object"},"maxItems":100000,"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"maxLength":100,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"limitations":{"description":"Value for limitations.","items":{"maxLength":1024,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"manifests":{"description":"Value for manifests.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":10000,"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","maxLength":100,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"reason":{"description":"Value for reason.","maxLength":1024,"minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"maxItems":10000,"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","maxLength":200,"minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","maxLength":100,"minLength":1,"type":"string"},"importer_version":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for importer version."}},"required":["importer","importer_version","caller"],"type":"object"},"relationships":{"description":"Value for relationships.","items":{"additionalProperties":false,"properties":{"from_path":{"description":"Local filesystem path for from.","maxLength":4096,"minLength":1,"type":"string"},"kind":{"description":"Value for kind.","enum":["imports","requires","references","declares-module"],"type":"string"},"parse_state":{"description":"Value for parse state.","enum":["parsed","partial","unknown"],"type":"string"},"resolution":{"description":"Value for resolution.","enum":["internal","external","unresolved","unknown"],"type":"string"},"to":{"description":"Value for to.","maxLength":4096,"minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"maxItems":200000,"type":"array"},"root_alias":{"const":"$REFERENCE_ROOT","description":"Value for root alias.","type":"string"},"root_sha256":{"description":"Exact SHA-256 digest of root.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema":{"const":"HistoricalSourceGraph/v1","description":"Value for schema.","type":"string"},"vcs":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"dirty":{"anyOf":[{"type":"boolean"},{"type":"null"}],"description":"Value for dirty."},"head":{"description":"Value for head.","pattern":"^(?:[a-f0-9]{40}|[a-f0-9]{64})$","type":"string"},"kind":{"const":"git","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"none","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"},{"additionalProperties":false,"properties":{"dirty":{"description":"Value for dirty.","type":"null"},"head":{"description":"Value for head.","type":"null"},"kind":{"const":"unknown","description":"Value for kind.","type":"string"}},"required":["kind","head","dirty"],"type":"object"}]},{"type":"null"}],"description":"Value for vcs."}},"required":["schema","authority","root_alias","root_sha256","inventory_state","entries","relationships","parse_failures","exclusions","languages","manifests","vcs","provenance","limitations"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["reference","application_evidence_id"],"type":"object"}],"examples":[{"application_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","reference":{"authority":"historical-reference","entries":[{"classifications":["source"],"kind":"directory","limitations":[],"path":"src","tree_state":"enumerated"},{"classifications":["source"],"content_state":"hashed","kind":"file","language":"TypeScript","limitations":[],"path":"src/main.ts","sha256":"2222222222222222222222222222222222222222222222222222222222222222","size":128}],"exclusions":[],"inventory_state":"complete","languages":["TypeScript"],"limitations":[],"manifests":[],"parse_failures":[],"provenance":{"caller":"contract-example","importer":"rea","importer_version":"1"},"relationships":[],"root_alias":"$REFERENCE_ROOT","root_sha256":"683969414c3e674a368392213c78021322fb39609b0c57f346b22da6464b2110","schema":"HistoricalSourceGraph/v1","vcs":{"dirty":null,"head":null,"kind":"none"}}}],"type":"object"},"kind":"application","name":"compare_source_to_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"application":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["evidence_id","graph_id","root_artifact_sha256"],"type":"object"},"comparison_id":{"pattern":"^stbc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"application_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"candidate_evaluations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_application_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_candidate_evaluations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_candidate_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_source_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_unmapped_current_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reference_inventory_state":{"enum":["complete","partial","unknown"],"type":"string"},"retained_application_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"retained_source_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["status","reference_inventory_state","application_graph_status","retained_source_files","omitted_source_files","retained_application_nodes","omitted_application_nodes","candidate_evaluations","omitted_candidate_evaluations","omitted_candidate_references","omitted_unmapped_current_nodes"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1,"minItems":1,"type":"array"},"items":{"items":{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"confidence":{"enum":["exact","high","medium","low"],"type":"string"},"current_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"current_node_kind":{"enum":["package","installer","artifact","asar-entry","electron-main","electron-preload","electron-renderer","electron-utility","javascript-asset","javascript-chunk","javascript-module","source-map","source-module","browser-window","frame","target","context-bridge-api","ipc-channel","ipc-handler","worker","service-worker","endpoint","storage","native-addon","native-export","managed-assembly","managed-module","managed-type","managed-method","managed-field","managed-pinvoke-import","managed-native-implementation","runtime-script-instance","unknown"],"type":"string"},"score":{"maximum":300,"minimum":1,"type":"integer"},"signals":{"items":{"additionalProperties":false,"properties":{"current_values":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":64,"minItems":1,"type":"array"},"kind":{"enum":["exact-source-digest","source-map-original-path","current-path-exact","current-path-suffix","basename-match","language-extension"],"type":"string"},"source_value":{"maxLength":4096,"minLength":1,"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["kind","weight","source_value","current_values"],"type":"object"},"maxItems":6,"minItems":1,"type":"array"}},"required":["current_node_id","current_node_kind","score","confidence","signals"],"type":"object"},"maxItems":1000,"type":"array"},"confidence":{"enum":["exact","high","medium","unknown"],"type":"string"},"current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"mapping_id":{"pattern":"^stbc_item_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"source_language":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"source_path":{"maxLength":4096,"minLength":1,"type":"string"},"source_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","modified","removed","split","merged","duplicated","unknown"],"type":"string"}},"required":["mapping_id","source_path","source_sha256","source_language","status","confidence","current_node_ids","candidates","omitted_candidates","limitations"],"type":"object"},"maxItems":100000,"type":"array"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"reference":{"additionalProperties":false,"properties":{"inventory_state":{"enum":["complete","partial","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["root_sha256","inventory_state"],"type":"object"},"schema_version":{"const":1,"type":"number"},"scoring":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea-source-to-bundle-signals/v1","type":"string"},"minimum_candidate_score":{"const":20,"type":"number"},"weights":{"items":{"additionalProperties":false,"properties":{"signal":{"enum":["exact-source-digest","source-map-original-path","current-path-exact","current-path-suffix","basename-match","language-extension"],"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["signal","weight"],"type":"object"},"type":"array"}},"required":["algorithm","minimum_candidate_score","weights"],"type":"object"},"summary":{"additionalProperties":false,"properties":{"duplicated":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"merged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"modified":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"split":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","modified","removed","split","merged","duplicated","unknown"],"type":"object"},"unmapped_current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"}},"required":["schema_version","comparison_id","reference","application","scoring","summary","items","unmapped_current_node_ids","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Source To Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare bounded static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph, supplied as full Evidence or session Evidence IDs. Variants pair only by reciprocal unique literal discriminants; dynamic values, incomplete properties, and ambiguous variants remain unknown. Reports JSON Pointer changes and recommends controlled replay separately without executing JavaScript.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","anyOf":[{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left","right"],"type":"object"},{"additionalProperties":false,"properties":{"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left","right_evidence_id"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left_evidence_id","right"],"type":"object"},{"additionalProperties":false,"properties":{"left_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"left_export_name":{"description":"Value for left export name.","maxLength":4096,"minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"default":{"max_candidate_exports":100,"max_changes":1000,"max_return_variants":128},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_candidate_exports":{"default":100,"description":"Maximum permitted candidate exports for this operation.","maximum":1000,"minimum":1,"type":"integer"},"max_changes":{"default":1000,"description":"Maximum permitted changes for this operation.","maximum":10000,"minimum":1,"type":"integer"},"max_return_variants":{"default":128,"description":"Maximum permitted return variants for this operation.","maximum":1000,"minimum":1,"type":"integer"}},"type":"object"},"right_evidence_id":{"description":"Evidence ID returned earlier in this session","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_export_name":{"description":"Value for right export name.","maxLength":4096,"minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","maxLength":4096,"minLength":1,"type":"string"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left_evidence_id","right_evidence_id"],"type":"object"}],"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","left_export_name":"default","left_module_path":"parser.mjs","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111","right_export_name":"default","right_module_path":"parser.mjs"}],"type":"object"},"kind":"application","name":"compare_javascript_export_shapes","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"change_id":{"pattern":"^jesc_change_[a-f0-9]{64}$","type":"string"},"discriminant":{"anyOf":[{"additionalProperties":false,"properties":{"path":{"maxLength":4096,"type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["path","value"],"type":"object"},{"type":"null"}]},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"left":{"oneOf":[{"additionalProperties":false,"properties":{"availability":{"const":"absent","type":"string"}},"required":["availability"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"literal","type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":32,"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["availability","reason"],"type":"object"}]},"left_source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":20,"type":"array"},"path":{"maxLength":4096,"type":"string"},"right":{"oneOf":[{"additionalProperties":false,"properties":{"availability":{"const":"absent","type":"string"}},"required":["availability"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"literal","type":"string"},"value":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"maxLength":4096,"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"maxItems":32,"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["availability","reason"],"type":"object"}]},"right_source_range":{"anyOf":[{"additionalProperties":false,"properties":{"end":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"},"start":{"additionalProperties":false,"properties":{"column":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"line":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["line","column"],"type":"object"}},"required":["start","end"],"type":"object"},{"type":"null"}]},"status":{"enum":["added","removed","changed","unknown"],"type":"string"}},"required":["change_id","status","path","discriminant","left","right","left_source_range","right_source_range","evidence_links","limitations"],"type":"object"},"maxItems":10000,"type":"array"},"comparison_id":{"pattern":"^jesc_[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"left_omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left_omitted_property_coverage":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left_source_omitted_variants":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_left_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"omitted_right_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"paired_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"right_omitted_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_omitted_property_coverage":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"right_source_omitted_variants":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"},"unpaired_left_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unpaired_right_variants":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","left_graph_status","right_graph_status","paired_variants","unpaired_left_variants","unpaired_right_variants","omitted_left_variants","omitted_right_variants","left_source_omitted_variants","right_source_omitted_variants","left_omitted_fields","right_omitted_fields","left_omitted_property_coverage","right_omitted_property_coverage","omitted_candidates","omitted_changes"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"left":{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["selected","missing","ambiguous","unavailable"],"type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","status","selected_node_id","candidates","omitted_candidates"],"type":"object"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"right":{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"maxLength":4096,"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","module_path","export_name","matches_requested_module","matches_requested_export"],"type":"object"},"maxItems":1000,"type":"array"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"omitted_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"requested_export_name":{"maxLength":4096,"minLength":1,"type":"string"},"requested_module_path":{"maxLength":4096,"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["selected","missing","ambiguous","unavailable"],"type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","status","selected_node_id","candidates","omitted_candidates"],"type":"object"},"runtime_validation":{"additionalProperties":false,"properties":{"automatically_started":{"const":false,"type":"boolean"},"recommended_tool":{"const":"run_controlled_replay","type":"string"},"required_for":{"const":"runtime-semantics","type":"string"}},"required":["recommended_tool","automatically_started","required_for"],"type":"object"},"schema_version":{"const":1,"type":"number"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["added","removed","changed","unknown"],"type":"object"}},"required":["schema_version","comparison_id","left","right","summary","changes","coverage","evidence_links","limitations","runtime_validation"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Compare Javascript Export Shapes"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Plan or execute a content-bound extracted-module JavaScript replay inside the Linux Bubblewrap, seccomp, and cgroup boundary. Execution requires approved: true and the exact plan digest. Supports deterministic boundary cases and optional left/right differential comparison; observations have controlled-replay authority and do not claim real application runtime behavior.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"cases":[{"arguments":[""],"case_id":"empty"}],"determinism":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"left":{"entry_alias":"parser","entry_export":"default","modules":[{"alias":"parser","dependencies":{},"format":"esm","path":"/approved/parser.mjs","role":"module"}]},"limits":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"mode":"plan"}],"oneOf":[{"additionalProperties":false,"properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},{"additionalProperties":false,"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"execute","description":"Operation mode that selects the requested behavior.","type":"string"},"plan_digest":{"description":"Value for plan digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode","approved","plan_digest"],"type":"object"}],"type":"object"},"kind":"application","name":"run_controlled_replay","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","oneOf":[{"additionalProperties":false,"properties":{"evidence":{"type":"null"},"phase":{"const":"plan","type":"string"},"plan":{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"maxItems":0,"minItems":0,"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"phase":{"const":"execute","type":"string"},"plan":{"type":"null"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema1"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"minItems":1,"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"}],"type":"object"},"requiresSession":false,"title":"Run Controlled Replay"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Prepare a hash-bound Node/JavaScript characterization plan and deterministic reversible export transformation without executing target code. The exact source, selected byte range, runtime closure, sandbox profile, cases, and limits are committed for separate execution approval.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"expected_effect":"pure","instrumentation":{"artifact_path":"/approved/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"preparation_approved":true,"replay":{"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/approved/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}],"properties":{"expected_effect":{"description":"Expected effect used to reject stale or mismatched input.","enum":["pure","observation-only"],"type":"string"},"instrumentation":{"additionalProperties":false,"description":"Value for instrumentation.","properties":{"artifact_path":{"description":"Local filesystem path for artifact.","maxLength":4096,"minLength":1,"type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"selection":{"additionalProperties":false,"description":"Value for selection.","properties":{"byte_end":{"description":"Value for byte end.","maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"description":"Value for byte start.","maximum":9007199254740991,"minimum":0,"type":"integer"},"export_name":{"description":"Value for export name.","pattern":"^[A-Za-z_$][A-Za-z0-9_$]{0,199}$","type":"string"},"selected_sha256":{"description":"Exact SHA-256 digest of selected.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256","export_name"],"type":"object"}},"required":["artifact_path","artifact_sha256","selection"],"type":"object"},"preparation_approved":{"const":true,"description":"Explicit operator approval for preparation.","type":"boolean"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","maxLength":200,"minLength":1,"type":"string"}},"required":["preparation_approved","selected_alias","expected_effect","instrumentation","replay"],"type":"object"},"kind":"application","name":"prepare_node_characterization","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"phase":{"const":"preparation","type":"string"},"plan":{"additionalProperties":false,"properties":{"allowed_boundaries":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"authority":{"additionalProperties":false,"properties":{"execution_approved":{"const":false,"type":"boolean"},"network":{"enum":["none","loopback"],"type":"string"},"preparation_approved":{"const":true,"type":"boolean"},"provider_owned_process_only":{"const":true,"type":"boolean"}},"required":["preparation_approved","execution_approved","network","provider_owned_process_only"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"export_name":{"maxLength":1000,"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selector_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["callable_id","module_id","export_name","semantic_evidence_id","selector_sha256"],"type":"object"},"determinism":{"additionalProperties":false,"properties":{"clock":{"enum":["fixed","real"],"type":"string"},"identifiers":{"enum":["deterministic","runtime"],"type":"string"},"randomness":{"enum":["seeded","system"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["clock","randomness","identifiers","seed"],"type":"object"},"expected_effect":{"enum":["pure","observation-only"],"type":"string"},"isolated_home":{"maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":10000,"minimum":1,"type":"integer"},"max_files":{"maximum":100000,"minimum":0,"type":"integer"},"max_handles":{"maximum":100000,"minimum":0,"type":"integer"},"max_processes":{"maximum":1000,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"}},"required":["max_calls","max_processes","max_files","max_bytes","max_handles","timeout_ms","idle_timeout_ms"],"type":"object"},"plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"preparation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime":{"additionalProperties":false,"properties":{"executable_path":{"maxLength":4096,"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"maxLength":100,"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"version":{"maxLength":500,"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"working_directory":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["schema_version","plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism","authority"],"type":"object"},"replay":{"additionalProperties":false,"properties":{"evidence":{"type":"null"},"phase":{"const":"plan","type":"string"},"plan":{"additionalProperties":false,"properties":{"cases":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},"case_id":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["case_id","arguments","sha256"],"type":"object"},"type":"array"},"determinism":{"additionalProperties":false,"properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","type":"string"},"platform":{"const":"linux","default":"linux","type":"string"},"random_seed":{"default":0,"maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","type":"string"}},"required":["clock_iso","random_seed","locale","timezone","platform"],"type":"object"},"effects":{"items":{"type":"string"},"type":"array"},"filesystem":{"additionalProperties":false,"properties":{"host_writes":{"const":false,"type":"boolean"},"private_tmpfs_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["host_writes","private_tmpfs_bytes"],"type":"object"},"left":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"limits":{"additionalProperties":false,"properties":{"cpu_quota_percent":{"default":50,"maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":10000,"minimum":100,"type":"integer"}},"required":["wall_time_ms","memory_bytes","tasks","cpu_quota_percent","tmpfs_bytes","module_bytes","input_bytes","protocol_bytes","output_bytes","stderr_bytes","result_depth","result_nodes"],"type":"object"},"network":{"const":"none","type":"string"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"policy_version":{"const":"linux-bwrap-systemd-v1","type":"string"},"reproducer_export":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"const":"evidence_write","type":"string"},"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources","authority"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"byte_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"canonical_path":{"minLength":1,"type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"propertyNames":{"type":"string"},"type":"object"},"format":{"enum":["esm","commonjs-factory"],"type":"string"},"role":{"enum":["module","stub"],"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["alias","canonical_path","format","role","byte_count","sha256","dependencies"],"type":"object"},"type":"array"}},"required":["modules","entry_alias","entry_export"],"type":"object"},"runtime":{"additionalProperties":false,"properties":{"executable":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"read_only_files":{"items":{"additionalProperties":false,"properties":{"destination_path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_path":{"minLength":1,"type":"string"}},"required":["source_path","destination_path","sha256"],"type":"object"},"minItems":1,"type":"array"},"worker":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["executable","worker","read_only_files"],"type":"object"},"sandbox":{"additionalProperties":false,"properties":{"bubblewrap":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"seccomp_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"shell":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemctl":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"},"systemd_run":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["path","version","sha256"],"type":"object"}},"required":["bubblewrap","systemd_run","systemctl","shell","seccomp_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","plan_digest","policy_version","policy_sha256","network","filesystem","runtime","sandbox","left","cases","determinism","limits","effects","reproducer_export"],"type":"object"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema2"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"maxItems":0,"minItems":0,"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},"schema_version":{"const":1,"type":"number"},"transformation":{"additionalProperties":false,"properties":{"artifact_path":{"maxLength":4096,"minLength":1,"type":"string"},"inserted_ranges":{"items":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inserted_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"purpose":{"enum":["factory-prefix","export-binding","factory-suffix"],"type":"string"}},"required":["byte_start","byte_end","inserted_sha256","purpose"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"instrumented_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"instrumented_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"commonjs-factory-export-v1","type":"string"},"original_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_format":{"const":"commonjs-factory","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_range":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"selected_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256"],"type":"object"},"source_map":{"const":null,"type":"null"}},"required":["schema_version","kind","artifact_path","original_sha256","original_byte_length","instrumented_sha256","instrumented_byte_length","selected_range","inserted_ranges","output_format","source_map"],"type":"object"},"transformation_evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]}},"required":["schema_version","phase","plan","transformation","transformation_evidence","replay"],"type":"object"},"requiresSession":false,"title":"Prepare Node Characterization"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Recompute and execute one separately approved exact Node characterization plan in the owned controlled-replay boundary. Returns transformation, replay, cleanup, and provider-neutral characterization Evidence v2; stale plans fail before execution.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved_plan_sha256":"0000000000000000000000000000000000000000000000000000000000000000","execution_approved":true,"preparation":{"expected_effect":"pure","instrumentation":{"artifact_path":"/approved/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"preparation_approved":true,"replay":{"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/approved/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}}],"properties":{"approved_plan_sha256":{"description":"Exact SHA-256 digest of approved plan.","pattern":"^[a-f0-9]{64}$","type":"string"},"execution_approved":{"const":true,"description":"Explicit operator approval for execution.","type":"boolean"},"preparation":{"additionalProperties":false,"description":"Value for preparation.","properties":{"expected_effect":{"description":"Expected effect used to reject stale or mismatched input.","enum":["pure","observation-only"],"type":"string"},"instrumentation":{"additionalProperties":false,"description":"Value for instrumentation.","properties":{"artifact_path":{"description":"Local filesystem path for artifact.","maxLength":4096,"minLength":1,"type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"selection":{"additionalProperties":false,"description":"Value for selection.","properties":{"byte_end":{"description":"Value for byte end.","maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"description":"Value for byte start.","maximum":9007199254740991,"minimum":0,"type":"integer"},"export_name":{"description":"Value for export name.","pattern":"^[A-Za-z_$][A-Za-z0-9_$]{0,199}$","type":"string"},"selected_sha256":{"description":"Exact SHA-256 digest of selected.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256","export_name"],"type":"object"}},"required":["artifact_path","artifact_sha256","selection"],"type":"object"},"preparation_approved":{"const":true,"description":"Explicit operator approval for preparation.","type":"boolean"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"type":"array"},"case_id":{"description":"Value for case id.","maxLength":128,"minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"maxItems":128,"type":"array"},"determinism":{"additionalProperties":false,"default":{"clock_iso":"2000-01-01T00:00:00.000Z","locale":"en-US","platform":"linux","random_seed":0,"timezone":"UTC"},"description":"Value for determinism.","properties":{"clock_iso":{"default":"2000-01-01T00:00:00.000Z","description":"Value for clock iso.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"locale":{"const":"en-US","default":"en-US","description":"Value for locale.","type":"string"},"platform":{"const":"linux","default":"linux","description":"Value for platform.","type":"string"},"random_seed":{"default":0,"description":"Value for random seed.","maximum":4294967295,"minimum":0,"type":"integer"},"timezone":{"const":"UTC","default":"UTC","description":"Value for timezone.","type":"string"}},"type":"object"},"generator":{"additionalProperties":false,"description":"Value for generator.","properties":{"count":{"description":"Value for count.","maximum":64,"minimum":1,"type":"integer"},"preset":{"description":"Value for preset.","enum":["parser-boundaries","sanitizer-boundaries","clipboard-boundaries"],"type":"string"},"seed":{"description":"Value for seed.","maximum":4294967295,"minimum":0,"type":"integer"}},"required":["preset","seed","count"],"type":"object"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"},"limits":{"additionalProperties":false,"default":{"cpu_quota_percent":50,"input_bytes":262144,"memory_bytes":134217728,"module_bytes":4194304,"output_bytes":524288,"protocol_bytes":16777216,"result_depth":16,"result_nodes":10000,"stderr_bytes":32768,"tasks":8,"tmpfs_bytes":16777216,"wall_time_ms":3000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":100,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Bounded byte count for input.","maximum":1048576,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Bounded byte count for memory.","maximum":536870912,"minimum":16777216,"type":"integer"},"module_bytes":{"default":4194304,"description":"Bounded byte count for module.","maximum":16777216,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Bounded byte count for output.","maximum":4194304,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Bounded byte count for protocol.","maximum":67108864,"minimum":1048576,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":64,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":100000,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Bounded byte count for stderr.","maximum":262144,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":32,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Bounded byte count for tmpfs.","maximum":67108864,"minimum":1048576,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":10000,"minimum":100,"type":"integer"}},"type":"object"},"mode":{"const":"plan","description":"Operation mode that selects the requested behavior.","type":"string"},"reproducer_export":{"additionalProperties":false,"description":"Value for reproducer export.","properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"}},"required":["path","approved"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","maxLength":256,"minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"maxLength":256,"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"maxLength":256,"minLength":1,"type":"string"},"type":"object"},"format":{"description":"Declared input artifact format.","enum":["esm","commonjs-factory"],"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":4096,"pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","maxLength":200,"minLength":1,"type":"string"}},"required":["preparation_approved","selected_alias","expected_effect","instrumentation","replay"],"type":"object"}},"required":["execution_approved","approved_plan_sha256","preparation"],"type":"object"},"kind":"application","name":"execute_node_characterization","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"phase":{"const":"execution","type":"string"},"plan":{"additionalProperties":false,"properties":{"allowed_boundaries":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"maxLength":4096,"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"authority":{"additionalProperties":false,"properties":{"execution_approved":{"const":false,"type":"boolean"},"network":{"enum":["none","loopback"],"type":"string"},"preparation_approved":{"const":true,"type":"boolean"},"provider_owned_process_only":{"const":true,"type":"boolean"}},"required":["preparation_approved","execution_approved","network","provider_owned_process_only"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"export_name":{"maxLength":1000,"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selector_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"semantic_evidence_id":{"anyOf":[{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["callable_id","module_id","export_name","semantic_evidence_id","selector_sha256"],"type":"object"},"determinism":{"additionalProperties":false,"properties":{"clock":{"enum":["fixed","real"],"type":"string"},"identifiers":{"enum":["deterministic","runtime"],"type":"string"},"randomness":{"enum":["seeded","system"],"type":"string"},"seed":{"maximum":4294967295,"minimum":0,"type":"integer"}},"required":["clock","randomness","identifiers","seed"],"type":"object"},"expected_effect":{"enum":["pure","observation-only"],"type":"string"},"isolated_home":{"maxLength":4096,"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":10000,"minimum":1,"type":"integer"},"max_files":{"maximum":100000,"minimum":0,"type":"integer"},"max_handles":{"maximum":100000,"minimum":0,"type":"integer"},"max_processes":{"maximum":1000,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":300000,"minimum":1,"type":"integer"}},"required":["max_calls","max_processes","max_files","max_bytes","max_handles","timeout_ms","idle_timeout_ms"],"type":"object"},"plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"preparation_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"runtime":{"additionalProperties":false,"properties":{"executable_path":{"maxLength":4096,"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"maxLength":100,"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"version":{"maxLength":500,"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"schema_version":{"const":1,"type":"number"},"working_directory":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["schema_version","plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism","authority"],"type":"object"},"replay":{"additionalProperties":false,"properties":{"evidence":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema1"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"phase":{"const":"execute","type":"string"},"plan":{"type":"null"},"source_evidence":{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"residual_resources":{"items":{"type":"string"},"type":"array"},"state":{"enum":["complete","incomplete"],"type":"string"}},"required":["state","residual_resources"],"type":"object"},"comparison":{"items":{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"left_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"right_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"status":{"enum":["equal","changed","unknown"],"type":"string"}},"required":["case_id","status","left_index","right_index"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"outcomes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"return","type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"},"value":{"$ref":"#/$defs/__schema1"}},"required":["case_id","input_sha256","outcome","value","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"exception":{"additionalProperties":false,"properties":{"message":{"type":"string"},"name":{"type":"string"},"stack":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","message","stack"],"type":"object"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["exception","serialization_error","denied"],"type":"string"},"output_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","exception","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"enum":["timeout","oom","crash","cancelled"],"type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":false,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"},{"additionalProperties":false,"properties":{"case_id":{"type":"string"},"input_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"outcome":{"const":"protocol_error","type":"string"},"output_sha256":{"type":"null"},"truncated":{"const":true,"type":"boolean"}},"required":["case_id","input_sha256","outcome","output_sha256","truncated"],"type":"object"}]},"type":"array"},"plan_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"reproducer":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"state":{"const":"written","type":"string"}},"required":["state","path","sha256"],"type":"object"},{"additionalProperties":false,"properties":{"error":{"type":"string"},"path":{"type":"string"},"state":{"const":"failed","type":"string"}},"required":["state","path","error"],"type":"object"}]},{"type":"null"}]},"schema_version":{"const":1,"type":"number"},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["schema_version","plan_digest","outcomes","stderr","termination","cleanup","limitations","reproducer"],"type":"object"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links","normalized_result"],"type":"object"},"minItems":1,"type":"array"}},"required":["phase","plan","source_evidence","evidence"],"type":"object"},"schema_version":{"const":1,"type":"number"},"transformation":{"additionalProperties":false,"properties":{"artifact_path":{"maxLength":4096,"minLength":1,"type":"string"},"inserted_ranges":{"items":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"inserted_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"purpose":{"enum":["factory-prefix","export-binding","factory-suffix"],"type":"string"}},"required":["byte_start","byte_end","inserted_sha256","purpose"],"type":"object"},"maxItems":3,"minItems":3,"type":"array"},"instrumented_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"instrumented_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"kind":{"const":"commonjs-factory-export-v1","type":"string"},"original_byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"original_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"output_format":{"const":"commonjs-factory","type":"string"},"schema_version":{"const":1,"type":"number"},"selected_range":{"additionalProperties":false,"properties":{"byte_end":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"byte_start":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"selected_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["byte_start","byte_end","selected_sha256"],"type":"object"},"source_map":{"const":null,"type":"null"}},"required":["schema_version","kind","artifact_path","original_sha256","original_byte_length","instrumented_sha256","instrumented_byte_length","selected_range","inserted_ranges","output_format","source_map"],"type":"object"},"transformation_evidence":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"isolation":{"enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"locations":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"address","type":"string"}},"required":["kind","address"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"minLength":1,"type":"string"},"kind":{"const":"address-range","type":"string"},"start":{"minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"file-offset","type":"string"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"additionalProperties":false,"properties":{"end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","type":"string"},"start":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0"},"operation":{"minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"minLength":1,"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"schema_version":{"const":2,"type":"number"},"subject":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"digest":{"additionalProperties":false,"properties":{"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"type":"string"},"name":{"minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}]}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]}},"required":["schema_version","phase","plan","transformation","transformation_evidence","evidence","replay"],"type":"object"},"requiresSession":false,"title":"Execute Node Characterization"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Generate one deterministic page of a ReconstructionObligationLedger/v1 from an authenticated Evidence v2 bundle, reviewed obligations, and an explicit reconstruction manifest. Static candidates remain candidates; duplicate ownership, missing original or reconstruction cases, missing parser/type, weak verifier authority, unenumerated claims, contradictions, dependencies, and residual unknowns fail closed. Every page carries the same full-ledger closure digest and typed per-obligation diagnostics.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"limits":{"max_obligations":1000},"manifest":{"bindings":[],"contradictions":[],"schema_version":1},"page":{"limit":50,"offset":0},"reviewed_obligations":[]}],"properties":{"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"limits":{"additionalProperties":false,"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"max_obligations":{"description":"Maximum permitted obligations for this operation.","maximum":10000,"minimum":1,"type":"integer"}},"required":["max_obligations"],"type":"object"},"manifest":{"additionalProperties":false,"description":"Value for manifest.","properties":{"bindings":{"description":"Value for bindings.","items":{"additionalProperties":false,"properties":{"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"description":"Value for case kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"description":"Value for domain type.","maxLength":4096,"minLength":1,"type":"string"},"parser":{"description":"Value for parser.","maxLength":4096,"minLength":1,"type":"string"},"schema":{"description":"Value for schema.","maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}],"description":"Value for parser type."},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"description":"Value for command.","maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"description":"Value for nondeterminism.","properties":{"mode":{"description":"Operation mode that selects the requested behavior.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"description":"Value for specification.","maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence v2 identifier for the result observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}],"description":"Value for verifier."}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},"maxItems":10000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","bindings","contradictions"],"type":"object"},"page":{"additionalProperties":false,"description":"Value for page.","properties":{"limit":{"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"description":"Zero-based index of the first result to return.","maximum":10000,"minimum":0,"type":"integer"}},"required":["offset","limit"],"type":"object"},"reviewed_obligations":{"description":"Value for reviewed obligations.","items":{"additionalProperties":false,"properties":{"application_layer":{"description":"Value for application layer.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"dependency_obligation_ids":{"description":"Value for dependency obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"disposition":{"description":"Value for disposition.","enum":["active","blocked","out-of-scope"],"type":"string"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"description":"Value for obligation version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"required":{"description":"Value for required.","type":"boolean"},"required_case_kinds":{"description":"Value for required case kinds.","items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"description":"Value for required fixture authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"description":"Value for required next evidence.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"description":"Value for required original authority.","enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"description":"Value for required verifier authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"description":"Value for requires parser type.","type":"boolean"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"review_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the review observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for application node id."},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of artifact."},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for semantic node id."}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","application_layer","family","target","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","disposition","review_evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"}},"required":["evidence_bundle","reviewed_obligations","manifest","limits","page"],"type":"object"},"kind":"application","name":"build_reconstruction_obligation_ledger","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"closure_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"max_obligations":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"omitted_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial"],"type":"string"},"truncated":{"type":"boolean"}},"required":["status","truncated","omitted_count","max_obligations"],"type":"object"},"dependency_graph":{"items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"items":{"additionalProperties":false,"properties":{"application_layer":{"enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"},"state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"maxLength":4096,"minLength":1,"type":"string"},"parser":{"maxLength":4096,"minLength":1,"type":"string"},"schema":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}]},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"properties":{"mode":{"enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}]}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}]},"dependency_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"enum":["generated","reviewed"],"type":"string"},"required":{"type":"boolean"},"required_case_kinds":{"items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"type":"boolean"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"location":{"maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":100,"type":"array"},"ownership_graph":{"items":{"additionalProperties":false,"properties":{"module_path":{"maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"page":{"additionalProperties":false,"properties":{"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offset","limit","total","returned","next_offset"],"type":"object"},"reports":{"additionalProperties":false,"properties":{"contradicted_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","type":"string"},"schema_version":{"const":1,"type":"number"},"status":{"enum":["ready","open","failed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"by_application_layer":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_evidence_authority":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_status":{"items":{"additionalProperties":false,"properties":{"count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"required":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_open":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","required","verified","required_open","by_status","by_application_layer","by_evidence_authority"],"type":"object"}},"required":["schema","schema_version","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","evidence_links","limitations","page","obligations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Build Reconstruction Obligation Ledger"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate the fixed nine-stage public reconstruction journey into a deterministic ReconstructionReadinessReport/v1. Exact capability limits, provider routing, CLI/MCP status parity, bounded authority, partial-order comparison, contradictions, obligation closure, cleanup, and replay digests fail closed. Aggregate pass is emitted only when every required stage and check passes with attributable Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"capabilities":[{"authority_scopes":["investigation-input"],"available":true,"bounded":true,"capability_id":"analyze-javascript-application","limits":[{"name":"max-ast-nodes","unit":"count","value":2000000}],"side_effect":"reads-target","unavailable_reason":null}],"cleanup":[{"cancelled":true,"diagnostic_evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"owned_resources_remaining":0,"run_id":"run.cancelled"}],"client":{"name":"synthetic-mcp-client","negotiated_capabilities":["elicitation","progress","resources"],"version":"1"},"closure_history":[{"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","newly_verified_obligation_ids":[],"required_open":1,"sequence":0,"status":"open"},{"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","newly_verified_obligation_ids":["obl.readiness"],"required_open":0,"sequence":1,"status":"ready"}],"comparisons":[{"comparison_id":"comparison.concurrent","concurrent":true,"contradiction_ids":[],"deliberate_divergence_ref":null,"divergence_refs":[],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"partial-order","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"equivalent"},{"comparison_id":"comparison.divergence","concurrent":true,"contradiction_ids":[],"deliberate_divergence_ref":"/events/primary","divergence_refs":["/events/primary"],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"finite-traces","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"different"},{"comparison_id":"comparison.contradicted","concurrent":false,"contradiction_ids":["contradiction.artifact"],"deliberate_divergence_ref":null,"divergence_refs":[],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"schedule_semantics":"finite-traces","truncated":false,"unavailable_authority":false,"unstable":false,"verdict":"unknown"}],"contradictions":[{"affected_comparison_ids":["comparison.contradicted"],"contradiction_id":"contradiction.artifact","declared_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91"],"observed_sha256":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","policy":"record-and-continue"}],"delegation_checks":[{"candidate_id":"candidate.reconstructed","delegates_to_authority":false,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"]}],"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"}],"records":[{"authority":"controlled-replay","confidence":"observed","environment":null,"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"passed":true,"variant":"authority"},"operation":"run_reconstruction_readiness_fixture","parameters":{"variant":"authority"},"predicate_type":"rea.reconstruction-readiness-fixture/v1","provider":{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"},"raw_result":null,"schema_version":2,"subject":null},{"authority":"controlled-replay","confidence":"observed","environment":null,"evidence_id":"ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"passed":true,"variant":"contradiction"},"operation":"run_reconstruction_readiness_fixture","parameters":{"variant":"contradiction"},"predicate_type":"rea.reconstruction-readiness-fixture/v1","provider":{"id":"rea-readiness-fixture","name":"REA readiness fixture","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"scenarios":[{"authority":"controlled-replay","evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","operation":"run_reconstruction_readiness_fixture"},{"authority":"controlled-replay","evidence_id":"ev_b05c548cf5d0ba30bb6043ec26e583b551e793c636b747e1ed8630c511439f91","operation":"run_reconstruction_readiness_fixture"}],"unknowns":[]},"fixtures":[{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.native"],"environment_id":"environment.synthetic","fixture_id":"fixture.native","kind":"native"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.javascript-cli"],"environment_id":"environment.synthetic","fixture_id":"fixture.javascript-cli","kind":"javascript-cli"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.electron"],"environment_id":"environment.synthetic","fixture_id":"fixture.electron","kind":"electron"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.incomplete-reconstruction"],"environment_id":"environment.synthetic","fixture_id":"fixture.incomplete-reconstruction","kind":"incomplete-reconstruction"},{"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","deliberate_faults":["fault.broken-runtime"],"environment_id":"environment.synthetic","fixture_id":"fixture.broken-runtime","kind":"broken-runtime"}],"grants":[{"decision":"denied","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"grant_id":"grant.denied","launched_process":false,"scope":"process-capture"},{"decision":"granted","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"grant_id":"grant.session","launched_process":true,"scope":"process-capture"}],"identity":{"catalog_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","cli_version":"2.4.0","providers":[{"digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","provider_id":"javascript-application","reason_code":null,"state":"available","version":"1"},{"digest":null,"provider_id":"broken-runtime-probe","reason_code":"host-runtime-linker-failure","state":"broken-host","version":null}],"server_version":"2.4.0","skill_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","versions":[{"component":"rea-cli","digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","remediation":null,"state":"current","version":"2.4.0"},{"component":"rea-server","digest":"bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb","remediation":"Restart the connected MCP server.","state":"stale","version":"2.3.0"},{"component":"rea-server","digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","remediation":null,"state":"current","version":"2.4.0"}]},"obligation_ledger":{"closure_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","coverage":{"max_obligations":100,"omitted_count":0,"status":"complete","truncated":false},"dependency_graph":[],"evidence_links":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"ledger_id":"rol_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","limitations":[],"obligations":[{"application_layer":"process","authority_references":[{"authority":"controlled-replay","evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","location":"/fixture","state":"observed"}],"binding":{"fixtures":[{"authority":"packaged-process","case_kind":"positive","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.positive"},{"authority":"packaged-process","case_kind":"negative","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.negative"},{"authority":"packaged-process","case_kind":"malformed","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.malformed"},{"authority":"packaged-process","case_kind":"cancellation","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.cancellation"},{"authority":"packaged-process","case_kind":"teardown","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"fixture_id":"fixture.teardown"}],"obligation_id":"obl.readiness","original_cases":[{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"positive","location":"/original/positive"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"negative","location":"/original/negative"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"malformed","location":"/original/malformed"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"cancellation","location":"/original/cancellation"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"teardown","location":"/original/teardown"}],"owner":{"module_path":"src/readiness.ts","owner_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","symbol":"runReadiness"},"parser_type":null,"verifier":{"authority":"packaged-process","claim_id":"claim.readiness","command":"npm run verify:readiness","enumerated_obligation_ids":["obl.readiness"],"nondeterminism":{"mode":"partial-order","specification":"Startup precedes teardown."},"result_evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","status":"pass","verifier_id":"verifier.readiness"}},"dependency_obligation_ids":[],"diagnostics":[],"family":"packaged-process-lifecycle","obligation_id":"obl.readiness","obligation_version":1,"observed_cases":[{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"positive","location":"/original/positive"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"negative","location":"/original/negative"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"malformed","location":"/original/malformed"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"cancellation","location":"/original/cancellation"},{"evidence_id":"ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9","kind":"teardown","location":"/original/teardown"}],"origin":"reviewed","required":true,"required_case_kinds":["positive","negative","malformed","cancellation","teardown"],"required_fixture_authority":"packaged-process","required_next_evidence":[],"required_original_authority":"process","required_verifier_authority":"packaged-process","requires_parser_type":false,"residual_unknown_ids":[],"source_state":"observed","status":"verified","target":{"application_node_id":null,"artifact_sha256":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","location":"/fixture","semantic_node_id":null},"title":"Preserve the packaged readiness fixture lifecycle","unavailable_authority":[]}],"ownership_graph":[{"module_path":"src/readiness.ts","obligation_id":"obl.readiness","symbol":"runReadiness"}],"reports":{"contradicted_obligation_ids":[],"missing_owner_obligation_ids":[],"missing_verifier_obligation_ids":[],"residual_unknown_ids":[]},"schema":"ReconstructionObligationLedger","schema_version":1,"status":"ready","summary":{"by_application_layer":[{"count":0,"key":"cli"},{"count":0,"key":"protocol"},{"count":0,"key":"electron"},{"count":0,"key":"persistence"},{"count":1,"key":"process"},{"count":0,"key":"runtime"},{"count":0,"key":"packaging"},{"count":0,"key":"native-abi"},{"count":0,"key":"application"},{"count":0,"key":"other"}],"by_evidence_authority":[{"count":0,"key":"candidate"},{"count":1,"key":"observed"},{"count":0,"key":"reviewed"},{"count":0,"key":"unknown"}],"by_status":[{"count":0,"key":"unowned"},{"count":0,"key":"characterized"},{"count":0,"key":"implemented"},{"count":1,"key":"verified"},{"count":0,"key":"contradicted"},{"count":0,"key":"blocked"},{"count":0,"key":"out-of-scope"},{"count":0,"key":"unknown"}],"required":1,"required_open":0,"total":1,"verified":1}},"operation_outcomes":[{"call_kind":"valid","cli_exit_code":0,"error_code":null,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":true,"mcp_status":null,"operation":"inspect-artifact","recovered":false,"sequence":0,"surface":"cli"},{"call_kind":"valid","cli_exit_code":null,"error_code":null,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":true,"mcp_status":"success","operation":"inspect-artifact","recovered":false,"sequence":1,"surface":"mcp"},{"call_kind":"permission","cli_exit_code":2,"error_code":"permission-required","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":false,"mcp_status":null,"operation":"capture-process","recovered":true,"sequence":2,"surface":"cli"},{"call_kind":"permission","cli_exit_code":null,"error_code":"permission-required","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_success":false,"mcp_status":"non-success","operation":"capture-process","recovered":true,"sequence":3,"surface":"mcp"}],"replay":{"deterministic":true,"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"expected_source_digest":null,"stale_input_detected":true,"tamper_detected":true},"schema_version":1,"stages":[{"capability_issue":null,"checks":[{"check_id":"target-free-start","detail":"Synthetic conformance proved target-free-start.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"artifact-inventory","detail":"Synthetic conformance proved artifact-inventory.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"compatible-workflow-selected","detail":"Synthetic conformance proved compatible-workflow-selected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"limits-visible","detail":"Synthetic conformance proved limits-visible.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"discover-classify","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"broken-runtime-distinguished","detail":"Synthetic conformance proved broken-runtime-distinguished.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"version-skew-detected","detail":"Synthetic conformance proved version-skew-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"revision-changed-after-recovery","detail":"Synthetic conformance proved revision-changed-after-recovery.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"diagnose-environment","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"missing-scope-reported","detail":"Synthetic conformance proved missing-scope-reported.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"narrow-grant-resumed","detail":"Synthetic conformance proved narrow-grant-resumed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"expansion-reprompted","detail":"Synthetic conformance proved expansion-reprompted.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"denial-launched-nothing","detail":"Synthetic conformance proved denial-launched-nothing.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"acquire-authority","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"native-routed","detail":"Synthetic conformance proved native-routed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"javascript-routed","detail":"Synthetic conformance proved javascript-routed.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"unknowns-preserved","detail":"Synthetic conformance proved unknowns-preserved.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"static-analysis","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"predicate-driven","detail":"Synthetic conformance proved predicate-driven.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"descendant-settled","detail":"Synthetic conformance proved descendant-settled.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"electron-correlated","detail":"Synthetic conformance proved electron-correlated.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"cancel-cleanup-preserved-evidence","detail":"Synthetic conformance proved cancel-cleanup-preserved-evidence.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"reactive-scenarios","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"partial-order-accepted","detail":"Synthetic conformance proved partial-order-accepted.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"divergence-localized","detail":"Synthetic conformance proved divergence-localized.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"incomplete-is-unknown","detail":"Synthetic conformance proved incomplete-is-unknown.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"compare-authority-candidate","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"record-and-continue","detail":"Synthetic conformance proved record-and-continue.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"affected-equivalence-blocked","detail":"Synthetic conformance proved affected-equivalence-blocked.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"unaffected-comparison-continued","detail":"Synthetic conformance proved unaffected-comparison-continued.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"preserve-contradictions","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"incomplete-detected","detail":"Synthetic conformance proved incomplete-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"incremental-verifier-closure","detail":"Synthetic conformance proved incremental-verifier-closure.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"delegation-rejected","detail":"Synthetic conformance proved delegation-rejected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"verify-reconstruction-closure","status":"pass"},{"capability_issue":null,"checks":[{"check_id":"cli-mcp-parity","detail":"Synthetic conformance proved cli-mcp-parity.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"failure-status-parity","detail":"Synthetic conformance proved failure-status-parity.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"deterministic-replay","detail":"Synthetic conformance proved deterministic-replay.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"tamper-detected","detail":"Synthetic conformance proved tamper-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"},{"check_id":"stale-input-detected","detail":"Synthetic conformance proved stale-input-detected.","evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"status":"pass"}],"evidence_ids":["ev_348db7991de053d7b032e8224d07368d0fdb33ee5794588276ba06bfe3a147c9"],"next_action":null,"required":true,"stage_id":"export-replay","status":"pass"}],"workflow_candidates":[{"compatibility":"compatible","fixture_id":"fixture.native","invoked":true,"provider_id":"provider.native","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.native"},{"compatibility":"compatible","fixture_id":"fixture.javascript-cli","invoked":true,"provider_id":"provider.javascript-cli","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.javascript-cli"},{"compatibility":"compatible","fixture_id":"fixture.electron","invoked":true,"provider_id":"provider.electron","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.electron"},{"compatibility":"compatible","fixture_id":"fixture.incomplete-reconstruction","invoked":true,"provider_id":"provider.incomplete-reconstruction","reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.incomplete-reconstruction"},{"compatibility":"compatible","fixture_id":"fixture.broken-runtime","invoked":true,"provider_id":null,"reason_code":"compatible-artifact-family","selected":true,"workflow_id":"workflow.broken-runtime"}]}],"properties":{"capabilities":{"description":"Value for capabilities.","items":{"additionalProperties":false,"properties":{"authority_scopes":{"description":"Value for authority scopes.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"available":{"description":"Value for available.","type":"boolean"},"bounded":{"description":"Value for bounded.","type":"boolean"},"capability_id":{"description":"Value for capability id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"limits":{"description":"Bounded resource-consumption and result-size limits for this operation.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"unit":{"description":"Value for unit.","enum":["count","bytes","milliseconds","ratio"],"type":"string"},"value":{"description":"Value for value.","minimum":0,"type":"number"}},"required":["name","value","unit"],"type":"object"},"maxItems":100,"type":"array"},"side_effect":{"description":"Value for side effect.","enum":["none","reads-target","launches-process","writes-workspace","network-observation"],"type":"string"},"unavailable_reason":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for unavailable reason."}},"required":["capability_id","available","bounded","side_effect","authority_scopes","limits","unavailable_reason"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"cleanup":{"description":"Value for cleanup.","items":{"additionalProperties":false,"properties":{"cancelled":{"description":"Value for cancelled.","type":"boolean"},"diagnostic_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the diagnostic observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"owned_resources_remaining":{"description":"Value for owned resources remaining.","maximum":9007199254740991,"minimum":0,"type":"integer"},"run_id":{"description":"Value for run id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["run_id","cancelled","owned_resources_remaining","diagnostic_evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"client":{"additionalProperties":false,"description":"Value for client.","properties":{"name":{"description":"Exact name used by this operation.","maxLength":4096,"minLength":1,"type":"string"},"negotiated_capabilities":{"description":"Value for negotiated capabilities.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"version":{"description":"Value for version.","maxLength":4096,"minLength":1,"type":"string"}},"required":["name","version","negotiated_capabilities"],"type":"object"},"closure_history":{"description":"Value for closure history.","items":{"additionalProperties":false,"properties":{"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"ledger_digest":{"description":"Value for ledger digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"newly_verified_obligation_ids":{"description":"Value for newly verified obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"required_open":{"description":"Value for required open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["ready","open","failed","unknown"],"type":"string"}},"required":["sequence","ledger_digest","status","required_open","newly_verified_obligation_ids","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":2,"type":"array"},"comparisons":{"description":"Validated comparison Evidence records to aggregate.","items":{"additionalProperties":false,"properties":{"comparison_id":{"description":"Value for comparison id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"concurrent":{"description":"Value for concurrent.","type":"boolean"},"contradiction_ids":{"description":"Value for contradiction ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"type":"array"},"deliberate_divergence_ref":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for deliberate divergence ref."},"divergence_refs":{"description":"Value for divergence refs.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"schedule_semantics":{"description":"Value for schedule semantics.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"},"unavailable_authority":{"description":"Value for unavailable authority.","type":"boolean"},"unstable":{"description":"Value for unstable.","type":"boolean"},"verdict":{"description":"Value for verdict.","enum":["equivalent","different","unknown"],"type":"string"}},"required":["comparison_id","verdict","schedule_semantics","concurrent","truncated","unavailable_authority","unstable","deliberate_divergence_ref","divergence_refs","contradiction_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"affected_comparison_ids":{"description":"Value for affected comparison ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"contradiction_id":{"description":"Value for contradiction id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"declared_sha256":{"description":"Exact SHA-256 digest of declared.","pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":2,"type":"array"},"observed_sha256":{"description":"Exact SHA-256 digest of observed.","pattern":"^[a-f0-9]{64}$","type":"string"},"policy":{"const":"record-and-continue","description":"Value for policy.","type":"string"}},"required":["contradiction_id","declared_sha256","observed_sha256","policy","affected_comparison_ids","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"delegation_checks":{"description":"Value for delegation checks.","items":{"additionalProperties":false,"properties":{"candidate_id":{"description":"Value for candidate id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"delegates_to_authority":{"description":"Value for delegates to authority.","type":"boolean"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"}},"required":["candidate_id","delegates_to_authority","evidence_ids"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"deliberate_faults":{"description":"Value for deliberate faults.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"environment_id":{"description":"Value for environment id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"description":"Value for kind.","enum":["native","javascript-cli","electron","incomplete-reconstruction","broken-runtime"],"type":"string"}},"required":["fixture_id","kind","artifact_sha256","environment_id","deliberate_faults"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"grants":{"description":"Value for grants.","items":{"additionalProperties":false,"properties":{"decision":{"description":"Value for decision.","enum":["granted","denied","cancelled","restart-required"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"grant_id":{"description":"Value for grant id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"launched_process":{"description":"Value for launched process.","type":"boolean"},"scope":{"description":"Value for scope.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["grant_id","scope","decision","launched_process","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"identity":{"additionalProperties":false,"description":"Value for identity.","properties":{"catalog_digest":{"description":"Value for catalog digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"cli_version":{"description":"Value for cli version.","maxLength":4096,"minLength":1,"type":"string"},"providers":{"description":"Value for providers.","items":{"additionalProperties":false,"properties":{"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for digest."},"provider_id":{"description":"Exact deep-analysis provider ID, or automatic selection when omitted.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"reason_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for reason code."},"state":{"description":"Value for state.","enum":["available","unavailable","incompatible","broken-host"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["provider_id","version","digest","state","reason_code"],"type":"object"},"maxItems":100,"type":"array"},"server_version":{"description":"Value for server version.","maxLength":4096,"minLength":1,"type":"string"},"skill_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for skill digest."},"versions":{"description":"Value for versions.","items":{"additionalProperties":false,"properties":{"component":{"description":"Value for component.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for digest."},"remediation":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for remediation."},"state":{"description":"Value for state.","enum":["current","stale","unavailable"],"type":"string"},"version":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["component","version","digest","state","remediation"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["cli_version","server_version","catalog_digest","skill_digest","versions","providers"],"type":"object"},"obligation_ledger":{"additionalProperties":false,"description":"Value for obligation ledger.","properties":{"closure_digest":{"description":"Value for closure digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","properties":{"max_obligations":{"description":"Maximum permitted obligations for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"omitted_count":{"description":"Value for omitted count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["complete","partial"],"type":"string"},"truncated":{"description":"Value for truncated.","type":"boolean"}},"required":["status","truncated","omitted_count","max_obligations"],"type":"object"},"dependency_graph":{"description":"Value for dependency graph.","items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"description":"Value for depends on obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"ledger_id":{"description":"Value for ledger id.","pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"description":"Value for limitations.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":1000,"type":"array"},"obligations":{"description":"Value for obligations.","items":{"additionalProperties":false,"properties":{"application_layer":{"description":"Value for application layer.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"},"authority_references":{"description":"Value for authority references.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"state":{"description":"Value for state.","enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"},"binding":{"anyOf":[{"additionalProperties":false,"properties":{"fixtures":{"description":"Value for fixtures.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"case_kind":{"description":"Value for case kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"description":"Value for domain type.","maxLength":4096,"minLength":1,"type":"string"},"parser":{"description":"Value for parser.","maxLength":4096,"minLength":1,"type":"string"},"schema":{"description":"Value for schema.","maxLength":4096,"minLength":1,"type":"string"}},"required":["parser","schema","domain_type"],"type":"object"},{"type":"null"}],"description":"Value for parser type."},"verifier":{"anyOf":[{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"command":{"description":"Value for command.","maxLength":4096,"minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"description":"Value for nondeterminism.","properties":{"mode":{"description":"Operation mode that selects the requested behavior.","enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"description":"Value for specification.","maxLength":4096,"minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence v2 identifier for the result observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_id","command","authority","status","result_evidence_id","enumerated_obligation_ids","nondeterminism"],"type":"object"},{"type":"null"}],"description":"Value for verifier."}},"required":["obligation_id","owner","parser_type","original_cases","fixtures","verifier"],"type":"object"},{"type":"null"}],"description":"Value for binding."},"dependency_obligation_ids":{"description":"Value for dependency obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"diagnostics":{"description":"Value for diagnostics.","items":{"additionalProperties":false,"properties":{"code":{"description":"Value for code.","enum":["duplicate-definition","missing-owner","ambiguous-owner","missing-parser-type","missing-original-case","weak-original-case-authority","missing-case","weak-fixture-authority","missing-verifier","verifier-does-not-enumerate","missing-verifier-result","weak-verifier-authority","verifier-failed","static-only","contradiction","contradiction-evidence-missing","residual-unknown","dependency-missing","dependency-open","unavailable-authority","blocked","out-of-scope"],"type":"string"},"detail":{"description":"Requested response detail level.","maxLength":4096,"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"maxItems":1000,"type":"array"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"obligation_version":{"description":"Value for obligation version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_cases":{"description":"Value for observed cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"kind":{"description":"Value for kind.","enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"maxItems":100,"type":"array"},"origin":{"description":"Value for origin.","enum":["generated","reviewed"],"type":"string"},"required":{"description":"Value for required.","type":"boolean"},"required_case_kinds":{"description":"Value for required case kinds.","items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_fixture_authority":{"description":"Value for required fixture authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"required_next_evidence":{"description":"Value for required next evidence.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"},"required_original_authority":{"description":"Value for required original authority.","enum":["static","runtime","process","external"],"type":"string"},"required_verifier_authority":{"description":"Value for required verifier authority.","enum":["unit","integration","protocol","renderer","packaged-process","native-abi","live-observation","external"],"type":"string"},"requires_parser_type":{"description":"Value for requires parser type.","type":"boolean"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"source_state":{"description":"Value for source state.","enum":["candidate","observed","reviewed","unknown"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"},"target":{"additionalProperties":false,"description":"Value for target.","properties":{"application_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for application node id."},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of artifact."},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"semantic_node_id":{"anyOf":[{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for semantic node id."}},"required":["artifact_sha256","application_node_id","semantic_node_id","location"],"type":"object"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"maxLength":4096,"minLength":1,"type":"string"},"maxItems":100,"type":"array"}},"required":["obligation_id","obligation_version","title","origin","application_layer","family","target","authority_references","source_state","observed_cases","required","required_case_kinds","required_original_authority","required_fixture_authority","required_verifier_authority","requires_parser_type","dependency_obligation_ids","residual_unknown_ids","unavailable_authority","required_next_evidence","binding","status","diagnostics"],"type":"object"},"maxItems":10000,"type":"array"},"ownership_graph":{"description":"Value for ownership graph.","items":{"additionalProperties":false,"properties":{"module_path":{"description":"Local filesystem path for module.","maxLength":4096,"minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"symbol":{"description":"Value for symbol.","maxLength":1024,"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"reports":{"additionalProperties":false,"description":"Value for reports.","properties":{"contradicted_obligation_ids":{"description":"Value for contradicted obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"description":"Value for missing owner obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"description":"Value for missing verifier obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"type":"array"}},"required":["missing_owner_obligation_ids","missing_verifier_obligation_ids","contradicted_obligation_ids","residual_unknown_ids"],"type":"object"},"schema":{"const":"ReconstructionObligationLedger","description":"Value for schema.","type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"status":{"description":"Current lifecycle or verification status.","enum":["ready","open","failed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"description":"Concise evidence-backed summary of the result.","properties":{"by_application_layer":{"description":"Value for by application layer.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["cli","protocol","electron","persistence","process","runtime","packaging","native-abi","application","other"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_evidence_authority":{"description":"Value for by evidence authority.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"by_status":{"description":"Value for by status.","items":{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":9007199254740991,"minimum":0,"type":"integer"},"key":{"description":"Value for key.","enum":["unowned","characterized","implemented","verified","contradicted","blocked","out-of-scope","unknown"],"type":"string"}},"required":["key","count"],"type":"object"},"type":"array"},"required":{"description":"Value for required.","maximum":9007199254740991,"minimum":0,"type":"integer"},"required_open":{"description":"Value for required open.","maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"description":"Value for total.","maximum":9007199254740991,"minimum":0,"type":"integer"},"verified":{"description":"Value for verified.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","required","verified","required_open","by_status","by_application_layer","by_evidence_authority"],"type":"object"}},"required":["schema","schema_version","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","obligations","evidence_links","limitations"],"type":"object"},"operation_outcomes":{"description":"Value for operation outcomes.","items":{"additionalProperties":false,"properties":{"call_kind":{"description":"Value for call kind.","enum":["valid","malformed","over-limit","incompatible-provider","setup","permission","operation"],"type":"string"},"cli_exit_code":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for cli exit code."},"error_code":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for error code."},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_success":{"description":"Expected success used to reject stale or mismatched input.","type":"boolean"},"mcp_status":{"anyOf":[{"enum":["success","non-success"],"type":"string"},{"type":"null"}],"description":"Value for mcp status."},"operation":{"description":"Value for operation.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"recovered":{"description":"Value for recovered.","type":"boolean"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":0,"type":"integer"},"surface":{"description":"Value for surface.","enum":["cli","mcp"],"type":"string"}},"required":["sequence","operation","surface","call_kind","expected_success","cli_exit_code","mcp_status","error_code","recovered","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"replay":{"additionalProperties":false,"description":"Value for replay.","properties":{"deterministic":{"description":"Value for deterministic.","type":"boolean"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_source_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Expected source digest used to reject stale or mismatched input."},"stale_input_detected":{"description":"Value for stale input detected.","type":"boolean"},"tamper_detected":{"description":"Value for tamper detected.","type":"boolean"}},"required":["expected_source_digest","deterministic","tamper_detected","stale_input_detected","evidence_ids"],"type":"object"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"stages":{"description":"Value for stages.","items":{"additionalProperties":false,"properties":{"capability_issue":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Value for capability issue."},"checks":{"description":"Value for checks.","items":{"additionalProperties":false,"properties":{"check_id":{"description":"Value for check id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"detail":{"description":"Requested response detail level.","maxLength":4096,"minLength":1,"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["check_id","status","detail","evidence_ids"],"type":"object"},"maxItems":100,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"next_action":{"anyOf":[{"maxLength":4096,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for next action."},"required":{"description":"Value for required.","type":"boolean"},"stage_id":{"description":"Value for stage id.","enum":["discover-classify","diagnose-environment","acquire-authority","static-analysis","reactive-scenarios","compare-authority-candidate","preserve-contradictions","verify-reconstruction-closure","export-replay"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"}},"required":["stage_id","required","status","capability_issue","next_action","evidence_ids","checks"],"type":"object"},"maxItems":9,"minItems":9,"type":"array"},"workflow_candidates":{"description":"Value for workflow candidates.","items":{"additionalProperties":false,"properties":{"compatibility":{"description":"Value for compatibility.","enum":["compatible","incompatible","unavailable"],"type":"string"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"invoked":{"description":"Value for invoked.","type":"boolean"},"provider_id":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},{"type":"null"}],"description":"Exact deep-analysis provider ID, or automatic selection when omitted."},"reason_code":{"description":"Value for reason code.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"selected":{"description":"Value for selected.","type":"boolean"},"workflow_id":{"description":"Value for workflow id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["fixture_id","workflow_id","provider_id","selected","invoked","compatibility","reason_code"],"type":"object"},"maxItems":1000,"minItems":1,"type":"array"}},"required":["schema_version","identity","client","capabilities","fixtures","workflow_candidates","grants","evidence_bundle","comparisons","contradictions","obligation_ledger","operation_outcomes","cleanup","closure_history","delegation_checks","replay","stages"],"type":"object"},"kind":"application","name":"evaluate_reconstruction_readiness","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"metrics":{"additionalProperties":false,"properties":{"cleanup_leak_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"divergence_localization_precision":{"maximum":1,"minimum":0,"type":"number"},"failed_calls_before_prerequisites":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"false_equivalence_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"first_valid_workflow_selection_rate":{"maximum":1,"minimum":0,"type":"number"},"incompatible_provider_invocations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"malformed_or_over_limit_call_rate":{"maximum":1,"minimum":0,"type":"number"},"nondeterministic_replay_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"recovery_rate":{"maximum":1,"minimum":0,"type":"number"},"unowned_obligation_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["first_valid_workflow_selection_rate","malformed_or_over_limit_call_rate","incompatible_provider_invocations","failed_calls_before_prerequisites","recovery_rate","divergence_localization_precision","false_equivalence_count","unowned_obligation_count","cleanup_leak_count","nondeterministic_replay_count"],"type":"object"},"report_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"report_id":{"pattern":"^rr_[a-f0-9]{64}$","type":"string"},"report_resource_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}\\\\/reconstruction-readiness-report$","type":"string"},"schema":{"const":"ReconstructionReadinessReport","type":"string"},"schema_version":{"const":1,"type":"number"},"source_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"failed_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"passed_required_stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"stages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_findings":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["stages","required_stages","passed_required_stages","findings","failed_findings","unknown_findings"],"type":"object"}},"required":["schema","schema_version","report_id","source_digest","report_digest","status","summary","metrics","report_resource_uri"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":false,"title":"Evaluate Reconstruction Readiness"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Atomically commit one canonical evidence-backed reconstruction coverage workspace revision under an approved root. CAS revisions reject lost updates; every Evidence and residual-unknown reference must resolve in the embedded canonical bundle.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"expected_revision":null,"workspace":{"artifacts":[],"boundaries":[],"claims":[],"contradictions":[],"evidence_bundle":{"artifacts":[],"bundle_version":2,"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"name":"replacement","owners":[],"package_proofs":[],"previous_revision_sha256":null,"residual_unknown_ids":[],"revision":1,"revision_sha256":"0000000000000000000000000000000000000000000000000000000000000000","schema_version":1,"surfaces":[],"verifier_contracts":[],"verifier_results":[],"workspace_id":"rcw_0000000000000000000000000000000000000000000000000000000000000000"},"workspace_path":"/approved/coverage.json"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_revision":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}],"description":"Expected revision used to reject stale or mismatched input."},"workspace":{"additionalProperties":false,"description":"Value for workspace.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"additionalProperties":false,"properties":{"artifact_id":{"description":"Value for artifact id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"artifact_sha256":{"description":"Exact SHA-256 digest of artifact.","pattern":"^[a-f0-9]{64}$","type":"string"},"environment_sha256":{"description":"Exact SHA-256 digest of environment.","pattern":"^[a-f0-9]{64}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"version":{"description":"Value for version.","maxLength":500,"minLength":1,"type":"string"}},"required":["artifact_id","artifact_sha256","version","environment_sha256","evidence_ids"],"type":"object"},"maxItems":1000,"type":"array"},"boundaries":{"description":"Value for boundaries.","items":{"additionalProperties":false,"properties":{"allowed_dispositions":{"description":"Value for allowed dispositions.","items":{"enum":["external","non-goal"],"type":"string"},"maxItems":2,"type":"array"},"allowed_unknown_ids":{"description":"Value for allowed unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"required_claim_ids":{"description":"Value for required claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"required_package_proof_kinds":{"description":"Value for required package proof kinds.","items":{"enum":["build","clean-install","package-contents","runtime-routing","authority-independence"],"type":"string"},"maxItems":5,"minItems":1,"type":"array"},"required_surface_ids":{"description":"Value for required surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"minItems":1,"type":"array"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["boundary_id","title","required_surface_ids","required_claim_ids","required_package_proof_kinds","allowed_dispositions","allowed_unknown_ids"],"type":"object"},"maxItems":1000,"type":"array"},"claims":{"description":"Value for claims.","items":{"additionalProperties":false,"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"kind":{"description":"Value for kind.","maxLength":100,"minLength":1,"type":"string"},"required_authority":{"description":"Value for required authority.","enum":["shipped-artifact","controlled-replay","live-observation","external"],"type":"string"},"required_dimensions":{"description":"Value for required dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","kind","surface_ids","required_dimensions","required_authority"],"type":"object"},"maxItems":10000,"type":"array"},"contradictions":{"description":"Value for contradictions.","items":{"additionalProperties":false,"properties":{"claim_ids":{"description":"Value for claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"contradiction_id":{"description":"Value for contradiction id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":2,"type":"array"},"status":{"description":"Current lifecycle or verification status.","enum":["active","resolved"],"type":"string"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"}},"required":["contradiction_id","status","surface_ids","claim_ids","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"evidence_bundle":{"description":"Value for evidence bundle.","properties":{"artifacts":{"description":"Value for artifacts.","items":{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"}},"required":["digest","format","architecture"],"type":"object"},"type":"array"},"bundle_version":{"const":2,"description":"Value for bundle version.","type":"number"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"description":"Value for environments.","items":{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},"type":"array"},"providers":{"description":"Value for providers.","items":{"properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"type":"array"},"records":{"description":"Value for records.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links","analysis_profile"],"type":"object"},{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"description":"Value for scenarios.","items":{"properties":{"authority":{"const":"controlled-replay","description":"Value for authority.","type":"string"},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"description":"Value for operation.","minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"description":"Value for unknowns.","items":{"properties":{"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for previous revision digest."},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"description":"Value for registry version.","type":"number"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"description":"Value for revision digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Value for scope digest."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"type":"array"}},"required":["bundle_version","artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"name":{"description":"Exact name used by this operation.","maxLength":200,"minLength":1,"type":"string"},"owners":{"description":"Value for owners.","items":{"additionalProperties":false,"properties":{"ownership":{"description":"Value for ownership.","oneOf":[{"additionalProperties":false,"properties":{"authority_route":{"description":"Value for authority route.","enum":["none","detected","unknown"],"type":"string"},"disposition":{"const":"implemented","description":"Value for disposition.","type":"string"},"owner_export":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for owner export."},"owner_path":{"description":"Local filesystem path for owner.","maxLength":4096,"minLength":1,"type":"string"},"owner_sha256":{"description":"Exact SHA-256 digest of owner.","pattern":"^[a-f0-9]{64}$","type":"string"},"package_state":{"description":"Value for package state.","enum":["distributed","missing","unknown"],"type":"string"},"path_state":{"description":"Value for path state.","enum":["present","missing","unknown"],"type":"string"}},"required":["disposition","owner_path","owner_export","owner_sha256","path_state","package_state","authority_route"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"description":"Value for disposition.","enum":["external","non-goal"],"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":4096,"minLength":1,"type":"string"}},"required":["disposition","rationale"],"type":"object"}]},"surface_id":{"description":"Value for surface id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["surface_id","ownership"],"type":"object"},"maxItems":10000,"type":"array"},"package_proofs":{"description":"Value for package proofs.","items":{"additionalProperties":false,"properties":{"artifact_sha256s":{"description":"Value for artifact sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"kind":{"description":"Value for kind.","enum":["build","clean-install","package-contents","runtime-routing","authority-independence"],"type":"string"},"proof_id":{"description":"Value for proof id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","skipped"],"type":"string"}},"required":["proof_id","kind","status","artifact_sha256s","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"previous_revision_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"description":"Exact SHA-256 digest of previous revision."},"residual_unknown_ids":{"description":"Value for residual unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":10000,"type":"array"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"},"surfaces":{"description":"Value for surfaces.","items":{"additionalProperties":false,"properties":{"artifact_id":{"description":"Value for artifact id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"authority":{"description":"Value for authority.","enum":["observed","derived","inferred","historical","external"],"type":"string"},"dependency_surface_ids":{"description":"Value for dependency surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"family":{"description":"Value for family.","maxLength":100,"minLength":1,"type":"string"},"location":{"description":"Value for location.","maxLength":4096,"minLength":1,"type":"string"},"occurrence_id":{"anyOf":[{"maxLength":500,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for occurrence id."},"surface_id":{"description":"Value for surface id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["surface_id","family","artifact_id","occurrence_id","location","authority","dependency_surface_ids","evidence_ids"],"type":"object"},"maxItems":10000,"type":"array"},"verifier_contracts":{"description":"Value for verifier contracts.","items":{"additionalProperties":false,"properties":{"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","live-observation","external"],"type":"string"},"claim_ids":{"description":"Value for claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"contract_sha256":{"description":"Exact SHA-256 digest of contract.","pattern":"^[a-f0-9]{64}$","type":"string"},"dimensions":{"description":"Value for dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"max_age_ms":{"description":"Maximum permitted age ms for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"minimum_repeats":{"description":"Value for minimum repeats.","maximum":1000,"minimum":1,"type":"integer"},"normalization_removes_dimensions":{"const":false,"description":"Value for normalization removes dimensions.","type":"boolean"},"normalization_sha256":{"description":"Exact SHA-256 digest of normalization.","pattern":"^[a-f0-9]{64}$","type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","claim_ids","dimensions","authority","max_age_ms","minimum_repeats","normalization_sha256","normalization_removes_dimensions","contract_sha256"],"type":"object"},"maxItems":10000,"type":"array"},"verifier_results":{"description":"Value for verifier results.","items":{"additionalProperties":false,"properties":{"artifact_sha256s":{"description":"Value for artifact sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"contract_sha256":{"description":"Exact SHA-256 digest of contract.","pattern":"^[a-f0-9]{64}$","type":"string"},"covered_claim_ids":{"description":"Value for covered claim ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"covered_dimensions":{"description":"Value for covered dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":1000,"minItems":1,"type":"array"},"normalization_sha256":{"description":"Exact SHA-256 digest of normalization.","pattern":"^[a-f0-9]{64}$","type":"string"},"observed_at":{"description":"Value for observed at.","format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z|([+-](?:[01]\\\\d|2[0-3]):[0-5]\\\\d)))$","type":"string"},"owner_sha256s":{"description":"Value for owner sha256s.","items":{"pattern":"^[a-f0-9]{64}$","type":"string"},"maxItems":1000,"type":"array"},"repeats":{"description":"Value for repeats.","maximum":1000,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["pass","fail","unknown","unsupported","truncated","skipped"],"type":"string"},"verifier_id":{"description":"Value for verifier id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["verifier_id","contract_sha256","observed_at","status","covered_claim_ids","covered_dimensions","artifact_sha256s","owner_sha256s","normalization_sha256","repeats","evidence_ids"],"type":"object"},"maxItems":100000,"type":"array"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","workspace_id","name","revision","previous_revision_sha256","evidence_bundle","artifacts","surfaces","owners","claims","verifier_contracts","verifier_results","residual_unknown_ids","contradictions","package_proofs","boundaries","revision_sha256"],"type":"object"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","expected_revision","workspace"],"type":"object"},"kind":"application","name":"commit_reconstruction_coverage","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"workspace_id":{"pattern":"^rcw_[a-f0-9]{64}$","type":"string"},"workspace_path":{"type":"string"}},"required":["workspace_path","bytes","workspace_id","revision","revision_sha256","evidence_records"],"type":"object"},"requiresSession":false,"title":"Commit Reconstruction Coverage"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate one named reconstruction boundary from a canonical coverage workspace. Missing ownership or inventory is partial; stale, weak, truncated, skipped, or unresolved proof is unknown; contradictions, failed proof, missing owners, and authority routing fail closed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"boundary_id":"replacement.cli","workspace_path":"/approved/coverage.json"}],"properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["workspace_path","boundary_id"],"type":"object"},"kind":"application","name":"query_reconstruction_coverage","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"boundary_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100000,"type":"array"},"reasons":{"items":{"additionalProperties":false,"properties":{"code":{"enum":["surface-missing","owner-missing","owner-duplicate","owner-path-missing","owner-path-unknown","owner-undistributed","owner-distribution-unknown","authority-routing-detected","authority-routing-unknown","disposition-not-allowed","dependency-surface-missing","claim-missing","verifier-missing","verifier-duplicate","verifier-result-missing","verifier-result-stale","verifier-result-incompatible","verifier-failed","verifier-unknown","active-unknown","active-contradiction","package-proof-missing","package-proof-failed","package-proof-unknown"],"type":"string"},"detail":{"maxLength":4096,"minLength":1,"type":"string"},"subject_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["code","subject_id","detail"],"type":"object"},"maxItems":100000,"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"rationale":{"maxLength":4096,"minLength":1,"type":"string"},"subject_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"}},"required":["operation","subject_id","rationale"],"type":"object"},"maxItems":100000,"type":"array"},"status":{"enum":["partial","failed","unknown","ready"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"reasons":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_claims":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"required_surfaces":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["required_surfaces","required_claims","reasons"],"type":"object"},"workspace_revision_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["boundary_id","status","workspace_revision_sha256","summary","reasons","recommended_probes","evidence_ids"],"type":"object"},"requiresSession":false,"title":"Query Reconstruction Coverage"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Open a local executable, application bundle, archive, JavaScript, source map, plist, or analysis database after validation. provider_id selects one deep provider or deterministic auto selection; the binding remains stable until close or an explicit switch, with no failure fallback. An optional snapshot v2 is imported atomically and must match the binary identity, concrete provider, and canonical analysis profile exactly.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"path":"/tmp/fixture"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"provider_id":{"anyOf":[{"const":"auto","type":"string"},{"maxLength":64,"minLength":1,"pattern":"^[a-z][a-z0-9-]*$","type":"string"}],"description":"Exact deep-analysis provider ID, or automatic selection when omitted."},"snapshot_path":{"description":"Local filesystem path for snapshot.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"open_binary","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"loaderArgs":{"items":{"type":"string"},"type":"array"},"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","format","kind","loaderArgs","sha256","architecture"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Open Binary"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Optionally write a provider-neutral analysis snapshot atomically, then close the active target and every provider resource started for it. Snapshot files require an operator-approved root and explicit overwrite; a failed save leaves the session open so cached analysis is not lost.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"overwrite":false}],"properties":{"overwrite":{"default":false,"description":"Whether an existing destination may be replaced.","type":"boolean"},"snapshot_path":{"description":"Local filesystem path for snapshot.","minLength":1,"type":"string"}},"type":"object"},"kind":"session","name":"close_binary","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"type":"null"},{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"entries":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"}},"required":["path","bytes","entries"],"type":"object"}]}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Close Binary"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Report compact target, provider, and alignment state without starting analysis. The default summary is the routing check agents should use; detail=capabilities returns one family-filtered availability page, while detail=full is reserved for complete provider diagnostics.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"cursor":0,"detail":"summary","limit":25}],"properties":{"capability_family":{"description":"Optional tool family for detail=capabilities","enum":["official-proxy","enhanced","native-provider","artifact-provider","managed-provider","browser-provider","electron-provider","runtime-provider","application","session"],"type":"string"},"cursor":{"default":0,"description":"Zero-based capability cursor for detail=capabilities","maximum":9007199254740991,"minimum":0,"type":"integer"},"detail":{"default":"summary","description":"summary returns routing state; capabilities returns one filtered tool-availability page; full returns complete diagnostics only when required","enum":["summary","capabilities","full"],"type":"string"},"expected_catalog_digest":{"description":"Expected catalog digest used to reject stale or mismatched input.","pattern":"^[a-f0-9]{64}$","type":"string"},"expected_package_version":{"description":"Expected package version used to reject stale or mismatched input.","minLength":1,"type":"string"},"expected_server_path":{"description":"Expected server path used to reject stale or mismatched input.","minLength":1,"type":"string"},"limit":{"default":25,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"}},"type":"object"},"kind":"session","name":"binary_session","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]},"__schema2":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema2"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"additionalProperties":false,"properties":{"active_provider":{"anyOf":[{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},{"type":"null"}]},"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"open":{"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"recommended_actions":{"items":{"type":"string"},"type":"array"},"target":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"path":{"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","format","kind","sha256","architecture"],"type":"object"},{"type":"null"}]},"view":{"const":"summary","type":"string"}},"required":["view","open","provider","active_provider","target","alignment","analysis_activity","recommended_actions"],"type":"object"},{"additionalProperties":false,"properties":{"active_provider":{"anyOf":[{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},{"type":"null"}]},"capabilities":{"additionalProperties":false,"properties":{"cursor":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"has_more":{"type":"boolean"},"items":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":true,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"const":"available","type":"string"},"remediation":{"type":"null"},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":false,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"enum":["client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"}]},"type":"array"},"limit":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"next_cursor":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","cursor","limit","total","next_cursor","has_more"],"type":"object"},"capability_family":{"anyOf":[{"type":"string"},{"type":"null"}]},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"open":{"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"view":{"const":"capabilities","type":"string"}},"required":["view","open","provider","active_provider","capability_family","capabilities","client_features"],"type":"object"},{"anyOf":[{"additionalProperties":false,"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"analysis_provider_binding":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selection_source":{"enum":["request","environment","auto-single-candidate"],"type":"string"}},"required":["provider","selection_source","analysis_profile"],"type":"object"},{"type":"null"}]},"analysis_provider_candidates":{"items":{"additionalProperties":false,"properties":{"availability":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"available","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]},"capabilities":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"availability_code":{"type":"null"},"available":{"const":true,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selected":{"type":"boolean"},"target_support":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"supported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unsupported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]}},"required":["provider","availability","target_support","selected","capabilities"],"type":"object"},"type":"array"},"analysis_run":{"anyOf":[{"additionalProperties":false,"properties":{"process_lineage":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"not_observed","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"snapshots":{"items":{"additionalProperties":false,"properties":{"observation":{"oneOf":[{"additionalProperties":false,"properties":{"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","observed_at","launcher_pid","process_group_id","reason"],"type":"object"},{"additionalProperties":false,"properties":{"descendants":{"items":{"additionalProperties":false,"properties":{"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["pid","parent_pid","process_group_id"],"type":"object"},"type":"array"},"launcher_parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","schema_version","launcher_pid","process_group_id","launcher_parent_pid","descendants"],"type":"object"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"}},"required":["provider","observation"],"type":"object"},"type":"array"},"status":{"const":"snapshots","type":"string"}},"required":["status","snapshots"],"type":"object"}]},"run_id":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},"required":["run_id","process_lineage"],"type":"object"},{"type":"null"}]},"capabilities":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"availability_code":{"type":"null"},"available":{"const":true,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"open":{"const":false,"type":"boolean"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"type":"array"},"server_identity":{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"catalog":{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"},"client":{"anyOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},{"type":"null"}]},"negotiated_protocol_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"package":{"additionalProperties":false,"properties":{"build_commit":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"root_path":{"type":"string"},"version":{"type":"string"}},"required":["name","version","root_path","build_commit"],"type":"object"},"protocol_features":{"additionalProperties":false,"properties":{"cancellation":{"type":"boolean"},"elicitation":{"type":"boolean"},"evidence_resources":{"type":"boolean"},"progress":{"type":"boolean"}},"required":["progress","cancellation","evidence_resources","elicitation"],"type":"object"},"sdk":{"additionalProperties":false,"properties":{"client_test":{"type":"string"},"core":{"type":"string"},"server":{"type":"string"}},"required":["server","client_test","core"],"type":"object"},"server":{"additionalProperties":false,"properties":{"command_path":{"type":"string"},"name":{"type":"string"},"started_at":{"type":"string"},"version":{"type":"string"}},"required":["name","version","started_at","command_path"],"type":"object"},"skill":{"additionalProperties":false,"properties":{"expected_version":{"type":"string"},"name":{"type":"string"}},"required":["name","expected_version"],"type":"object"}},"required":["package","server","sdk","negotiated_protocol_version","client","skill","catalog","protocol_features","alignment"],"type":"object"},"tool_availability":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":true,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"const":"available","type":"string"},"remediation":{"type":"null"},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":false,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"enum":["client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"}]},"type":"array"},"view":{"const":"full","type":"string"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","view","open"],"type":"object"},{"additionalProperties":false,"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","timed_out","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["request_id","operation","elapsed_ms","timeout_ms","caller_state"],"type":"object"},{"type":"null"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"queued_requests":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["provider","active","queued_requests"],"type":"object"},"type":"array"},"status":{"enum":["not_observed","idle","busy","timed_out_busy"],"type":"string"}},"required":["status","providers"],"type":"object"},"analysis_provider_binding":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"additionalProperties":false,"properties":{"digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"name":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selection_source":{"enum":["request","environment","auto-single-candidate"],"type":"string"}},"required":["provider","selection_source","analysis_profile"],"type":"object"},{"type":"null"}]},"analysis_provider_candidates":{"items":{"additionalProperties":false,"properties":{"availability":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"available","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]},"capabilities":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"availability_code":{"type":"null"},"available":{"const":true,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"selected":{"type":"boolean"},"target_support":{"oneOf":[{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"type":"null"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"type":"null"},"status":{"const":"supported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"},{"additionalProperties":false,"properties":{"code":{"enum":["target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported"],"type":"string"},"diagnostics":{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unsupported","type":"string"}},"required":["status","code","reason","diagnostics"],"type":"object"}]}},"required":["provider","availability","target_support","selected","capabilities"],"type":"object"},"type":"array"},"analysis_run":{"anyOf":[{"additionalProperties":false,"properties":{"process_lineage":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"not_observed","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"snapshots":{"items":{"additionalProperties":false,"properties":{"observation":{"oneOf":[{"additionalProperties":false,"properties":{"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"reason":{"minLength":1,"type":"string"},"status":{"const":"unavailable","type":"string"}},"required":["status","observed_at","launcher_pid","process_group_id","reason"],"type":"object"},{"additionalProperties":false,"properties":{"descendants":{"items":{"additionalProperties":false,"properties":{"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["pid","parent_pid","process_group_id"],"type":"object"},"type":"array"},"launcher_parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"launcher_pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"observed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"process_group_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"type":"number"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","schema_version","launcher_pid","process_group_id","launcher_parent_pid","descendants"],"type":"object"}]},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"}},"required":["provider","observation"],"type":"object"},"type":"array"},"status":{"const":"snapshots","type":"string"}},"required":["status","snapshots"],"type":"object"}]},"run_id":{"format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","type":"string"}},"required":["run_id","process_lineage"],"type":"object"},{"type":"null"}]},"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}]},"capabilities":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"availability_code":{"type":"null"},"available":{"const":true,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"type":"null"}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"},{"additionalProperties":false,"properties":{"availability_code":{"anyOf":[{"enum":["not_configured","executable_missing","runtime_missing","unsupported_host","unsupported_version","target_kind_unsupported","target_format_unsupported","architecture_unsupported","target_role_unsupported","managed_target_unsupported","open_options_invalid","version_unresolved"],"type":"string"},{"type":"null"}]},"available":{"const":false,"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"changes_permissions":{"type":"boolean"},"launches_process":{"type":"boolean"},"may_access_network":{"type":"boolean"},"may_show_ui":{"type":"boolean"},"may_write_filesystem":{"type":"boolean"},"mutates_artifact":{"type":"boolean"},"requires_root":{"type":"boolean"}},"required":["mutates_artifact","launches_process","may_show_ui","may_access_network","may_write_filesystem","changes_permissions","requires_root"],"type":"object"},"exhaustive":{"type":"boolean"},"input_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"limits":{"additionalProperties":false,"properties":{"max_payload_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"max_results":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"timeout_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["max_results","max_payload_bytes","timeout_ms"],"type":"object"},"operation":{"type":"string"},"output_contract_version":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pagination":{"enum":["none","offset","cursor"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","input_contract_version","output_contract_version","pagination","exhaustive","effects","limits","limitations","available","reason","availability_code"],"type":"object"}]},"type":"array"},"client_features":{"additionalProperties":false,"properties":{"elicitation_form":{"type":"boolean"},"elicitation_url":{"type":"boolean"},"roots":{"type":"boolean"},"sampling":{"type":"boolean"}},"required":["elicitation_form","elicitation_url","roots","sampling"],"type":"object"},"format":{"enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map"],"type":"string"},"kind":{"enum":["executable","database","archive","artifact"],"type":"string"},"open":{"const":true,"type":"boolean"},"path":{"type":"string"},"provider":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"providers":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","name","version"],"type":"object"},"type":"array"},"server_identity":{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"reasons":{"items":{"type":"string"},"type":"array"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["aligned","mcp_server_restart_required","unknown"],"type":"string"}},"required":["state","reasons","remediation"],"type":"object"},"catalog":{"additionalProperties":{"$ref":"#/$defs/__schema2"},"propertyNames":{"type":"string"},"type":"object"},"client":{"anyOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"version":{"type":"string"}},"required":["name","version"],"type":"object"},{"type":"null"}]},"negotiated_protocol_version":{"anyOf":[{"type":"string"},{"type":"null"}]},"package":{"additionalProperties":false,"properties":{"build_commit":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"type":"string"},"root_path":{"type":"string"},"version":{"type":"string"}},"required":["name","version","root_path","build_commit"],"type":"object"},"protocol_features":{"additionalProperties":false,"properties":{"cancellation":{"type":"boolean"},"elicitation":{"type":"boolean"},"evidence_resources":{"type":"boolean"},"progress":{"type":"boolean"}},"required":["progress","cancellation","evidence_resources","elicitation"],"type":"object"},"sdk":{"additionalProperties":false,"properties":{"client_test":{"type":"string"},"core":{"type":"string"},"server":{"type":"string"}},"required":["server","client_test","core"],"type":"object"},"server":{"additionalProperties":false,"properties":{"command_path":{"type":"string"},"name":{"type":"string"},"started_at":{"type":"string"},"version":{"type":"string"}},"required":["name","version","started_at","command_path"],"type":"object"},"skill":{"additionalProperties":false,"properties":{"expected_version":{"type":"string"},"name":{"type":"string"}},"required":["name","expected_version"],"type":"object"}},"required":["package","server","sdk","negotiated_protocol_version","client","skill","catalog","protocol_features","alignment"],"type":"object"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"tool_availability":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":true,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"const":"available","type":"string"},"remediation":{"type":"null"},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"annotations":{"additionalProperties":false,"properties":{"destructive":{"type":"boolean"},"idempotent":{"type":"boolean"},"open_world":{"type":"boolean"},"read_only":{"type":"boolean"}},"required":["read_only","destructive","idempotent","open_world"],"type":"object"},"available":{"const":false,"type":"boolean"},"client_requirements":{"additionalProperties":false,"properties":{"missing_optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"missing_required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"optional":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"},"required":{"items":{"enum":["elicitation_form","elicitation_url","roots","sampling"],"type":"string"},"type":"array"}},"required":["required","optional","missing_required","missing_optional"],"type":"object"},"default_mode_available":{"type":"boolean"},"effects":{"additionalProperties":false,"properties":{"accessesNetwork":{"type":"boolean"},"changesUiState":{"type":"boolean"},"idempotent":{"type":"boolean"},"launchesProcess":{"type":"boolean"},"mayDiscardData":{"type":"boolean"},"mutatesSession":{"type":"boolean"},"mutatesTarget":{"type":"boolean"},"writesFilesystem":{"type":"boolean"}},"required":["mutatesTarget","mutatesSession","writesFilesystem","launchesProcess","accessesNetwork","changesUiState","mayDiscardData","idempotent"],"type":"object"},"modes":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"maxItems":0,"type":"array"},"name":{"type":"string"},"remediation":{"type":"null"}},"required":["name","available","missing_operations","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"missing_operations":{"items":{"type":"string"},"minItems":1,"type":"array"},"name":{"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","available","missing_operations","remediation"],"type":"object"}]},"type":"array"},"name":{"type":"string"},"reason":{"enum":["client_capability_missing","target_required","provider_missing","provider_unavailable","target_unsupported","unsupported_host","policy_disabled"],"type":"string"},"remediation":{"anyOf":[{"type":"string"},{"type":"null"}]},"surface":{"type":"string"}},"required":["name","surface","client_requirements","effects","annotations","available","reason","remediation"],"type":"object"}]},"type":"array"},"view":{"const":"full","type":"string"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","view","open","path","format","kind","sha256","architecture"],"type":"object"}]}]}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Binary Session"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Atomically write the session\'s deterministic Evidence v2 bundle beneath an operator-approved root. Existing files require overwrite: true; records and manifests use canonical byte-stable ordering. For an in-session read, use snapshot_evidence_bundle and read its exact resource URI instead.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"overwrite":false,"path":"/tmp/evidence.json"}],"properties":{"overwrite":{"default":false,"description":"Whether an existing destination may be replaced.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"export_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["path","bytes","records","unknowns"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Export Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read a bounded local JSON bundle beneath an operator-approved root, validate every Evidence v2 ID and canonical manifest, then atomically merge it. Imported content is data only and is never executed.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"path":"evidence.json"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["path"],"type":"object"},"kind":"session","name":"import_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"imported":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["imported","unknowns_added","total"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Import Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run one bounded process under a PTY using operator-approved executable and working roots. Produces Process Capture v4; legacy v3 captures cannot be upgraded and must be recaptured with this tool. Requires approved: true; unknown_registry_approved: true separately records capture residuals. Captures raw and xterm-rendered terminal frames, scripted interactions, lifecycle filesystem checkpoints, process ownership, declarative command shims, and loopback replay. Disabled unless operator policy enables it; not a security sandbox.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":false,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$defs":{"__schema0":{"oneOf":[{"additionalProperties":false,"properties":{"cardinality":{"additionalProperties":false,"description":"Value for cardinality.","properties":{"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":256,"type":"integer"}},"required":["min","max"],"type":"object"},"consume":{"description":"Value for consume.","type":"boolean"},"exact":{"$ref":"#/$defs/__schema1","description":"Value for exact."},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"maxItems":5,"type":"array"},"kind":{"const":"event","description":"Value for kind.","type":"string"},"since":{"description":"Value for since.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"scenario_start","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"state_entry","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"checkpoint","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"event_id":{"description":"Value for event id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem","http","websocket","shim","replay_transition"],"type":"string"}},"required":["kind","source","exact","ignore_fields","since","consume","cardinality"],"type":"object"},{"additionalProperties":false,"properties":{"case_sensitive":{"const":true,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"consume":{"description":"Value for consume.","type":"boolean"},"control_sequences":{"const":"include","description":"Value for control sequences.","type":"string"},"encoding":{"const":"utf8","description":"Value for encoding.","type":"string"},"kind":{"const":"terminal_text","description":"Value for kind.","type":"string"},"literal":{"description":"Value for literal.","maxLength":10000,"minLength":1,"type":"string"},"occurrence":{"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"since":{"description":"Value for since.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"scenario_start","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"state_entry","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"checkpoint","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"event_id":{"description":"Value for event id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]},"view":{"const":"decoded","description":"Value for view.","type":"string"}},"required":["kind","view","encoding","literal","case_sensitive","control_sequences","occurrence","since","consume"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"all","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":2,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"any","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":2,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"sequence","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"maxItems":16,"minItems":1,"type":"array"}},"required":["kind","triggers"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"repeat","description":"Value for kind.","type":"string"},"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":64,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":64,"type":"integer"},"trigger":{"$ref":"#/$defs/__schema0","description":"Value for trigger."}},"required":["kind","trigger","min","max"],"type":"object"}]},"__schema1":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema1"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema1"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"approved":true,"arguments":[],"checkpoints":[],"command_shims":[],"environment":{},"events":[],"executable":"/usr/bin/true","filesystem_roots":[],"idle_timeout_ms":30000,"inherit_environment":[],"limits":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"frames":10000,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"network_access":"host","normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"reactive":null,"replay":{"http":[],"machine":null,"websocket_connections":[],"websocket_messages":[]},"secret_aliases":[],"settle_ms":100,"terminal":{"columns":80,"rows":24,"scrollback":1000},"timeout_ms":30000,"working_directory":"/tmp"}],"properties":{"approved":{"const":true,"description":"Explicit per-call acknowledgement that this operation launches the target","type":"boolean"},"arguments":{"default":[],"description":"Value for arguments.","items":{"type":"string"},"maxItems":256,"type":"array"},"checkpoints":{"default":[],"description":"Value for checkpoints.","items":{"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"properties":{"at_ms":{"description":"Value for at ms.","maximum":300000,"minimum":0,"type":"integer"},"type":{"const":"time","description":"Value for type.","type":"string"}},"required":["type","at_ms"],"type":"object"},{"properties":{"occurrence":{"default":1,"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"type":{"const":"terminal_literal","description":"Value for type.","type":"string"},"value":{"description":"Value for value.","maxLength":10000,"minLength":1,"type":"string"}},"required":["type","value"],"type":"object"},{"properties":{"type":{"const":"root_exit","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"properties":{"type":{"const":"settled","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"}]}},"required":["name","trigger"],"type":"object"},"maxItems":64,"type":"array"},"command_shims":{"default":[],"description":"Value for command shims.","items":{"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$","type":"string"},"routes":{"description":"Value for routes.","items":{"properties":{"arguments":{"description":"Value for arguments.","items":{"type":"string"},"maxItems":256,"type":"array"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","exclusiveMinimum":0,"maximum":100,"type":"integer"},"outputs":{"default":[],"description":"Value for outputs.","items":{"properties":{"at_ms":{"description":"Value for at ms.","maximum":300000,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"stream":{"description":"Value for stream.","enum":["stdout","stderr"],"type":"string"}},"required":["at_ms","stream","data"],"type":"object"},"maxItems":1000,"type":"array"},"termination":{"description":"Value for termination.","oneOf":[{"properties":{"code":{"description":"Value for code.","maximum":255,"minimum":0,"type":"integer"},"type":{"const":"exit","description":"Value for type.","type":"string"}},"required":["type","code"],"type":"object"},{"properties":{"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"type":{"const":"signal","description":"Value for type.","type":"string"}},"required":["type","signal"],"type":"object"}]}},"required":["arguments","termination"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}},"required":["name","routes"],"type":"object"},"maxItems":32,"type":"array"},"environment":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for environment.","propertyNames":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"type":"object"},"events":{"default":[],"description":"Value for events.","items":{"oneOf":[{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","type":"string"},"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"type":{"const":"input","description":"Value for type.","type":"string"}},"required":["at_ms","type","data"],"type":"object"},{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"columns":{"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"type":{"const":"resize","description":"Value for type.","type":"string"}},"required":["at_ms","type","columns","rows"],"type":"object"},{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"type":{"const":"signal","description":"Value for type.","type":"string"}},"required":["at_ms","type","signal"],"type":"object"}]},"maxItems":1000,"type":"array"},"executable":{"description":"Approved absolute path of the executable to run.","pattern":"^\\\\/.*","type":"string"},"filesystem_roots":{"default":[],"description":"Approved canonical filesystem filesystem roots.","items":{"pattern":"^\\\\/.*","type":"string"},"maxItems":16,"type":"array"},"idle_timeout_ms":{"default":30000,"description":"Value for idle timeout ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"inherit_environment":{"default":[],"description":"Value for inherit environment.","items":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"maxItems":64,"type":"array"},"limits":{"default":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"frames":10000,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"connections":{"default":100,"description":"Value for connections.","exclusiveMinimum":0,"maximum":1000,"type":"integer"},"file_bytes":{"default":10000000,"description":"Bounded byte count for file.","exclusiveMinimum":0,"maximum":100000000,"type":"integer"},"files":{"default":10000,"description":"Value for files.","exclusiveMinimum":0,"maximum":100000,"type":"integer"},"filesystem_depth":{"default":16,"description":"Value for filesystem depth.","maximum":64,"minimum":1,"type":"integer"},"frames":{"default":10000,"description":"Value for frames.","exclusiveMinimum":0,"maximum":100000,"type":"integer"},"output_bytes":{"default":1000000,"description":"Bounded byte count for output.","exclusiveMinimum":0,"maximum":10000000,"type":"integer"},"processes":{"default":1000,"description":"Value for processes.","exclusiveMinimum":0,"maximum":10000,"type":"integer"},"protocol_body_bytes":{"default":1000000,"description":"Bounded byte count for protocol body.","exclusiveMinimum":0,"maximum":10000000,"type":"integer"},"protocol_events":{"default":10000,"description":"Value for protocol events.","exclusiveMinimum":0,"maximum":100000,"type":"integer"}},"type":"object"},"network_access":{"const":"host","default":"host","description":"Value for network access.","type":"string"},"normalization":{"default":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"description":"Value for normalization.","properties":{"paths":{"default":true,"description":"Value for paths.","type":"boolean"},"patterns":{"default":[],"description":"Value for patterns.","items":{"properties":{"pattern":{"description":"Text or bounded pattern used to filter matching results.","maxLength":500,"type":"string"},"replacement":{"description":"Value for replacement.","maxLength":100,"type":"string"}},"required":["pattern","replacement"],"type":"object"},"maxItems":32,"type":"array"},"pids":{"default":true,"description":"Value for pids.","type":"boolean"},"ports":{"default":true,"description":"Value for ports.","type":"boolean"},"time_bucket_ms":{"default":10,"description":"Value for time bucket ms.","exclusiveMinimum":0,"maximum":60000,"type":"integer"}},"type":"object"},"reactive":{"anyOf":[{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"max_visits":{"description":"Maximum permitted visits for this operation.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"on":{"description":"Value for on.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"sensitive":{"description":"Value for sensitive.","type":"boolean"},"type":{"const":"send_input","description":"Value for type.","type":"string"}},"required":["type","data","sensitive"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"type":{"const":"resize","description":"Value for type.","type":"string"}},"required":["type","columns","rows"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"close_stdin","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"signal":{"description":"Value for signal.","enum":["SIGINT","SIGTERM","SIGKILL"],"type":"string"},"target":{"description":"Value for target.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"root","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"process_group","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"subject_id","description":"Value for kind.","type":"string"},"subject_id":{"description":"Value for subject id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["kind","subject_id"],"type":"object"}]},"type":{"const":"send_signal","description":"Value for type.","type":"string"}},"required":["type","target","signal"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z0-9][A-Za-z0-9_-]{0,63}$","type":"string"},"type":{"const":"checkpoint","description":"Value for type.","type":"string"}},"required":["type","name"],"type":"object"}]},"maxItems":16,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","exclusiveMinimum":0,"maximum":256,"type":"integer"},"priority":{"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"target":{"description":"Value for target.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"goto","description":"Value for kind.","type":"string"},"state":{"description":"Value for state.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["kind","state"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finish","description":"Value for kind.","type":"string"},"outcome":{"const":"passed","description":"Value for outcome.","type":"string"}},"required":["kind","outcome"],"type":"object"}]},"when":{"$ref":"#/$defs/__schema0","description":"Value for when."}},"required":["id","priority","max_uses","when","actions","target"],"type":"object"},"maxItems":128,"minItems":1,"type":"array"}},"required":["id","max_visits","deadline_ms","on"],"type":"object"},"maxItems":32,"minItems":1,"type":"array"},"version":{"const":1,"description":"Value for version.","type":"number"}},"required":["version","initial_state","deadline_ms","states"],"type":"object"},{"type":"null"}],"description":"Value for reactive."},"replay":{"description":"Value for replay.","properties":{"http":{"default":[],"description":"Value for http.","items":{"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":30000,"minimum":0,"type":"integer"},"disconnect":{"default":false,"description":"Value for disconnect.","type":"boolean"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","maximum":100,"minimum":1,"type":"integer"},"method":{"description":"Value for method.","maxLength":16,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"request_body":{"description":"Value for request body.","maxLength":1000000,"type":"string"},"request_headers":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for request headers.","propertyNames":{"type":"string"},"type":"object"},"response_headers":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for response headers.","propertyNames":{"type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"}},"required":["method","path","status","body"],"type":"object"},"maxItems":100,"type":"array"},"machine":{"anyOf":[{"additionalProperties":false,"properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":10000000,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":1000,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":300000,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"max_visits":{"default":100000,"description":"Maximum permitted visits for this operation.","maximum":100000,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"transitions":{"description":"Value for transitions.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","description":"Value for type.","type":"string"}},"required":["type","status","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"minItems":1,"type":"array"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"guards":{"description":"Value for guards.","items":{"additionalProperties":false,"properties":{"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":10000,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","method","path"],"type":"object"},{"additionalProperties":false,"properties":{"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"},{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"}]}},"required":["id","from","to","trigger","actions","max_uses"],"type":"object"},"maxItems":2000,"minItems":1,"type":"array"}},"required":["initial_state","states","transitions","max_transitions"],"type":"object"},{"type":"null"}],"description":"Value for machine."},"websocket_connections":{"default":[],"description":"Value for websocket connections.","items":{"properties":{"disconnect_after":{"default":false,"description":"Value for disconnect after.","type":"boolean"},"messages":{"description":"Value for messages.","items":{"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":30000,"minimum":0,"type":"integer"}},"required":["data"],"type":"object"},"maxItems":100,"type":"array"}},"required":["messages"],"type":"object"},"maxItems":100,"type":"array"},"websocket_messages":{"default":[],"description":"Value for websocket messages.","items":{"maxLength":1000000,"type":"string"},"maxItems":100,"type":"array"}},"type":"object"},"secret_aliases":{"default":[],"description":"Value for secret aliases.","items":{"pattern":"^[A-Za-z_][A-Za-z0-9_]*$","type":"string"},"maxItems":64,"type":"array"},"settle_ms":{"default":100,"description":"Value for settle ms.","maximum":10000,"minimum":0,"type":"integer"},"terminal":{"default":{"columns":80,"rows":24,"scrollback":1000},"description":"Value for terminal.","properties":{"columns":{"default":80,"description":"Value for columns.","maximum":1000,"minimum":1,"type":"integer"},"rows":{"default":24,"description":"Value for rows.","maximum":1000,"minimum":1,"type":"integer"},"scrollback":{"default":1000,"description":"Value for scrollback.","maximum":10000,"minimum":0,"type":"integer"}},"type":"object"},"timeout_ms":{"default":30000,"description":"Value for timeout ms.","exclusiveMinimum":0,"maximum":300000,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record capture residuals durably","type":"boolean"},"working_directory":{"description":"Value for working directory.","pattern":"^\\\\/.*","type":"string"}},"required":["approved","executable","working_directory"],"type":"object"},"kind":"session","name":"capture_process_scenario","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"cleanup":{"additionalProperties":false,"properties":{"owned_process_group":{"const":"verified","type":"string"},"temporary_root":{"const":"removed","type":"string"}},"required":["owned_process_group","temporary_root"],"type":"object"},"event_journal":{"default":[],"items":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["capture_order","collection","index"],"type":"object"},"type":"array"},"exit":{"additionalProperties":false,"properties":{"code":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"reason":{"enum":["exited","timeout","idle_timeout"],"type":"string"},"signal":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]}},"required":["code","signal","reason"],"type":"object"},"files_after":{"items":{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},"type":"array"},"files_before":{"items":{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},"type":"array"},"filesystem_checkpoints":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"effects":{"items":{"additionalProperties":false,"properties":{"after":{"anyOf":[{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},{"type":"null"}]},"before":{"anyOf":[{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},{"type":"null"}]},"path":{"type":"string"},"status":{"enum":["created","modified","deleted","unchanged"],"type":"string"}},"required":["path","status","before","after"],"type":"object"},"type":"array"},"files":{"items":{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},"type":"array"},"name":{"type":"string"},"truncated":{"type":"boolean"}},"required":["name","at_ms","files","effects","truncated"],"type":"object"},"type":"array"},"filesystem_effects":{"items":{"additionalProperties":false,"properties":{"after":{"anyOf":[{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},{"type":"null"}]},"before":{"anyOf":[{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"enum":["file","directory","symlink","other"],"type":"string"}},"required":["path","type","mode","size","sha256","symlink_target"],"type":"object"},{"type":"null"}]},"path":{"type":"string"},"status":{"enum":["created","modified","deleted","unchanged"],"type":"string"}},"required":["path","status","before","after"],"type":"object"},"type":"array"},"frames":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","at_ms","data"],"type":"object"},"type":"array"},"interaction_events":{"items":{"additionalProperties":false,"properties":{"data":{"type":"string"},"dispatched_at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outcome":{"enum":["dispatched","target_exited","failed"],"type":"string"},"scheduled_at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":{"enum":["input","resize","stdin_close","signal"],"type":"string"}},"required":["sequence","scheduled_at_ms","dispatched_at_ms","type","data","outcome"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"manifest":{"additionalProperties":false,"properties":{"architecture":{"minLength":1,"type":"string"},"comparison_contract":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"comparison_contract_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"completed_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"full_scenario_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"normalization_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"platform":{"minLength":1,"type":"string"},"provider_version":{"minLength":1,"type":"string"},"pty_backend":{"const":"node-pty","type":"string"},"rea_version":{"minLength":1,"type":"string"},"replay_plan":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"replay_plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scenario":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"shim_plan":{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},"shim_plan_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"started_at":{"format":"date-time","pattern":"^(?:(?:\\\\d\\\\d[2468][048]|\\\\d\\\\d[13579][26]|\\\\d\\\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\\\d|30)|(?:02)-(?:0[1-9]|1\\\\d|2[0-8])))T(?:(?:[01]\\\\d|2[0-3]):[0-5]\\\\d(?::[0-5]\\\\d(?:\\\\.\\\\d+)?)?(?:Z))$","type":"string"}},"required":["rea_version","provider_version","platform","architecture","pty_backend","started_at","completed_at","scenario","comparison_contract","shim_plan","replay_plan","full_scenario_sha256","comparison_contract_sha256","executable_sha256","normalization_sha256","shim_plan_sha256","replay_plan_sha256"],"type":"object"},"normalization":{"additionalProperties":false,"properties":{"paths":{"type":"boolean"},"patterns":{"items":{"additionalProperties":false,"properties":{"pattern":{"maxLength":500,"type":"string"},"replacement":{"maxLength":100,"type":"string"}},"required":["pattern","replacement"],"type":"object"},"type":"array"},"pids":{"type":"boolean"},"ports":{"type":"boolean"},"time_bucket_ms":{"exclusiveMinimum":0,"maximum":60000,"type":"integer"}},"required":["paths","pids","ports","time_bucket_ms","patterns"],"type":"object"},"process_samples":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"command":{"type":"string"},"parent_pid":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"process_group_id":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"session_id":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["at_ms","pid","parent_pid","command","process_group_id","session_id"],"type":"object"},"type":"array"},"protocol_events":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"type":"string"},"direction":{"enum":["request","response","received","sent"],"type":"string"},"method":{"anyOf":[{"type":"string"},{"type":"null"}]},"outcome":{"enum":["matched","unmatched","script_exhausted","disconnected","invalid_state","guard_failed","transition_exhausted","invalid_capture","unexpected_reconnect","limit_exhausted"],"type":"string"},"path":{"anyOf":[{"type":"string"},{"type":"null"}]},"protocol":{"enum":["http","websocket"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","at_ms","protocol","direction","method","path","data","outcome"],"type":"object"},"type":"array"},"reactive_run":{"anyOf":[{"additionalProperties":false,"properties":{"active_state":{"maxLength":64,"minLength":1,"type":"string"},"controls":{"default":[],"items":{"additionalProperties":false,"properties":{"after_capture_order":{"maximum":9007199254740991,"minimum":-1,"type":"integer"},"kind":{"enum":["state_deadline","scenario_deadline","target_lost","cancelled","cleanup_failed"],"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["sequence","kind","after_capture_order"],"type":"object"},"type":"array"},"outcome":{"anyOf":[{"enum":["passed","predicate_timeout","scenario_deadline","ambiguous_match","action_rejected","target_lost","capture_incomplete","cancelled","cleanup_failed"],"type":"string"},{"type":"null"}]},"status":{"enum":["running","finished"],"type":"string"},"transitions":{"items":{"additionalProperties":false,"properties":{"action_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":16,"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"maxItems":16,"type":"array"},"outcome":{"anyOf":[{"enum":["passed","predicate_timeout","scenario_deadline","ambiguous_match","action_rejected","target_lost","capture_incomplete","cancelled","cleanup_failed"],"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"anyOf":[{"maxLength":64,"minLength":1,"type":"string"},{"type":"null"}]},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"maxItems":64,"type":"array"}},"required":["sequence","transition_id","state_before","state_after","outcome","trigger_event_ids","action_event_ids","action_types"],"type":"object"},"maxItems":128,"type":"array"}},"required":["status","outcome","active_state","controls","transitions"],"type":"object"},{"type":"null"}],"default":null},"rendered_frames":{"items":{"additionalProperties":false,"properties":{"active_buffer":{"enum":["normal","alternate"],"type":"string"},"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"columns":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"cursor_x":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"cursor_y":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"lines":{"items":{"type":"string"},"type":"array"},"rows":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"serialized_state":{"type":"string"}},"required":["sequence","at_ms","columns","rows","cursor_x","cursor_y","active_buffer","lines","serialized_state"],"type":"object"},"type":"array"},"replay_transitions":{"default":[],"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sensitive_aliases":{"items":{"maxLength":64,"minLength":1,"type":"string"},"maxItems":32,"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"maxLength":64,"minLength":1,"type":"string"},"state_before":{"maxLength":64,"minLength":1,"type":"string"},"transition_id":{"maxLength":64,"minLength":1,"type":"string"}},"required":["sequence","at_ms","transition_id","state_before","state_after","sensitive_aliases"],"type":"object"},"type":"array"},"residual_unknowns":{"items":{"additionalProperties":false,"properties":{"reason":{"type":"string"},"scope":{"enum":["terminal","interaction","exit","process","filesystem","protocol","shim","cleanup","network"],"type":"string"}},"required":["scope","reason"],"type":"object"},"type":"array"},"schema_version":{"const":4,"type":"number"},"settlement":{"additionalProperties":false,"properties":{"cleanup_outcome":{"enum":["not_required","cleaned","failed"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"enum":["quiesced","alive_at_deadline","unverifiable"],"type":"string"}},"required":["state","elapsed_ms","cleanup_outcome"],"type":"object"},"shim_events":{"items":{"additionalProperties":false,"properties":{"arguments":{"items":{"type":"string"},"type":"array"},"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"command":{"type":"string"},"outcome":{"enum":["matched","unmatched","exhausted"],"type":"string"},"route_index":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"working_directory":{"type":"string"}},"required":["sequence","at_ms","command","route_index","arguments","working_directory","outcome"],"type":"object"},"type":"array"},"truncated":{"type":"boolean"}},"required":["schema_version","manifest","normalization","frames","rendered_frames","interaction_events","exit","settlement","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions","reactive_run","event_journal","files_before","files_after","filesystem_effects","truncated","limitations","residual_unknowns","cleanup"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Capture Process Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two compatible Process Capture v4 observations across terminal, interaction, lifecycle, process, filesystem, command-shim, HTTP, and WebSocket evidence. Optional trace_spec validates exact events against an explicit partial order or finite trace language; concurrency is never inferred from timestamps or broad sorting. Missing, journal-free, or truncated observations are never treated as equivalent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_id":"ev_0000000000000000000000000000000000000000000000000000000000000000","right_evidence_id":"ev_1111111111111111111111111111111111111111111111111111111111111111"}],"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"max_capture_age_ms":{"description":"Maximum permitted capture age ms for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"trace_spec":{"additionalProperties":false,"description":"Value for trace spec.","properties":{"events":{"description":"Value for events.","items":{"additionalProperties":false,"properties":{"cardinality":{"default":{"kind":"required"},"description":"Value for cardinality.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"required","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"optional","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"count":{"description":"Value for count.","maximum":10000,"minimum":0,"type":"integer"},"kind":{"const":"exact","description":"Value for kind.","type":"string"}},"required":["kind","count"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"range","description":"Value for kind.","type":"string"},"max":{"description":"Value for max.","maximum":10000,"minimum":0,"type":"integer"},"min":{"description":"Value for min.","maximum":10000,"minimum":0,"type":"integer"}},"required":["kind","min","max"],"type":"object"}]},"exact":{"$ref":"#/$defs/__schema0","description":"Value for exact."},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"maxItems":5,"type":"array"},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem","http","websocket","shim","replay_transition"],"type":"string"}},"required":["id","source","exact"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"language":{"description":"Value for language.","oneOf":[{"additionalProperties":false,"properties":{"happens_before":{"default":[],"description":"Value for happens before.","items":{"additionalProperties":false,"properties":{"after":{"description":"The later or right-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"before":{"description":"The earlier or left-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["before","after"],"type":"object"},"maxItems":4096,"type":"array"},"kind":{"const":"partial_order","description":"Value for kind.","type":"string"},"not_before":{"default":[],"description":"Value for not before.","items":{"additionalProperties":false,"properties":{"anchor":{"description":"Value for anchor.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"event":{"description":"Value for event.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"}},"required":["event","anchor"],"type":"object"},"maxItems":4096,"type":"array"},"prefix":{"default":[],"description":"Value for prefix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":4096,"type":"array"},"suffix":{"default":[],"description":"Value for suffix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":4096,"type":"array"},"unordered_groups":{"default":[],"description":"Value for unordered groups.","items":{"additionalProperties":false,"properties":{"events":{"description":"Value for events.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":256,"minItems":2,"type":"array"}},"required":["events"],"type":"object"},"maxItems":256,"type":"array"}},"required":["kind"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finite_traces","description":"Value for kind.","type":"string"},"variants":{"description":"Value for variants.","items":{"additionalProperties":false,"properties":{"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"trace":{"description":"Value for trace.","items":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},{"additionalProperties":false,"properties":{"unordered":{"description":"Value for unordered.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"maxItems":256,"minItems":2,"type":"array"}},"required":["unordered"],"type":"object"}]},"maxItems":4096,"type":"array"}},"required":["id","trace"],"type":"object"},"maxItems":64,"minItems":1,"type":"array"}},"required":["kind","variants"],"type":"object"}]},"version":{"const":1,"description":"Value for version.","type":"number"}},"required":["version","events","language"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record capture disagreement durably","type":"boolean"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"kind":"session","name":"compare_process_captures","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"exit":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"filesystem":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"first_divergence":{"oneOf":[{"additionalProperties":false,"properties":{"status":{"const":"none","type":"string"}},"required":["status"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"status":{"const":"unknown","type":"string"}},"required":["status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"left":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"left_at_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}]},"right_at_ms":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"found","type":"string"}},"required":["status","dimension","index","left_at_ms","right_at_ms","left","right"],"type":"object"}]},"interaction":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"process":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"protocol":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"shim":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"terminal":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"trace":{"additionalProperties":false,"properties":{"diagnostic":{"anyOf":[{"additionalProperties":false,"properties":{"event_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"type":"array"},"kind":{"enum":["journal","predicate","cardinality","edge","prefix","suffix","trace"],"type":"string"},"locations":{"items":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["collection","index","capture_order"],"type":"object"},"type":"array"},"message":{"type":"string"},"side":{"enum":["left","right"],"type":"string"}},"required":["kind","side","message","event_ids","locations"],"type":"object"},{"type":"null"}]},"left":{"additionalProperties":false,"properties":{"matched_variant":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},{"type":"null"}]},"raw_trace":{"items":{"additionalProperties":false,"properties":{"event_id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"location":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["collection","index","capture_order"],"type":"object"}},"required":["event_id","location"],"type":"object"},"type":"array"},"satisfied_constraints":{"items":{"type":"string"},"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["status","matched_variant","satisfied_constraints","raw_trace"],"type":"object"},"right":{"additionalProperties":false,"properties":{"matched_variant":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},{"type":"null"}]},"raw_trace":{"items":{"additionalProperties":false,"properties":{"event_id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,63}$","type":"string"},"location":{"additionalProperties":false,"properties":{"capture_order":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"collection":{"enum":["frames","rendered_frames","interaction_events","lifecycle","process_samples","filesystem_checkpoints","shim_events","protocol_events","replay_transitions"],"type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["collection","index","capture_order"],"type":"object"}},"required":["event_id","location"],"type":"object"},"type":"array"},"satisfied_constraints":{"items":{"type":"string"},"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"}},"required":["status","matched_variant","satisfied_constraints","raw_trace"],"type":"object"},"verdict":{"enum":["equivalent","different","nonconforming","unknown"],"type":"string"}},"required":["verdict","left","right","diagnostic"],"type":"object"}},"required":["status","terminal","interaction","exit","filesystem","protocol","process","shim","first_divergence","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Process Captures"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two bounded sets of inventory_artifact Evidence pages by logical occurrence path, content identity, metadata, and graph relations. Pages must share and satisfy their graph commitment; every delta cites both sets, and gaps yield truncated or unknown, never equivalence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_ids":["ev_b74d3ff6cdf54af4e4f3dab00965780cb5ef2b375188c75c1980d0998c5a05a4"],"limit":100,"offset":0,"right_evidence_ids":["ev_74ecec364f3987b332db851177d2117a89d49df4ba89ab5d87299940092d7bb4"]}],"properties":{"left_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the left observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the right observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record incomplete or differing evidence","type":"boolean"}},"required":["left_evidence_ids","right_evidence_ids"],"type":"object"},"kind":"session","name":"compare_artifacts","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["added","removed","changed","unknown","contradiction"],"type":"string"},"dimensions":{"items":{"enum":["content","kind","format","size","executable","relations","metadata","availability","integrity"],"type":"string"},"maxItems":8,"minItems":1,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":200,"minItems":2,"type":"array"},"left_artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"left_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"},"right_artifact_id":{"anyOf":[{"pattern":"^art_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"right_occurrence_id":{"anyOf":[{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["classification","logical_path","dimensions","left_occurrence_id","right_occurrence_id","left_artifact_id","right_artifact_id","evidence_links"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"left_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"contradiction":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","added","removed","changed","unknown","contradiction"],"type":"object"}},"required":["status","left_manifest_id","right_manifest_id","summary","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Artifacts"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two explicit bounded sets of analyze_function Evidence pages across identity, exact provider text, calls, references, strings, and address-normalized CFG topology. Missing or provider-incompatible facets remain truncated or unknown; every conclusion cites both Evidence sets.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]}],"properties":{"left_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the left observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"right_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the right observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["left_evidence_ids","right_evidence_ids"],"type":"object"},"kind":"session","name":"compare_functions","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"conclusion_kind":{"enum":["derived_relationship","contradiction","unresolved_branch"],"type":"string"},"dimension":{"enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":200,"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown"],"type":"string"},"text_delta":{"anyOf":[{"additionalProperties":false,"properties":{"added_lines":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hunks":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed_lines":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["added_lines","removed_lines","hunks"],"type":"object"},{"type":"null"}]}},"required":["dimension","status","left_digest","right_digest","left_count","right_count","text_delta","conclusion_kind","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"dimensions":{"items":{"additionalProperties":false,"properties":{"conclusion_kind":{"enum":["derived_relationship","contradiction","unresolved_branch"],"type":"string"},"dimension":{"enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":200,"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown"],"type":"string"},"text_delta":{"anyOf":[{"additionalProperties":false,"properties":{"added_lines":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hunks":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"removed_lines":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["added_lines","removed_lines","hunks"],"type":"object"},{"type":"null"}]}},"required":["dimension","status","left_digest","right_digest","left_count","right_count","text_delta","conclusion_kind","evidence_links","limitations"],"type":"object"},"maxItems":8,"minItems":8,"type":"array"},"function_match":{"additionalProperties":false,"properties":{"left_name":{"type":"string"},"method":{"enum":["explicit","symbol"],"type":"string"},"right_name":{"type":"string"},"status":{"enum":["matched","mismatched","ambiguous","unknown"],"type":"string"}},"required":["status","method","left_name","right_name"],"type":"object"},"left_subject_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_subject_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unchanged","changed","truncated","unknown"],"type":"object"}},"required":["status","function_match","left_subject_sha256","right_subject_sha256","summary","dimensions","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Functions"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two canonical Evidence v2 bundles by exact record membership, explicit one-to-one observation pairs, and complete residual-unknown revision histories. Missing bundle members describe omission only, never behavioral equivalence; output is digest-anchored and deterministically paginated.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"left_bundle_path":"/approved/left-evidence.json","limit":100,"offset":0,"record_pairs":[],"right_bundle_path":"/approved/right-evidence.json"}],"properties":{"left_bundle_path":{"description":"Local filesystem path for left bundle.","maxLength":4096,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"record_pairs":{"default":[],"description":"Value for record pairs.","items":{"properties":{"left_evidence_id":{"description":"Exact Evidence v2 identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_evidence_id":{"description":"Exact Evidence v2 identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"maxItems":500,"type":"array"},"right_bundle_path":{"description":"Local filesystem path for right bundle.","maxLength":4096,"minLength":1,"type":"string"}},"required":["left_bundle_path","right_bundle_path"],"type":"object"},"kind":"session","name":"compare_bundles","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["added","removed","changed","unknown","history_advanced","history_diverged"],"type":"string"},"conclusion_kind":{"enum":["observed_change","contradiction","unresolved_branch"],"type":"string"},"entity":{"enum":["evidence","residual_unknown"],"type":"string"},"key":{"minLength":1,"type":"string"},"left_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"left_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"right_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"right_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"}},"required":["entity","key","classification","conclusion_kind","left_evidence_ids","right_evidence_ids","left_digest","right_digest","limitations"],"type":"object"},"maxItems":500,"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"left_bundle_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_bundle_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","changed","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"records_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_changed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records_unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_added":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_advanced":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_diverged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_removed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unknowns_unchanged":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["records_unchanged","records_added","records_removed","records_changed","unknowns_unchanged","unknowns_added","unknowns_removed","unknowns_advanced","unknowns_diverged","unresolved"],"type":"object"}},"required":["status","left_bundle_sha256","right_bundle_sha256","summary","changes","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Compare Bundles"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Aggregate validated comparison Evidence, or automatically run and resume a persistent cross-version artifact investigation beneath an approved evidence root. Runtime observations remain distinct from static behavior candidates; missing or incomplete comparisons produce unresolved findings, never causal claims.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":{"items":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null}],"limit":100,"next_offset":null,"offset":0,"total":2},"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":null,"left_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","limitations":[],"right_count":null,"right_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"calls","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"references","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"strings_names","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"cfg","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":1,"left_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","limitations":[],"right_count":1,"right_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","status":"unchanged","text_delta":null}],"function_match":{"left_name":"main","method":"symbol","right_name":"main","status":"matched"},"left_subject_sha256":"0000000000000000000000000000000000000000000000000000000000000000","limitations":[],"right_subject_sha256":"1111111111111111111111111111111111111111111111111111111111111111","status":"unknown","summary":{"changed":1,"truncated":0,"unchanged":6,"unknown":1}},"operation":"compare_functions","parameters":{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]},"predicate_type":"rea.function-comparison/v1","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"schema_version":2,"subject":null}],"limit":100,"offset":0}],"properties":{"comparisons":{"default":[],"description":"Validated comparison Evidence records to aggregate.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"type":"array"},"investigation_run":{"anyOf":[{"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_workspace_revision":{"description":"Expected workspace revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"integrity_continue_approved":{"const":false,"default":false,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"fail","default":"fail","description":"Value for integrity policy.","type":"string"},"left_path":{"description":"Local filesystem path for left.","maxLength":4096,"minLength":1,"type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"options":{"default":{"change_limit":500,"max_compression_ratio":1000,"max_depth":20,"max_entries":10000,"max_entry_bytes":268435456,"max_path_bytes":4096,"max_total_bytes":1073741824,"page_size":500},"description":"Value for options.","properties":{"change_limit":{"default":500,"description":"Maximum number of change entries to return.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"page_size":{"default":500,"description":"Value for page size.","maximum":500,"minimum":1,"type":"integer"}},"type":"object"},"replay_run_id":{"description":"Value for replay run id.","pattern":"^run_[a-f0-9]{64}$","type":"string"},"right_path":{"description":"Local filesystem path for right.","maxLength":4096,"minLength":1,"type":"string"},"workspace_name":{"default":"default","description":"Value for workspace name.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","left_path","right_path"],"type":"object"},{"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"expected_workspace_revision":{"description":"Expected workspace revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"integrity_continue_approved":{"const":true,"description":"Explicit operator approval for integrity continue.","type":"boolean"},"integrity_policy":{"const":"record-and-continue","description":"Value for integrity policy.","type":"string"},"left_path":{"description":"Local filesystem path for left.","maxLength":4096,"minLength":1,"type":"string"},"max_integrity_mismatches":{"default":10,"description":"Maximum permitted integrity mismatches for this operation.","maximum":100,"minimum":1,"type":"integer"},"options":{"default":{"change_limit":500,"max_compression_ratio":1000,"max_depth":20,"max_entries":10000,"max_entry_bytes":268435456,"max_path_bytes":4096,"max_total_bytes":1073741824,"page_size":500},"description":"Value for options.","properties":{"change_limit":{"default":500,"description":"Maximum number of change entries to return.","maximum":500,"minimum":1,"type":"integer"},"max_compression_ratio":{"default":1000,"description":"Maximum permitted compression ratio for this operation.","maximum":100000,"minimum":1,"type":"number"},"max_depth":{"default":20,"description":"Maximum permitted depth for this operation.","maximum":100,"minimum":0,"type":"integer"},"max_entries":{"default":10000,"description":"Maximum permitted entries for this operation.","maximum":50000,"minimum":1,"type":"integer"},"max_entry_bytes":{"default":268435456,"description":"Maximum permitted entry bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"max_path_bytes":{"default":4096,"description":"Maximum permitted path bytes for this operation.","maximum":65535,"minimum":1,"type":"integer"},"max_total_bytes":{"default":1073741824,"description":"Maximum permitted total bytes for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"page_size":{"default":500,"description":"Value for page size.","maximum":500,"minimum":1,"type":"integer"}},"type":"object"},"replay_run_id":{"description":"Value for replay run id.","pattern":"^run_[a-f0-9]{64}$","type":"string"},"right_path":{"description":"Local filesystem path for right.","maxLength":4096,"minLength":1,"type":"string"},"workspace_name":{"default":"default","description":"Value for workspace name.","maxLength":200,"minLength":1,"type":"string"},"workspace_path":{"description":"Approved local path of the persistent investigation workspace.","maxLength":4096,"minLength":1,"type":"string"}},"required":["approved","workspace_path","left_path","right_path","integrity_policy","integrity_continue_approved"],"type":"object"}],"description":"Value for investigation run."},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"type":"object"},"kind":"session","name":"find_changed_behavior","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"behavior_status":{"enum":["observed_changed","observed_unchanged","unknown","truncated"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":3,"type":"array"},"findings":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["observed_change","derived_relationship","contradiction","unresolved_branch"],"type":"string"},"dimension":{"minLength":1,"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":201,"minItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"scope":{"enum":["runtime","protocol","resource","static_candidate"],"type":"string"},"source_comparison_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["scope","dimension","classification","status","source_comparison_id","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"investigation_run":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"inventory_evidence_count":{"maximum":200,"minimum":2,"type":"integer"},"left_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"maxLength":4096,"type":"string"},"maxItems":100,"type":"array"},"right_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"},"run_id":{"pattern":"^run_[a-f0-9]{64}$","type":"string"},"schema_version":{"const":1,"type":"number"},"workspace_id":{"pattern":"^ws_[a-f0-9]{64}$","type":"string"}},"required":["schema_version","workspace_id","run_id","left_manifest_id","right_manifest_id","inventory_evidence_count","comparison_evidence_id","limitations"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"summary":{"additionalProperties":false,"properties":{"contradictions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"observed_changes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_candidates":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["observed_changes","static_candidates","contradictions","unresolved"],"type":"object"}},"required":["behavior_status","summary","findings","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Find Changed Behavior"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Build bounded shortest-first direct-callee paths from explicit analyze_function Evidence groups using exact canonical addresses. Missing dossiers, incomplete callee pages, provider mixing, and depth frontiers remain unknown; every node and edge cites source Evidence.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"functions":[{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"basic_blocks":{"items":[{"end":"0x1001","start":"0x1000","successors":[]}],"next_offset":null,"returned":1,"total":1,"truncated":false},"callees":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"callers":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"comments":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"incoming_references":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"instruction_scan":{"scanned":1,"truncated":false},"outgoing_references":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":{"next_offset":null,"returned_chars":9,"text":"return 0;","total_chars":9,"truncated":false},"referenced_names":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false},"referenced_strings":{"items":[],"next_offset":null,"returned":0,"total":0,"truncated":false}},"operation":"analyze_function","parameters":{"assembly_offset":0,"collection_offset":{"basic_blocks":0,"callees":0,"callers":0,"comments":0,"incoming_references":0,"outgoing_references":0,"referenced_names":0,"referenced_strings":0},"include_assembly":false,"limit":100,"max_instructions":500,"max_pseudocode_chars":20000,"procedure":"main","pseudocode_offset":0},"predicate_type":"rea.analysis/v2","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"schema_version":2,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"mach-o","local_path":"/tmp/function-0","name":"function-0"}}],"goal":{"address":"0x1000"},"limit":100,"max_depth":8,"max_paths":10,"offset":0,"start":{"address":"0x1000"}}],"properties":{"functions":{"description":"Value for functions.","items":{"anyOf":[{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},{"items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"}]},"maxItems":500,"minItems":1,"type":"array"},"goal":{"additionalProperties":false,"description":"Value for goal.","properties":{"address":{"description":"Value for address.","pattern":"^0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"max_depth":{"default":8,"description":"Maximum permitted depth for this operation.","maximum":32,"minimum":0,"type":"integer"},"max_paths":{"default":10,"description":"Maximum permitted paths for this operation.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"start":{"additionalProperties":false,"description":"Value for start.","properties":{"address":{"description":"Value for address.","pattern":"^0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["functions","start","goal"],"type":"object"},"kind":"session","name":"build_call_path","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":50000,"minItems":1,"type":"array"},"explored":{"additionalProperties":false,"properties":{"depth_reached":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["nodes","edges","depth_reached"],"type":"object"},"goal":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"source":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"target":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"}},"required":["source","target","evidence_links"],"type":"object"},"maxItems":32,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3300,"minItems":1,"type":"array"},"hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","evidence_links"],"type":"object"},"maxItems":33,"minItems":1,"type":"array"}},"required":["hops","nodes","edges","evidence_links"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"lower_bound":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"returned":{"maximum":100,"minimum":0,"type":"integer"},"total":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"truncated":{"type":"boolean"}},"required":["items","offset","limit","total","returned","truncated","lower_bound","next_offset"],"type":"object"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"},"max_depth":{"maximum":32,"minimum":0,"type":"integer"},"max_paths":{"maximum":100,"minimum":1,"type":"integer"}},"required":["max_depth","max_paths","exhaustive"],"type":"object"},"shortest_hops":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"start":{"pattern":"^0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"enum":["found","not_found","unknown","truncated"],"type":"string"}},"required":["status","start","goal","shortest_hops","search_scope","explored","paths","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Build Call Path"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate explicit caller-declared hypotheses between exact static comparison findings and runtime comparison dimensions. Similar names or paths are never auto-matched, consistent cochange never proves causality, and unknown or truncated inputs remain unresolved.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"mappings":[{"hypothesis":{"expected_pattern":"static_only","statement":"Static implementation changed without terminal change."},"runtime":{"comparison_evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","dimension":"terminal"},"side_alignment":"left_to_left","static":{"comparison_evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","selector":{"dimension":"pseudocode","kind":"function"}}}],"offset":0,"runtime_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","evidence_links":["ev_0014950a3b67b96d5d182a51c5a271959828fe6a91db55fc507dd5a9c2a5ecaf","ev_5d45bc669ea10694f3bdf3b325e2048844da96a621b717ad252d667af53df590"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"exit":"unchanged","filesystem":"unchanged","first_divergence":{"status":"none"},"interaction":"unchanged","limitations":[],"process":"unchanged","protocol":"unchanged","shim":"unchanged","status":"unchanged","terminal":"unchanged"},"operation":"compare_process_captures","parameters":{"left_evidence_id":"ev_0014950a3b67b96d5d182a51c5a271959828fe6a91db55fc507dd5a9c2a5ecaf","left_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"right_evidence_id":"ev_5d45bc669ea10694f3bdf3b325e2048844da96a621b717ad252d667af53df590","right_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10}},"predicate_type":"rea.process-comparison/v3","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"schema_version":2,"subject":null}],"static_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_68c195e7d5d8688f3eb0764a9a868355fcc6f8810fc9ada1a0c8579c21ea2bf8","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":{"items":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null}],"limit":100,"next_offset":null,"offset":0,"total":2},"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":null,"left_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","limitations":[],"right_count":null,"right_digest":"dd190a914de1bdf8f4bba97a2e74b439585874c567f28eb0ff41bc5388c66d65","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":9,"left_digest":"64abdfe133a114158fa0e185d0edec784e6ccf13a166a0fed8bc18bb0cc72554","limitations":[],"right_count":9,"right_digest":"c8e26d77640903b2d4c765ebcb7f7170b64dd320dd3911abbe8346e07cd593d1","status":"changed","text_delta":{"added_lines":1,"hunks":2,"removed_lines":1}},{"conclusion_kind":"unresolved_branch","dimension":"assembly","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":null,"limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":null,"status":"unknown","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"calls","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"references","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"strings_names","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":0,"left_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","limitations":[],"right_count":0,"right_digest":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","status":"unchanged","text_delta":null},{"conclusion_kind":"derived_relationship","dimension":"cfg","evidence_links":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e","ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"],"left_count":1,"left_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","limitations":[],"right_count":1,"right_digest":"e947121f0d4cb8d2a2468a75a44872a29aa1239e6401712df80cfa36bf7df7a0","status":"unchanged","text_delta":null}],"function_match":{"left_name":"main","method":"symbol","right_name":"main","status":"matched"},"left_subject_sha256":"0000000000000000000000000000000000000000000000000000000000000000","limitations":[],"right_subject_sha256":"1111111111111111111111111111111111111111111111111111111111111111","status":"unknown","summary":{"changed":1,"truncated":0,"unchanged":6,"unknown":1}},"operation":"compare_functions","parameters":{"left_evidence_ids":["ev_ff8eed2e28fd9549add0c20d7573566358ad228b980f538e2e0709155a456e1e"],"limit":100,"offset":0,"right_evidence_ids":["ev_7cee7dd9a31cbb2881b2db1c9042ebb961cef07c9152da5ab533b52a0a3492e0"]},"predicate_type":"rea.function-comparison/v1","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"schema_version":2,"subject":null}]}],"properties":{"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"mappings":{"description":"Value for mappings.","items":{"additionalProperties":false,"properties":{"hypothesis":{"additionalProperties":false,"description":"Value for hypothesis.","properties":{"expected_pattern":{"description":"Expected pattern used to reject stale or mismatched input.","enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"description":"Value for statement.","maxLength":500,"minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"runtime":{"additionalProperties":false,"description":"Value for runtime.","properties":{"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"}},"required":["comparison_evidence_id","dimension"],"type":"object"},"side_alignment":{"description":"Value for side alignment.","enum":["left_to_left","left_to_right"],"type":"string"},"static":{"additionalProperties":false,"description":"Value for static.","properties":{"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"selector":{"description":"Value for selector.","oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact","description":"Value for kind.","type":"string"},"logical_path":{"description":"Local filesystem path for logical.","maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","logical_path"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"description":"Value for dimension.","enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"function","description":"Value for kind.","type":"string"}},"required":["kind","dimension"],"type":"object"}]}},"required":["comparison_evidence_id","selector"],"type":"object"}},"required":["static","runtime","side_alignment","hypothesis"],"type":"object"},"maxItems":500,"minItems":1,"type":"array"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"runtime_comparisons":{"description":"Value for runtime comparisons.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"static_comparisons":{"description":"Value for static comparisons.","items":{"additionalProperties":false,"properties":{"analysis_profile":{"description":"Value for analysis profile.","properties":{"digest":{"description":"Value for digest.","pattern":"^[a-f0-9]{64}$","type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["id","name","version"],"type":"object"},"provider_profile_schema_version":{"description":"Value for provider profile schema version.","maximum":9007199254740991,"minimum":1,"type":"integer"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","provider","provider_profile_schema_version","parameters","digest"],"type":"object"},"authority":{"description":"Value for authority.","enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},"confidence":{"description":"Value for confidence.","enum":["observed","derived","inferred"],"type":"string"},"environment":{"anyOf":[{"properties":{"architecture":{"description":"Value for architecture.","minLength":1,"type":"string"},"id":{"description":"Value for id.","minLength":1,"type":"string"},"isolation":{"description":"Value for isolation.","enum":["none","process","container","virtual-machine"],"type":"string"},"platform":{"description":"Value for platform.","minLength":1,"type":"string"}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for environment."},"evidence_id":{"description":"Stable identifier of the recorded Evidence v2 observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_links":{"description":"Value for evidence links.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"type":"string"},"type":"array"},"locations":{"description":"Value for locations.","items":{"oneOf":[{"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"kind":{"const":"address","description":"Value for kind.","type":"string"}},"required":["kind","address"],"type":"object"},{"properties":{"end":{"description":"Value for end.","minLength":1,"type":"string"},"kind":{"const":"address-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","minLength":1,"type":"string"}},"required":["kind","start","end"],"type":"object"},{"properties":{"kind":{"const":"artifact-path","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"}},"required":["kind","path"],"type":"object"},{"properties":{"kind":{"const":"file-offset","description":"Value for kind.","type":"string"},"offset":{"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","offset"],"type":"object"},{"properties":{"end":{"description":"Value for end.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"file-offset-range","description":"Value for kind.","type":"string"},"start":{"description":"Value for start.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","start","end"],"type":"object"}]},"type":"array"},"normalized_result":{"$ref":"#/$defs/__schema0","description":"Value for normalized result."},"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"parameters":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"description":"Value for parameters.","propertyNames":{"type":"string"},"type":"object"},"predicate_type":{"description":"Value for predicate type.","minLength":1,"type":"string"},"provider":{"description":"Value for provider.","properties":{"id":{"description":"Value for id.","minLength":1,"type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for version."}},"required":["id","name","version"],"type":"object"},"raw_result":{"anyOf":[{"$ref":"#/$defs/__schema0"},{"type":"null"}],"description":"Value for raw result."},"schema_version":{"const":2,"description":"Version of this structured result schema.","type":"number"},"subject":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"enum":["x86","x86_64","arm","arm64"],"type":"string"},{"type":"null"}],"description":"Value for architecture."},"digest":{"description":"Value for digest.","properties":{"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["sha256"],"type":"object"},"format":{"description":"Declared input artifact format.","enum":["hopper","analysis-database","mach-o","elf","pe","zip","ipa","apk","msix","appx","asar","dmg","pkg","plist","javascript","source-map","directory","file","unknown","mach-o-universal","javascript-bundle","entitlements"],"type":"string"},"local_path":{"description":"Local filesystem path for local.","type":"string"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","digest","format","architecture","local_path"],"type":"object"},{"type":"null"}],"description":"Value for subject."}},"required":["schema_version","evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"maxItems":100,"minItems":1,"type":"array"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["static_comparisons","runtime_comparisons","mappings"],"type":"object"},"kind":"session","name":"correlate_static_and_runtime","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"correlations":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"classification":{"enum":["hypothesis","contradiction","unresolved_branch"],"type":"string"},"correlation_id":{"pattern":"^cor_[a-f0-9]{64}$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":2,"type":"array"},"hypothesis":{"additionalProperties":false,"properties":{"expected_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"maxLength":500,"minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"observed_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged","unknown","truncated"],"type":"string"},"runtime":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"enum":["terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["comparison_evidence_id","dimension","status"],"type":"object"},"side_alignment":{"enum":["left_to_left","left_to_right"],"type":"string"},"static":{"additionalProperties":false,"properties":{"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"conclusion_kind":{"enum":["derived_relationship","contradiction","unresolved_branch"],"type":"string"},"selector":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact","type":"string"},"logical_path":{"maxLength":4096,"minLength":1,"type":"string"}},"required":["kind","logical_path"],"type":"object"},{"additionalProperties":false,"properties":{"dimension":{"enum":["identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"function","type":"string"}},"required":["kind","dimension"],"type":"object"}]},"status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"}},"required":["comparison_evidence_id","selector","status","conclusion_kind"],"type":"object"}},"required":["correlation_id","static","runtime","side_alignment","hypothesis","observed_pattern","classification","evidence_links","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":2,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"status":{"enum":["correlated","contradicted","unknown","truncated"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"contradictions":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"hypotheses":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unresolved":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["hypotheses","contradictions","unresolved"],"type":"object"}},"required":["status","summary","correlations","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Correlate Static And Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Verify a finite typed behavioral and structural specification against a canonical Evidence bundle. Pass means every declared claim has complete comparable authority—not global source equivalence; changed claims fail and missing, limited, or unresolved evidence stays unknown.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0,"specification":{"claims":[{"claim_id":"terminal-output","comparison_evidence_id":"ev_2ffc472e561cea4b5e65ddaf7b80bc112b7ed6d0d023f0cf7398bc2068a12e2d","dimension":"terminal","kind":"behavioral","title":"Terminal output remains equivalent"}],"name":"Terminal compatibility","schema_version":1}}],"properties":{"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","maxLength":200,"minLength":1,"type":"string"},"revision":{"description":"Value for revision.","maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_sha256":{"description":"Exact SHA-256 digest of revision.","pattern":"^[a-f0-9]{64}$","type":"string"},"workspace_id":{"description":"Value for workspace id.","pattern":"^rcw_[a-f0-9]{64}$","type":"string"}},"required":["workspace_id","revision","revision_sha256","boundary_id"],"type":"object"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"specification":{"description":"Value for specification.","properties":{"claims":{"description":"Value for claims.","items":{"oneOf":[{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","terminal","interaction","exit","filesystem","protocol","process","shim"],"type":"string"},"kind":{"const":"behavioral","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"},{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","identity","pseudocode","assembly","comments","calls","references","strings_names","cfg"],"type":"string"},"kind":{"const":"structural-function","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"},{"properties":{"claim_id":{"description":"Value for claim id.","pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence v2 identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"const":"overall","description":"Value for dimension.","type":"string"},"kind":{"const":"structural-artifact","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","maxLength":500,"minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"}]},"maxItems":100,"minItems":1,"type":"array"},"name":{"description":"Exact name used by this operation.","maxLength":200,"minLength":1,"type":"string"},"schema_version":{"const":1,"description":"Version of this structured result schema.","type":"number"}},"required":["schema_version","name","claims"],"type":"object"},"unknown_registry_approved":{"const":true,"description":"Explicit approval to record bounded residual uncertainty in the session registry.","type":"boolean"}},"required":["specification"],"type":"object"},"kind":"session","name":"verify_reconstruction","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"evidence_uri":{"pattern":"^rea:\\\\/\\\\/evidence\\\\/ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"claims":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"claim_id":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"comparison_evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"minLength":1,"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":201,"minItems":3,"type":"array"},"kind":{"enum":["behavioral","structural-function","structural-artifact"],"type":"string"},"left_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"observed_status":{"enum":["unchanged","added","removed","changed","truncated","unknown","contradiction"],"type":"string"},"right_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["claim_id","kind","dimension","status","observed_status","comparison_evidence_id","left_evidence_ids","right_evidence_ids","evidence_links","unknown_ids","limitations"],"type":"object"},"maxItems":100,"type":"array"},"limit":{"maximum":100,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":100,"minimum":1,"type":"integer"}},"required":["items","offset","limit","total","next_offset"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":20100,"minItems":3,"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"claim_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]{0,99}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["operation","rationale","claim_ids","unknown_ids"],"type":"object"},"maxItems":2000,"type":"array"},"specification_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"behavioral":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"failed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"passed":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"structural":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":100,"minimum":1,"type":"integer"},"unknown":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","passed","failed","unknown","behavioral","structural"],"type":"object"}},"required":["status","specification_sha256","summary","claims","recommended_probes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence_uri"],"type":"object"},"requiresSession":true,"title":"Verify Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"List current residual-unknown heads in deterministic ID order, with optional exact status, severity, and domain filters. Pages default to 100 items; while has_more is true, pass next_offset as offset and continue until false. This is read-only; unresolved, contradicted, and non-truth dispositions remain distinct.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"limit":100,"offset":0}],"properties":{"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"limit":{"default":100,"description":"Maximum number of results to return in this page.","maximum":500,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Zero-based index of the first result to return.","maximum":9007199254740991,"minimum":0,"type":"integer"},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"}},"type":"object"},"kind":"session","name":"list_unknowns","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"items":{"items":{"additionalProperties":false,"properties":{"unknown":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"uri":{"pattern":"^rea:\\\\/\\\\/unknown\\\\/unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown","uri"],"type":"object"},"type":"array"},"limit":{"maximum":500,"minimum":1,"type":"integer"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","offset","limit","total","next_offset","has_more"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"List Unknowns"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Create one deterministic residual unknown and immutable mutation evidence. Requires approved: true, validates all evidence and relationship references, and rejects duplicate stable identity.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"contradicting_evidence_ids":[],"domain":"protocol","question":"Does this branch require an unavailable external service?","recommended_probes":[{"operation":"capture_process_scenario","rationale":"Replay branch."}],"relationships":[],"required_authority":"controlled-replay","required_confidence":"observed","required_environment":null,"severity":"medium","supporting_evidence_ids":[]}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"contradicting_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"description":"Value for domain.","maxLength":100,"minLength":1,"type":"string"},"question":{"description":"Concrete unresolved question to retain for later investigation.","maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"supporting_evidence_ids":{"default":[],"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"}},"required":["question","severity","domain","required_authority","required_confidence","required_environment","recommended_probes","relationships","approved"],"type":"object"},"kind":"session","name":"record_unknown","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Record Unknown"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Append one immutable full-state revision and mutation evidence. Requires approved: true and exact expected_revision; stale concurrent writers fail instead of overwriting newer analysis.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":false,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","examples":[{"approved":true,"contradicting_evidence_ids":[],"expected_revision":1,"recommended_probes":[],"relationships":[],"required_authority":"controlled-replay","required_confidence":"observed","required_environment":null,"resolution":null,"severity":"medium","status":"investigating","supporting_evidence_ids":[],"unknown_id":"unk_0000000000000000000000000000000000000000000000000000000000000000"}],"properties":{"approved":{"const":true,"description":"Explicit operator approval to perform this operation.","type":"boolean"},"contradicting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"expected_revision":{"description":"Expected revision used to reject stale or mismatched input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","maxLength":200,"minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"relationships":{"description":"Value for relationships.","items":{"properties":{"type":{"description":"Value for type.","enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}],"description":"Value for required authority."},"required_confidence":{"description":"Value for required confidence.","enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for id."},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}],"description":"Value for isolation."},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for platform."}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}],"description":"Value for required environment."},"resolution":{"anyOf":[{"oneOf":[{"properties":{"disposition":{"const":"verified","description":"Value for disposition.","type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"properties":{"disposition":{"description":"Value for disposition.","enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"description":"Value for rationale.","maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}],"description":"Value for resolution."},"severity":{"description":"Value for severity.","enum":["low","medium","high","critical"],"type":"string"},"status":{"description":"Current lifecycle or verification status.","enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"description":"Ordered Evidence v2 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id","expected_revision","approved","status","severity","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution"],"type":"object"},"kind":"session","name":"update_unknown","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Update Unknown"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Revalidate the current residual-unknown head against live bundled evidence, exact authority/confidence/environment requirements, and revision integrity. Withdrawn and out-of-scope dispositions are not truth claims.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"unknown_id":"unk_0000000000000000000000000000000000000000000000000000000000000000"}],"properties":{"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id"],"type":"object"},"kind":"session","name":"verify_unknown_resolution","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"truthVerified":{"type":"boolean"},"unknown":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"domain":{"maxLength":100,"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"maxLength":1000,"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"maxLength":200,"minLength":1,"type":"string"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"maxItems":20,"type":"array"},"registry_version":{"const":1,"type":"number"},"relationships":{"items":{"additionalProperties":false,"properties":{"type":{"enum":["depends-on","related-to","contradicts"],"type":"string"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["type","unknown_id"],"type":"object"},"maxItems":100,"type":"array"},"required_authority":{"anyOf":[{"enum":["shipped-artifact","controlled-replay","historical-reference","external-service","analyst-inference"],"type":"string"},{"type":"null"}]},"required_confidence":{"enum":["observed","derived","inferred"],"type":"string"},"required_environment":{"anyOf":[{"additionalProperties":false,"properties":{"architecture":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200,"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"maxLength":100,"minLength":1,"type":"string"},{"type":"null"}]}},"required":["id","platform","architecture","isolation"],"type":"object"},{"type":"null"}]},"resolution":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"disposition":{"const":"verified","type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"minItems":1,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"},{"additionalProperties":false,"properties":{"disposition":{"enum":["withdrawn","out-of-scope"],"type":"string"},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"rationale":{"maxLength":1000,"minLength":1,"type":"string"}},"required":["disposition","rationale","evidence_ids"],"type":"object"}]},{"type":"null"}]},"revision":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"revision_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"scope_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"severity":{"enum":["low","medium","high","critical"],"type":"string"},"status":{"enum":["open","investigating","blocked","contradicted","resolved"],"type":"string"},"supporting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":100,"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["registry_version","unknown_id","revision","previous_revision_digest","revision_digest","scope_digest","question","status","severity","domain","supporting_evidence_ids","contradicting_evidence_ids","required_authority","required_confidence","required_environment","recommended_probes","relationships","resolution","mutation_evidence_ids"],"type":"object"},"valid":{"type":"boolean"}},"required":["valid","truthVerified","unknown"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Verify Unknown Resolution"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Evaluate ordered HTTP and WebSocket events directly against one validated finite replay machine without opening sockets or launching a target. Returns every decision, a capture-value-free transition journal, one redacted action table entry per used transition, captured aliases, final state, and exact configured and consumed limits.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":false,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"events":[{"at_ms":0,"body":"{\\"token\\":\\"opaque\\"}","connection":"not_applicable","headers":{},"method":"POST","path":"/callback","protocol":"http"}],"machine":{"initial_state":"waiting","limits":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"max_transitions":1,"states":[{"max_visits":100000,"name":"waiting","terminal":false},{"max_visits":100000,"name":"complete","terminal":true}],"transitions":[{"actions":[{"body":"","headers":{},"status":204,"type":"http_response"}],"captures":[{"sensitive":true,"value":{"path":["token"],"source":"request_json"},"variable":"token"}],"from":"waiting","guards":[],"id":"accept_callback","max_uses":1,"priority":100,"to":"complete","trigger":{"body":null,"headers":{},"method":"POST","path":"/callback","protocol":"http"}}]}}],"properties":{"events":{"description":"Value for events.","items":{"oneOf":[{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"const":"not_applicable","description":"Value for connection.","type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","type":"null"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","type":"null"},"path":{"description":"Local filesystem path used by this operation.","maxLength":8192,"pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"}]},"maxItems":10000,"type":"array"},"machine":{"additionalProperties":false,"description":"Value for machine.","properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Bounded resource-consumption and result-size limits for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":10000000,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":1000,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":300000,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":100000,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":100000,"minimum":1,"type":"integer"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"max_visits":{"default":100000,"description":"Maximum permitted visits for this operation.","maximum":100000,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"maxItems":256,"minItems":1,"type":"array"},"transitions":{"description":"Value for transitions.","items":{"additionalProperties":false,"properties":{"actions":{"description":"Value for actions.","items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"description":"Value for body.","maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","description":"Value for type.","type":"string"}},"required":["type","status","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"description":"Value for data.","maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","description":"Value for type.","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"minItems":1,"type":"array"},"captures":{"description":"Value for captures.","items":{"additionalProperties":false,"properties":{"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"guards":{"description":"Value for guards.","items":{"additionalProperties":false,"properties":{"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"source":{"const":"request_header","description":"Value for source.","type":"string"}},"required":["source","name"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"request_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"websocket_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"},{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","items":{"anyOf":[{"maxLength":256,"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"maxItems":32,"type":"array"},"source":{"const":"action_json","description":"Value for source.","type":"string"}},"required":["source","path"],"type":"object"}]},"variable":{"description":"Value for variable.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["variable","value"],"type":"object"},"maxItems":32,"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":10000,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":1000,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","maxLength":16,"minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"http","description":"Value for protocol.","type":"string"}},"required":["protocol","method","path"],"type":"object"},{"additionalProperties":false,"properties":{"headers":{"additionalProperties":{"maxLength":8192,"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_connect","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"},{"additionalProperties":false,"properties":{"body":{"anyOf":[{"maxLength":1000000,"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","path"],"type":"object"}]}},"required":["id","from","to","trigger","actions","max_uses"],"type":"object"},"maxItems":2000,"minItems":1,"type":"array"}},"required":["initial_state","states","transitions","max_transitions"],"type":"object"}},"required":["machine","events"],"type":"object"},"kind":"session","name":"run_replay_machine","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"decisions":{"items":{"additionalProperties":false,"properties":{"event_sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"outcome":{"anyOf":[{"const":"matched","type":"string"},{"enum":["unmatched","invalid_state","guard_failed","transition_exhausted","invalid_capture","unexpected_reconnect","limit_exhausted"],"type":"string"}]},"transition_sequence":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["event_sequence","outcome","transition_sequence"],"type":"object"},"maxItems":10000,"type":"array"},"final_state":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"initial_state":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"limits":{"additionalProperties":false,"properties":{"configured":{"additionalProperties":false,"properties":{"bytes":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"connections":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"duration_ms":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"messages":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"transitions":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["transitions","connections","messages","bytes","duration_ms"],"type":"object"},"usage":{"additionalProperties":false,"properties":{"admitted_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"connections":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"last_at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"messages":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"offered_events":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"transitions":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["offered_events","admitted_events","transitions","connections","messages","bytes","last_at_ms"],"type":"object"}},"required":["configured","usage"],"type":"object"},"schema_version":{"const":1,"type":"number"},"terminal":{"type":"boolean"},"transition_actions":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"maxLength":1000000,"type":"string"},"headers":{"additionalProperties":{"maxLength":8192,"type":"string"},"propertyNames":{"maxLength":256,"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"status":{"maximum":599,"minimum":100,"type":"integer"},"type":{"const":"http_response","type":"string"}},"required":["type","status","headers","body"],"type":"object"},{"additionalProperties":false,"properties":{"data":{"maxLength":1000000,"type":"string"},"type":{"const":"websocket_send","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"disconnect","type":"string"}},"required":["type"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"maximum":30000,"minimum":0,"type":"integer"},"type":{"const":"delay","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"maxItems":32,"type":"array"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["transition_id","actions"],"type":"object"},"maxItems":2000,"type":"array"},"transition_journal":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"captured_aliases":{"items":{"additionalProperties":false,"properties":{"name":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"sensitive":{"type":"boolean"}},"required":["name","sensitive"],"type":"object"},"maxItems":32,"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"state_before":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["sequence","at_ms","transition_id","state_before","state_after","captured_aliases"],"type":"object"},"maxItems":10000,"type":"array"}},"required":["schema_version","initial_state","final_state","terminal","decisions","transition_journal","transition_actions","limits"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Run Replay Machine"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Retain the current canonical Evidence v2 bundle as an immutable session resource. Returns a compact digest summary and exact opaque URI; copy that URI unchanged and call MCP resources/read (Codex: read_mcp_resource) for the full bundle. Repeating an unchanged snapshot is idempotent.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{},"type":"object"},"kind":"session","name":"snapshot_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"bundle_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"bundle_uri":{"pattern":"^rea:\\\\/\\\\/evidence-bundle\\\\/[a-f0-9]{64}$","type":"string"},"bundle_version":{"const":2,"type":"number"},"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"scope":{"const":"session","type":"string"},"survives_session":{"const":false,"type":"boolean"},"unknowns":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["bundle_digest","bundle_version","bytes","records","unknowns","scope","survives_session","bundle_uri"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Snapshot Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Release one immutable session-retained Evidence v2 bundle by exact digest. This is the recovery operation when bounded bundle retention is exhausted; releasing an unknown digest is idempotent and reports released: false.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":true,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"bundle_digest":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"}],"properties":{"bundle_digest":{"description":"Value for bundle digest.","pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["bundle_digest"],"type":"object"},"kind":"session","name":"release_evidence_bundle","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"bundle_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"released":{"type":"boolean"}},"required":["bundle_digest","released"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Release Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compose the selected document, current address, and containing/current procedure into one provider-neutral result. The result reflects sequential provider observations, not an atomic cursor snapshot; a cursor outside any procedure returns procedure: null. Scalar navigation getters remain available for evaluation and compatibility.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{}],"properties":{"document":{"description":"Exact provider document or program identity.","minLength":1,"type":"string"}},"type":"object"},"kind":"session","name":"get_navigation_context","outputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"document":{"type":"string"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["document","address","procedure"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Get Navigation Context"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one explicit reproducible address for its analyzed name, containing procedure, regular and inline comments, and matching bookmarks. Each unsupported facet returns a typed unavailable outcome; xrefs, assembly, and pseudocode remain separate bounded follow-ups.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":false,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":false},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"address":"0x1000"}],"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"document":{"description":"Exact provider document or program identity.","minLength":1,"type":"string"}},"required":["address"],"type":"object"},"kind":"session","name":"inspect_address_context","outputSchema":{"$defs":{"__schema0":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"},{"items":{"$ref":"#/$defs/__schema0"},"type":"array"},{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"bookmarks":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"name":{"type":"string"}},"required":["address","name"],"type":"object"},"type":"array"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"comment":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"document":{"anyOf":[{"type":"string"},{"type":"null"}]},"inline_comment":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"name":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]},"procedure":{"oneOf":[{"additionalProperties":false,"properties":{"state":{"const":"available","type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["state","value"],"type":"object"},{"additionalProperties":false,"properties":{"reason":{"type":"string"},"remediation":{"type":"string"},"state":{"const":"unavailable","type":"string"}},"required":["state","reason","remediation"],"type":"object"}]}},"required":["address","document","name","procedure","comment","inline_comment","bookmarks"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Inspect Address Context"}]}'; const generatedPayload: unknown = JSON.parse(GENERATED_PAYLOAD_JSON); if (!isGeneratedPayload(generatedPayload)) throw new TypeError("Generated MCP catalog payload is invalid"); diff --git a/src/ghidra/GhidraClient.ts b/src/ghidra/GhidraClient.ts index 248ce613b..60680916f 100644 --- a/src/ghidra/GhidraClient.ts +++ b/src/ghidra/GhidraClient.ts @@ -492,7 +492,7 @@ export class GhidraClient { } #interruptionFailure(deadline: ProviderStartupDeadline): GhidraSessionError { - return deadline.cancelled + return deadline.interruption === "cancelled" ? this.#failure("cancelled", "Ghidra startup was cancelled") : this.#failure("timeout", "Ghidra startup deadline elapsed", undefined, { timeoutMs: deadline.timeoutMs, diff --git a/src/ghidra/GhidraClientStartup.ts b/src/ghidra/GhidraClientStartup.ts index 1c593f6e9..f832535f6 100644 --- a/src/ghidra/GhidraClientStartup.ts +++ b/src/ghidra/GhidraClientStartup.ts @@ -66,7 +66,7 @@ export async function completeGhidraStartupHandshake( const interruptionFailure = ( options: GhidraStartupHandshakeOptions, ): GhidraSessionError => - options.deadline.cancelled + options.deadline.interruption === "cancelled" ? options.failure("cancelled", "Ghidra startup was cancelled") : options.failure("timeout", "Ghidra startup deadline elapsed", undefined, { timeoutMs: options.startupTimeoutMs, diff --git a/src/ghidra/GhidraFunctionValues.ts b/src/ghidra/GhidraFunctionValues.ts index 44ad593ee..4905374fe 100644 --- a/src/ghidra/GhidraFunctionValues.ts +++ b/src/ghidra/GhidraFunctionValues.ts @@ -6,11 +6,7 @@ import { functionDossierSchema, type FunctionDossier, } from "../domain/hopperValues.js"; -import { - jsonObjectSchema, - jsonValueSchema, - type JsonValue, -} from "../domain/jsonValue.js"; +import type { JsonValue } from "../domain/jsonValue.js"; import { nativeApiBoundarySchema } from "../domain/nativeApiBoundary.js"; import { err, ok, type Result } from "../domain/result.js"; import { @@ -117,7 +113,7 @@ export const parseGhidraFunctionInput = ( ): Result>, AnalysisInputError> => { const parsed = inputSchemas[operation].safeParse(value); return parsed.success - ? ok(jsonObjectSchema.parse(parsed.data)) + ? ok(parsed.data) : err(new AnalysisInputError(operation, { cause: parsed.error })); }; @@ -171,15 +167,24 @@ const referenceEdge = z kind: referenceKind, }) .strict(); +const boundedReferenceFacts = { + items: z.array(referenceEdge), + total: z.number().int().min(0).nullable(), + returned: z.number().int().min(0), +} as const; const boundedReferences = z - .object({ - items: z.array(referenceEdge), - total: z.number().int().min(0).nullable(), - returned: z.number().int().min(0), - truncated: z.boolean(), - next_offset: z.number().int().min(0).nullable(), - }) - .strict() + .discriminatedUnion("truncated", [ + z.strictObject({ + ...boundedReferenceFacts, + truncated: z.literal(false), + next_offset: z.null(), + }), + z.strictObject({ + ...boundedReferenceFacts, + truncated: z.literal(true), + next_offset: z.number().int().min(0).nullable(), + }), + ]) .superRefine((value, context) => { if (value.returned !== value.items.length) context.addIssue({ @@ -193,12 +198,6 @@ const boundedReferences = z path: ["total"], message: "total cannot be smaller than returned", }); - if (value.next_offset !== null && !value.truncated) - context.addIssue({ - code: "custom", - path: ["next_offset"], - message: "a continuation requires truncated output", - }); }); const procedureReferences = z .object({ @@ -345,7 +344,7 @@ export const parseGhidraFunctionResult = ( ): Result => { const parsed = resultSchemas[operation].safeParse(value); return parsed.success - ? ok(jsonValueSchema.parse(parsed.data)) + ? ok(parsed.data) : err( new AnalysisOutputError( operation, diff --git a/src/ghidra/GhidraInventoryValues.ts b/src/ghidra/GhidraInventoryValues.ts index 6b96f0f57..fdbafcc95 100644 --- a/src/ghidra/GhidraInventoryValues.ts +++ b/src/ghidra/GhidraInventoryValues.ts @@ -1,11 +1,7 @@ import { z } from "zod"; import { AnalysisInputError, AnalysisOutputError } from "../domain/errors.js"; -import { - jsonObjectSchema, - jsonValueSchema, - type JsonValue, -} from "../domain/jsonValue.js"; +import type { JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; /** Read-only direct operations admitted by the Ghidra v1 adapter. */ @@ -80,7 +76,7 @@ export const parseGhidraInventoryInput = ( const parsed = inputSchemas[operation].safeParse(value); if (!parsed.success) return err(new AnalysisInputError(operation, { cause: parsed.error })); - return ok(jsonObjectSchema.parse(parsed.data)); + return ok(parsed.data); }; export const ghidraCanonicalAddressSchema = z @@ -126,17 +122,29 @@ const procedureItem = z const stringItem = z.object({ ...baseItem, string: stringFacts }).strict(); const searchItem = z.object(baseItem).strict(); -const pageSchema = (item: Item, maximumLimit: number) => - z - .object({ - items: z.array(item), - offset: z.number().int().min(0), - limit: z.number().int().min(1).max(maximumLimit), - total: z.number().int().min(0), - next_offset: z.number().int().min(0).nullable(), - has_more: z.boolean(), - }) - .strict() +const pageSchema = ( + item: Item, + maximumLimit: number, +) => { + const pageFacts = { + items: z.array(item), + offset: z.number().int().min(0), + limit: z.number().int().min(1).max(maximumLimit), + total: z.number().int().min(0), + } as const; + return z + .discriminatedUnion("has_more", [ + z.strictObject({ + ...pageFacts, + has_more: z.literal(true), + next_offset: z.number().int().min(0), + }), + z.strictObject({ + ...pageFacts, + has_more: z.literal(false), + next_offset: z.null(), + }), + ]) .superRefine((page, context) => { const next = page.offset + page.items.length; const hasMore = next < page.total; @@ -171,6 +179,7 @@ const pageSchema = (item: Item, maximumLimit: number) => message: "page continuation offset is inconsistent", }); }); +}; const availablePermissions = z .object({ @@ -241,7 +250,7 @@ export const parseGhidraInventoryResult = ( ): Result => { const parsed = resultSchemas[operation].safeParse(value); return parsed.success - ? ok(jsonValueSchema.parse(parsed.data)) + ? ok(parsed.data) : err( new AnalysisOutputError( operation, diff --git a/src/ghidra/GhidraLauncher.ts b/src/ghidra/GhidraLauncher.ts index 0d1f1cae2..2f239138a 100644 --- a/src/ghidra/GhidraLauncher.ts +++ b/src/ghidra/GhidraLauncher.ts @@ -37,11 +37,11 @@ export interface GhidraLaunchSession { } /** Process plus private log coordinates returned by a Ghidra launcher. */ -export interface GhidraLaunch extends ProviderProcessLaunch { +export type GhidraLaunch = ProviderProcessLaunch & { readonly projectRoot: string; readonly ghidraLogPath: string; readonly scriptLogPath: string; -} +}; /** Provider-owned capability that starts one isolated headless analysis. */ export interface GhidraLauncher { @@ -178,7 +178,7 @@ const ownedGhidraProcess = ( spawned: SpawnedOwnedProviderProcess, platform: NodeJS.Platform, ): Pick< - GhidraLaunch, + Extract, "process" | "ownsProcessLifetime" | "ownership" | "cleanup" > => ({ process: spawned.process, diff --git a/src/ghidra/GhidraProvider.ts b/src/ghidra/GhidraProvider.ts index d6a3df3ad..c1826c18d 100644 --- a/src/ghidra/GhidraProvider.ts +++ b/src/ghidra/GhidraProvider.ts @@ -71,7 +71,6 @@ import { export { GHIDRA_PROVIDER_IDENTITY, GHIDRA_PROVIDER_TOOL_CONTRACTS }; const SUPPORTED_ARCHITECTURES = new Set(["x86", "x86_64", "arm", "arm64"]); -const SUPPORTED_FORMATS = new Set(["elf", "pe", "mach-o"]); /** Production seam for exercising provider projection without a real process. */ export type GhidraProviderClientFactory = ( @@ -155,17 +154,7 @@ export class GhidraProvider implements AnalysisProviderCandidate { }; if (hostPlatform === "win32") return inspectWindowsP0TargetSupport(target, diagnostics); - if (!SUPPORTED_FORMATS.has(target.format)) - return { - status: "unsupported", - code: "target_format_unsupported", - reason: `Ghidra v1 does not import ${target.format} through this adapter.`, - diagnostics, - }; - if ( - target.architecture === undefined || - !SUPPORTED_ARCHITECTURES.has(target.architecture) - ) + if (!SUPPORTED_ARCHITECTURES.has(target.architecture)) return { status: "unsupported", code: "architecture_unsupported", diff --git a/src/ghidra/GhidraSocketConnection.ts b/src/ghidra/GhidraSocketConnection.ts index 5371ad149..ce204d546 100644 --- a/src/ghidra/GhidraSocketConnection.ts +++ b/src/ghidra/GhidraSocketConnection.ts @@ -148,7 +148,7 @@ const connectGhidraSocketOnce = ( const interruptionFailure = ( options: GhidraSocketConnectOptions, ): GhidraSessionError => - options.deadline.cancelled + options.deadline.interruption === "cancelled" ? options.failure("cancelled", "Ghidra startup was cancelled") : options.failure("timeout", "Ghidra startup deadline elapsed", undefined, { timeoutMs: options.startupTimeoutMs, diff --git a/src/ghidra/protocol.ts b/src/ghidra/protocol.ts index 16e5dad13..d5e1166f2 100644 --- a/src/ghidra/protocol.ts +++ b/src/ghidra/protocol.ts @@ -3,46 +3,23 @@ import { z } from "zod"; import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; import { err, ok, type Result } from "../domain/result.js"; -const responseSchema = z - .object({ +const responseSchema = z.discriminatedUnion("ok", [ + z.strictObject({ id: z.number().int().positive(), - ok: z.boolean(), - result: jsonValueSchema.optional(), + ok: z.literal(true), + result: jsonValueSchema, + }), + z.strictObject({ + id: z.number().int().positive(), + ok: z.literal(false), error: z .object({ code: z.string().min(1).max(128), message: z.string().min(1).max(4_096), }) - .strict() - .optional(), - }) - .strict() - .superRefine((value, context) => { - if (value.ok && value.result === undefined) - context.addIssue({ - code: "custom", - path: ["result"], - message: "Successful Ghidra response requires a result", - }); - if (!value.ok && value.error === undefined) - context.addIssue({ - code: "custom", - path: ["error"], - message: "Failed Ghidra response requires an error", - }); - if (!value.ok && value.result !== undefined) - context.addIssue({ - code: "custom", - path: ["result"], - message: "Failed Ghidra response cannot include a result", - }); - if (value.ok && value.error !== undefined) - context.addIssue({ - code: "custom", - path: ["error"], - message: "Successful Ghidra response cannot include an error", - }); - }); + .strict(), + }), +]); /** Validated response emitted by REA's packaged Ghidra script. */ export type GhidraBridgeResponse = z.infer; @@ -80,10 +57,5 @@ export const ghidraResponseResult = ( response: GhidraBridgeResponse, ): Result => response.ok - ? ok(response.result ?? null) - : err( - new GhidraRemoteError( - response.error?.code ?? "bridge_error", - response.error?.message ?? "Ghidra bridge request failed", - ), - ); + ? ok(response.result) + : err(new GhidraRemoteError(response.error.code, response.error.message)); diff --git a/src/hopper/BridgeLauncher.ts b/src/hopper/BridgeLauncher.ts index 05307881a..9798c77c5 100644 --- a/src/hopper/BridgeLauncher.ts +++ b/src/hopper/BridgeLauncher.ts @@ -34,10 +34,12 @@ export interface BridgeSession { } /** Process handle returned by a bridge launcher. */ -export interface BridgeLaunch extends ProviderProcessLaunch { - /** True when verified process cleanup completes bridge shutdown. */ - readonly shutdownByCleanup?: boolean; -} +export type BridgeLaunch = + | (ProviderProcessLaunch & { readonly shutdownMode: "bridge-request" }) + | (Extract & { + readonly shutdownMode: "process-cleanup"; + readonly cleanup: NonNullable; + }); /** Application-owned capability that starts the in-Hopper bridge. */ export interface BridgeLauncher { @@ -184,7 +186,9 @@ export class HopperApplicationLauncher implements BridgeLauncher { process: child, ownsProcessLifetime: true, ownership: started.ownership, - shutdownByCleanup: ownsProcessLifetime, + shutdownMode: ownsProcessLifetime + ? "process-cleanup" + : "bridge-request", cleanup: () => cleanupOwnedProcessGroup(started.ownership), }); } catch (cause: unknown) { diff --git a/src/hopper/HopperAnalysisProfile.ts b/src/hopper/HopperAnalysisProfile.ts index 5139d46c0..bc74aff04 100644 --- a/src/hopper/HopperAnalysisProfile.ts +++ b/src/hopper/HopperAnalysisProfile.ts @@ -75,9 +75,9 @@ export const hopperLoaderArgsForTarget = ( target: BinaryTarget, ): Result => { if (target.kind === "database") return ok([]); - const architecture = target.architecture; - if (architecture === undefined) + if (target.kind !== "executable") return err(new ProviderAdapterError("hopper", "resolve_analysis_profile")); + const architecture = target.architecture; const flag = hopperArchitectureFlag(architecture); switch (target.format) { case "mach-o": @@ -90,10 +90,6 @@ export const hopperLoaderArgsForTarget = ( return ok(["-l", "ELF", flag]); case "pe": return ok(["-l", "WinPE", flag]); - default: - return err( - new ProviderAdapterError("hopper", "resolve_analysis_profile"), - ); } }; diff --git a/src/hopper/HopperCleanup.ts b/src/hopper/HopperCleanup.ts index 09dac9317..3f33ef5ed 100644 --- a/src/hopper/HopperCleanup.ts +++ b/src/hopper/HopperCleanup.ts @@ -32,7 +32,6 @@ interface CleanupState { readonly resources: Set; cleanupResult: ProcessCleanupResult | undefined; shutdownConfirmed: boolean; - ownedProcessStopped: boolean; } export interface HopperCleanupInput { @@ -59,7 +58,6 @@ export const cleanupHopperSession = async ( resources: new Set(), cleanupResult: undefined, shutdownConfirmed: false, - ownedProcessStopped: false, }; await report(input.progress, 0, "requesting Hopper document shutdown"); await requestShutdown(input, state); @@ -97,8 +95,7 @@ const requestShutdown = async ( if ( shutdown.ok && isHopperCleanupRequired(shutdown.value) && - input.launch?.shutdownByCleanup === true && - input.launch.cleanup !== undefined + input.launch?.shutdownMode === "process-cleanup" ) { state.cleanupResult = await input.launch .cleanup() @@ -161,7 +158,11 @@ const stopProcess = async ( } input.logger.info(diagnostic, "Owned Hopper launcher shutdown completed"); if (stopped.status !== "incomplete") { - state.ownedProcessStopped = stopped.status !== "not-owned"; + if ( + input.launch?.shutdownMode === "process-cleanup" && + stopped.status !== "not-owned" + ) + state.shutdownConfirmed = true; return; } const processGroupId = supervisor.launch.ownership?.processGroupId; @@ -183,8 +184,7 @@ const recordUnconfirmedDocument = ( ): void => { if ( (input.socket === undefined && input.launch === undefined) || - state.shutdownConfirmed || - state.ownedProcessStopped + state.shutdownConfirmed ) return; state.resources.add("hopper-document"); diff --git a/src/hopper/HopperClient.ts b/src/hopper/HopperClient.ts index e9c7a4371..8d5c00030 100644 --- a/src/hopper/HopperClient.ts +++ b/src/hopper/HopperClient.ts @@ -537,6 +537,6 @@ const isAborted = (signal?: AbortSignal): boolean => signal?.aborted === true; const startupInterruption = ( deadline: ProviderStartupDeadline, ): HopperCancelledError | HopperTimeoutError => - deadline.cancelled + deadline.interruption === "cancelled" ? new HopperCancelledError() : new HopperTimeoutError(deadline.timeoutMs); diff --git a/src/hopper/HopperDiagnostics.ts b/src/hopper/HopperDiagnostics.ts index 6db38ea43..7b8323d13 100644 --- a/src/hopper/HopperDiagnostics.ts +++ b/src/hopper/HopperDiagnostics.ts @@ -1,7 +1,9 @@ import type { HopperDiagnosticType } from "../domain/errors.js"; import type { ProcessCleanupResult } from "../process/ProcessOwnership.js"; -import type { ProviderProcessStopResult } from "../process/ProviderProcess.js"; -import type { BridgeLaunch } from "./BridgeLauncher.js"; +import type { + ProviderProcessLaunch, + ProviderProcessStopResult, +} from "../process/ProviderProcess.js"; /** Sanitized Hopper launcher and owned-shutdown telemetry. */ export type HopperDiagnostic = @@ -25,7 +27,7 @@ export type HopperDiagnostic = /** Retain actionable ownership coordinates without exposing the run token. */ export const createOwnedHopperShutdownDiagnostic = ( - launch: BridgeLaunch, + launch: ProviderProcessLaunch, stopped: ProviderProcessStopResult, cleanup: ProcessCleanupResult | undefined, ): Extract => ({ diff --git a/src/hopper/HopperProvider.ts b/src/hopper/HopperProvider.ts index 56f8ce573..810dd4417 100644 --- a/src/hopper/HopperProvider.ts +++ b/src/hopper/HopperProvider.ts @@ -158,20 +158,6 @@ export class HopperProvider implements AnalysisProviderCandidate { reason: null, diagnostics, }; - if (!["mach-o", "elf", "pe"].includes(target.format)) - return { - status: "unsupported", - code: "target_format_unsupported", - reason: `Hopper cannot open ${target.format} through this adapter.`, - diagnostics, - }; - if (target.architecture === undefined) - return { - status: "unsupported", - code: "architecture_unsupported", - reason: "Hopper requires a supported concrete target architecture.", - diagnostics, - }; return { status: "supported", code: null, diff --git a/src/hopper/LinuxPrivateDisplayProbe.ts b/src/hopper/LinuxPrivateDisplayProbe.ts index e40a9ff6a..192c78d7c 100644 --- a/src/hopper/LinuxPrivateDisplayProbe.ts +++ b/src/hopper/LinuxPrivateDisplayProbe.ts @@ -10,6 +10,7 @@ import { cleanupOwnedProcessGroup } from "../process/ProcessOwnership.js"; import { ProviderProcessSupervisor, spawnOwnedProviderProcess, + type ProviderProcessLaunch, } from "../process/ProviderProcess.js"; import { parseLinuxPrivateDisplayDiagnostic } from "./LinuxPrivateDisplayDiagnostic.js"; @@ -24,12 +25,11 @@ export type LinuxPrivateDisplayRunnableStrategy = Exclude< >; export interface LinuxPrivateDisplayProbeProcessResult { + readonly outcome: "exited" | "timed-out" | "cancelled" | "launch-failed"; readonly exitCode: number | null | undefined; readonly stderr: string; readonly stderrBytes: number; readonly stderrTruncated: boolean; - readonly timedOut: boolean; - readonly cancelled: boolean; readonly cleanupIncomplete: boolean; } @@ -103,7 +103,7 @@ export const selectLinuxPrivateDisplayStrategy = async (options: { export const runLinuxPrivateDisplayProbe: LinuxPrivateDisplayProbeRunner = async (strategy, options) => { if (options.signal?.aborted === true) - return emptyProcessResult({ cancelled: true }); + return emptyProcessResult("cancelled"); const command = privateDisplayProbeCommand(options.helperPath, strategy); let started: Awaited>; try { @@ -114,9 +114,9 @@ export const runLinuxPrivateDisplayProbe: LinuxPrivateDisplayProbeRunner = expectedCommand: null, }); } catch { - return emptyProcessResult(); + return emptyProcessResult("launch-failed"); } - const launch = { + const launch: ProviderProcessLaunch = { process: started.process, ownsProcessLifetime: true, cleanup: () => cleanupOwnedProcessGroup(started.ownership), @@ -136,12 +136,16 @@ export const runLinuxPrivateDisplayProbe: LinuxPrivateDisplayProbeRunner = } else supervisor.dispose(); const snapshot = supervisor.snapshot(); return { + outcome: + outcome === "exit" + ? "exited" + : outcome === "timeout" + ? "timed-out" + : "cancelled", exitCode: snapshot.exitCode, stderr: snapshot.stderr.text, stderrBytes: snapshot.stderr.bytes, stderrTruncated: snapshot.stderr.truncated, - timedOut: outcome === "timeout", - cancelled: outcome === "cancelled", cleanupIncomplete, }; }; @@ -204,16 +208,21 @@ const evaluatedProbe = async ( diagnostic: syntheticDiagnostic(strategy, "probe_failed"), }; } - if (processResult.cancelled) + if (processResult.outcome === "cancelled") return { ok: false, diagnostic: syntheticDiagnostic(strategy, "cancelled"), }; - if (processResult.timedOut) + if (processResult.outcome === "timed-out") return { ok: false, diagnostic: syntheticDiagnostic(strategy, "probe_timeout"), }; + if (processResult.outcome === "launch-failed") + return { + ok: false, + diagnostic: syntheticDiagnostic(strategy, "probe_failed"), + }; if (processResult.cleanupIncomplete) return { ok: false, @@ -288,16 +297,17 @@ const unavailable = ( }); const emptyProcessResult = ( - overrides: Partial = {}, + outcome: Extract< + LinuxPrivateDisplayProbeProcessResult["outcome"], + "cancelled" | "launch-failed" + >, ): LinuxPrivateDisplayProbeProcessResult => ({ + outcome, exitCode: undefined, stderr: "", stderrBytes: 0, stderrTruncated: false, - timedOut: false, - cancelled: false, cleanupIncomplete: false, - ...overrides, }); const waitForProbeExit = async ( diff --git a/src/main.ts b/src/main.ts index 69b9634eb..87dfbc285 100644 --- a/src/main.ts +++ b/src/main.ts @@ -80,28 +80,30 @@ export const run = async ( const transport = await startMcpTransport(dependencies, session, { logger, serverLogger, - loadOptionalProviders: async () => { - const [ - { CdpBrowserProvider }, - { PlaywrightBrowserScenarioProvider }, - { CdpElectronProvider }, - { PlaywrightElectronActiveProvider }, - { V8InspectorProvider }, - ] = await Promise.all([ - import("./browser/CdpBrowserProvider.js"), - import("./browser/PlaywrightBrowserScenarioProvider.js"), - import("./browser/CdpElectronProvider.js"), - import("./browser/PlaywrightElectronActiveProvider.js"), - import("./browser/V8InspectorProvider.js"), - ]); - return { - browserObservation: new CdpBrowserProvider(), - browserScenarioCapture: new PlaywrightBrowserScenarioProvider(), - electronObservation: new CdpElectronProvider(), - electronActiveObservation: new PlaywrightElectronActiveProvider(), - javascriptRuntimeObservation: new V8InspectorProvider(), - }; - }, + loadOptionalProviders: + dependencies.loadOptionalProviders ?? + (async () => { + const [ + { CdpBrowserProvider }, + { PlaywrightBrowserScenarioProvider }, + { CdpElectronProvider }, + { PlaywrightElectronActiveProvider }, + { V8InspectorProvider }, + ] = await Promise.all([ + import("./browser/CdpBrowserProvider.js"), + import("./browser/PlaywrightBrowserScenarioProvider.js"), + import("./browser/CdpElectronProvider.js"), + import("./browser/PlaywrightElectronActiveProvider.js"), + import("./browser/V8InspectorProvider.js"), + ]); + return { + browserObservation: new CdpBrowserProvider(), + browserScenarioCapture: new PlaywrightBrowserScenarioProvider(), + electronObservation: new CdpElectronProvider(), + electronActiveObservation: new PlaywrightElectronActiveProvider(), + javascriptRuntimeObservation: new V8InspectorProvider(), + }; + }), permissionAuthority: permissionAuthority.value, runtimeState, }); @@ -110,7 +112,6 @@ export const run = async ( dependencies, permissionAuthority: permissionAuthority.value, runtimeState, - liveServers: transport.liveServers, serverLogger, }); createShutdown({ diff --git a/src/main/reload.ts b/src/main/reload.ts index f6954a82c..0928a302c 100644 --- a/src/main/reload.ts +++ b/src/main/reload.ts @@ -7,24 +7,14 @@ import type { RuntimeDependencies } from "./types.js"; import type { RuntimeState } from "./state.js"; import { MCP_PERMISSION_RELOAD_FAILED } from "./messages.js"; -type McpServerInstance = ReturnType< - typeof import("../server/createServer.js").createServer ->; - export const registerConfigReload = (input: { readonly dependencies: RuntimeDependencies; readonly permissionAuthority: PermissionAuthority; readonly runtimeState: RuntimeState; - readonly liveServers: Set; readonly serverLogger: Logger; }): (() => void) => { - const { - dependencies, - permissionAuthority, - runtimeState, - liveServers, - serverLogger, - } = input; + const { dependencies, permissionAuthority, runtimeState, serverLogger } = + input; let reloadQueue = Promise.resolve(); return ( dependencies.registerReload?.(() => { @@ -65,10 +55,6 @@ export const registerConfigReload = (input: { return; } runtimeState.currentConfig = refreshed.value; - Object.assign( - runtimeState.processPolicy, - refreshed.value.processExecutionPolicy, - ); Object.assign( runtimeState.evidencePolicy, refreshed.value.evidenceFilePolicy, @@ -82,15 +68,6 @@ export const registerConfigReload = (input: { runtimeState.investigationRoots.length, ...refreshed.value.investigationInputRoots, ); - Object.assign( - runtimeState.javascriptReplayPolicy, - refreshed.value.javascriptReplayPolicy, - ); - Object.assign( - runtimeState.managedRuntimePolicy, - refreshed.value.managedRuntimePolicy, - ); - for (const server of liveServers) server.sendToolListChanged(); }) .catch(() => { serverLogger.error(MCP_PERMISSION_RELOAD_FAILED); diff --git a/src/main/state.ts b/src/main/state.ts index d4f3bdc17..61fdcc9f5 100644 --- a/src/main/state.ts +++ b/src/main/state.ts @@ -1,31 +1,15 @@ import type { AppConfig } from "../config.js"; -import type { ProcessExecutionPolicy } from "../domain/processCapture.js"; import type { EvidenceFilePolicy } from "../domain/evidenceBundle.js"; -import type { JavaScriptReplayPolicy } from "../application/JavaScriptReplayPlanning.js"; -import type { ManagedRuntimePolicy } from "../application/ManagedRuntimeCorrelationService.js"; export interface RuntimeState { currentConfig: AppConfig; - processPolicy: ProcessExecutionPolicy & { - executableRoots: string[]; - workingRoots: string[]; - allowedEnvironment: string[]; - }; evidencePolicy: EvidenceFilePolicy & { roots: string[] }; snapshotPolicy: EvidenceFilePolicy & { roots: string[] }; investigationRoots: string[]; - javascriptReplayPolicy: JavaScriptReplayPolicy & { roots: string[] }; - managedRuntimePolicy: ManagedRuntimePolicy & { roots: string[] }; } export const createRuntimeState = (config: AppConfig): RuntimeState => ({ currentConfig: config, - processPolicy: { - ...config.processExecutionPolicy, - executableRoots: [...config.processExecutionPolicy.executableRoots], - workingRoots: [...config.processExecutionPolicy.workingRoots], - allowedEnvironment: [...config.processExecutionPolicy.allowedEnvironment], - }, evidencePolicy: { ...config.evidenceFilePolicy, roots: [...config.evidenceFilePolicy.roots], @@ -35,12 +19,4 @@ export const createRuntimeState = (config: AppConfig): RuntimeState => ({ roots: [...config.analysisSnapshotFilePolicy.roots], }, investigationRoots: [...config.investigationInputRoots], - javascriptReplayPolicy: { - ...config.javascriptReplayPolicy, - roots: [...config.javascriptReplayPolicy.roots], - }, - managedRuntimePolicy: { - ...config.managedRuntimePolicy, - roots: [...config.managedRuntimePolicy.roots], - }, }); diff --git a/src/main/transport.ts b/src/main/transport.ts index e65deffe4..673dc036d 100644 --- a/src/main/transport.ts +++ b/src/main/transport.ts @@ -14,14 +14,20 @@ import { MCP_CONNECTION_START_FAILED, } from "./messages.js"; -type McpServerInstance = ReturnType; +/** Optional adapters whose absence must not prevent the core MCP server. */ +export type OptionalProviders = Pick< + CreateServerOptions, + | "browserObservation" + | "browserScenarioCapture" + | "electronObservation" + | "electronActiveObservation" + | "javascriptRuntimeObservation" +>; interface ServerContext { readonly logger: Logger; readonly serverLogger: Logger; - readonly loadOptionalProviders: NonNullable< - CreateServerOptions["loadOptionalProviders"] - >; + readonly loadOptionalProviders: () => Promise; readonly permissionAuthority: PermissionAuthority; readonly runtimeState: RuntimeState; } @@ -34,43 +40,42 @@ export const startMcpTransport = async ( | { readonly ok: true; readonly handle: StdioServerHandle; - readonly liveServers: Set; } | { readonly ok: false } > => { - const liveServers = new Set(); const { serverLogger } = serverContext; + let optionalProviders: OptionalProviders = {}; + try { + optionalProviders = await serverContext.loadOptionalProviders(); + } catch { + serverLogger.warn( + "Optional MCP providers could not load; affected tools remain unavailable", + ); + } let handle: StdioServerHandle; try { handle = dependencies.serve( - () => { - const server = (dependencies.createServer ?? createServer)( - session, - session, - { - logger: serverContext.logger, - processPolicy: serverContext.runtimeState.processPolicy, - evidenceFilePolicy: serverContext.runtimeState.evidencePolicy, - investigationInputRoots: - serverContext.runtimeState.investigationRoots, - analysisSnapshotFilePolicy: - serverContext.runtimeState.snapshotPolicy, - permissionAuthority: serverContext.permissionAuthority, - loadOptionalProviders: serverContext.loadOptionalProviders, - artifactIntegrityContinueEnabled: () => - serverContext.runtimeState.currentConfig - .artifactIntegrityContinueEnabled, - javascriptReplayPolicy: - serverContext.runtimeState.javascriptReplayPolicy, - managedRuntimePolicy: - serverContext.runtimeState.managedRuntimePolicy, - availabilityPolicy: () => - runtimeAvailability(serverContext.runtimeState), - }, - ); - liveServers.add(server); - return server; - }, + () => + (dependencies.createServer ?? createServer)(session, session, { + logger: serverContext.logger, + processPolicy: () => + serverContext.runtimeState.currentConfig.processExecutionPolicy, + evidenceFilePolicy: serverContext.runtimeState.evidencePolicy, + investigationInputRoots: + serverContext.runtimeState.investigationRoots, + analysisSnapshotFilePolicy: serverContext.runtimeState.snapshotPolicy, + permissionAuthority: serverContext.permissionAuthority, + ...optionalProviders, + artifactIntegrityContinueEnabled: () => + serverContext.runtimeState.currentConfig + .artifactIntegrityContinueEnabled, + javascriptReplayPolicy: () => + serverContext.runtimeState.currentConfig.javascriptReplayPolicy, + managedRuntimePolicy: () => + serverContext.runtimeState.currentConfig.managedRuntimePolicy, + availabilityPolicy: () => + runtimeAvailability(serverContext.runtimeState), + }), { onerror: () => { serverLogger.error(MCP_CONNECTION_LOST); @@ -84,35 +89,26 @@ export const startMcpTransport = async ( dependencies.writeStderr(`${MCP_CONNECTION_START_FAILED}\n`); return { ok: false }; } - return { ok: true, handle, liveServers }; + return { ok: true, handle }; }; const runtimeAvailability = (state: RuntimeState) => ({ - processCaptureEnabled: state.currentConfig.processExecutionPolicy.enabled, + processCaptureEnabled: + state.currentConfig.processExecutionPolicy.status === "enabled", evidenceFileRoots: state.currentConfig.evidenceFilePolicy.roots.length, investigationInputRoots: state.currentConfig.investigationInputRoots.length, browserObservationEnabled: - state.currentConfig.browserObservationEnabled && - state.currentConfig.browserCdpEndpoints.length > 0 && - state.currentConfig.browserAllowedOrigins.length > 0, + state.currentConfig.browserObservationPolicy.status === "enabled", browserScenarioEnabled: - state.currentConfig.browserScenarioPolicy.enabled && - state.currentConfig.browserScenarioPolicy.allowedOrigins.length > 0 && - (state.currentConfig.browserScenarioPolicy.executableRoots.length > 0 || - state.currentConfig.browserScenarioPolicy.cdpEndpoints.length > 0), + state.currentConfig.browserScenarioPolicy.status === "enabled", electronObservationEnabled: - state.currentConfig.electronObservationEnabled && - state.currentConfig.electronCdpEndpoints.length > 0 && - state.currentConfig.electronFileRoots.length > 0, + state.currentConfig.electronObservationPolicy.status === "enabled", electronAutomationEnabled: - state.currentConfig.electronAutomationPolicy.enabled && - state.currentConfig.electronAutomationPolicy.executableRoots.length > 0 && - state.currentConfig.electronAutomationPolicy.applicationRoots.length > 0, + state.currentConfig.electronAutomationPolicy.status === "enabled", v8InspectorObservationEnabled: - state.currentConfig.v8InspectorObservationEnabled && - state.currentConfig.v8InspectorEndpoints.length > 0 && - (state.currentConfig.v8InspectorFileRoots.length > 0 || - state.currentConfig.v8InspectorAllowedOrigins.length > 0), - javascriptReplayEnabled: state.currentConfig.javascriptReplayPolicy.enabled, - managedRuntimeEnabled: state.currentConfig.managedRuntimePolicy.enabled, + state.currentConfig.v8InspectorObservationPolicy.status === "enabled", + javascriptReplayEnabled: + state.currentConfig.javascriptReplayPolicy.status === "enabled", + managedRuntimeEnabled: + state.currentConfig.managedRuntimePolicy.status === "enabled", }); diff --git a/src/main/types.ts b/src/main/types.ts index 098e1ffc7..631f72e0a 100644 --- a/src/main/types.ts +++ b/src/main/types.ts @@ -6,5 +6,8 @@ export interface RuntimeDependencies { readonly registerShutdown: (handler: () => void) => () => void; readonly registerReload?: (handler: () => void) => () => void; readonly createServer?: typeof import("../server/createServer.js").createServer; + readonly loadOptionalProviders?: () => Promise< + import("./transport.js").OptionalProviders + >; readonly readProjectPermissionStore?: typeof import("../application/ProjectPermissionStore.js").readProjectPermissionStore; } diff --git a/src/mcpDoctor.ts b/src/mcpDoctor.ts index 068315e2a..f7f9dff18 100644 --- a/src/mcpDoctor.ts +++ b/src/mcpDoctor.ts @@ -9,6 +9,7 @@ import { MCP_RESOURCE_TEMPLATE_CATALOG, } from "./catalogIdentity.js"; import { PROMPT_CONTRACTS } from "./contracts/promptContracts.js"; +import { TOOL_CONTRACTS } from "./contracts/toolContracts.js"; import { PRODUCT_IDENTITY } from "./identity.js"; import { MCP_STARTUP_POLICY } from "./mcpStartupPolicy.js"; @@ -111,11 +112,9 @@ const inspectProductionMcpSession = async ( request, ), ]); - const expectedToolNames = - availableToolNames(requestFlow.structuredContent) ?? []; const inventory = { tools: compareInventory( - expectedToolNames, + TOOL_CONTRACTS.map(({ name }) => name), tools.tools.map(({ name }) => name), ), prompts: compareInventory( @@ -183,27 +182,6 @@ const inspectProductionMcpSession = async ( }; }; -const availableToolNames = ( - structuredContent: unknown, -): readonly string[] | undefined => { - if (typeof structuredContent !== "object" || structuredContent === null) - return undefined; - const result = Reflect.get(structuredContent, "result"); - if (typeof result !== "object" || result === null) return undefined; - const availability = Reflect.get(result, "tool_availability"); - if (!Array.isArray(availability)) return undefined; - const names: string[] = []; - for (const item of availability) { - if (typeof item !== "object" || item === null) return undefined; - const name = Reflect.get(item, "name"); - const available = Reflect.get(item, "available"); - if (typeof name !== "string" || typeof available !== "boolean") - return undefined; - if (available) names.push(name); - } - return names; -}; - /** * Dispatcher entry for `rea mcp doctor`, kept separate from Incur MCP setup. * @public diff --git a/src/process/ProcessOwnership.ts b/src/process/ProcessOwnership.ts index fd3fa1397..cd21795fa 100644 --- a/src/process/ProcessOwnership.ts +++ b/src/process/ProcessOwnership.ts @@ -186,8 +186,10 @@ const systemHost: ProcessOwnershipHost = { const environment: Record = {}; for (const match of stdout.matchAll( /(?:^|\s)([A-Za-z_][A-Za-z0-9_]*)=([^\s]*)/gu, - )) - environment[match[1]!] = match[2] ?? ""; + )) { + const name = match[1]; + if (name !== undefined) environment[name] = match[2] ?? ""; + } return environment; }, signalGroup(processGroupId, signal) { diff --git a/src/process/ProviderDeadline.ts b/src/process/ProviderDeadline.ts index 7e452dcb5..3081f469f 100644 --- a/src/process/ProviderDeadline.ts +++ b/src/process/ProviderDeadline.ts @@ -34,8 +34,7 @@ export class ProviderStartupDeadline { readonly #externalSignal: AbortSignal | undefined; readonly #onExternalAbort: () => void; #timer: NodeJS.Timeout | undefined; - #timedOut = false; - #cancelled = false; + #interruption: "cancelled" | "timeout" | undefined; constructor( readonly timeoutMs: number, @@ -48,13 +47,13 @@ export class ProviderStartupDeadline { this.#onExternalAbort = () => { if (this.#controller.signal.aborted) return; if (Date.now() >= this.#deadlineAt) { - this.#timedOut = true; + this.#interruption = "timeout"; this.#abort( new DOMException("Provider startup deadline elapsed", "TimeoutError"), ); return; } - this.#cancelled = true; + this.#interruption = "cancelled"; this.#abort(signal?.reason); }; if (signal?.aborted === true) { @@ -64,7 +63,7 @@ export class ProviderStartupDeadline { signal?.addEventListener("abort", this.#onExternalAbort, { once: true }); this.#timer = setTimeout(() => { if (this.#controller.signal.aborted) return; - this.#timedOut = true; + this.#interruption = "timeout"; this.#abort( new DOMException("Provider startup deadline elapsed", "TimeoutError"), ); @@ -76,15 +75,11 @@ export class ProviderStartupDeadline { return this.#controller.signal; } - /** True only when the external caller signal initiated cancellation. */ - get cancelled(): boolean { - return this.#cancelled; - } - - /** True when the absolute startup deadline has elapsed. */ - get timedOut(): boolean { + /** First control path that interrupted startup, if any. */ + get interruption(): "cancelled" | "timeout" | undefined { return ( - this.#timedOut || (!this.#cancelled && Date.now() >= this.#deadlineAt) + this.#interruption ?? + (Date.now() >= this.#deadlineAt ? "timeout" : undefined) ); } diff --git a/src/process/ProviderProcess.ts b/src/process/ProviderProcess.ts index c21d1ece9..39790d253 100644 --- a/src/process/ProviderProcess.ts +++ b/src/process/ProviderProcess.ts @@ -30,12 +30,19 @@ export interface SpawnedOwnedProviderProcess { } /** Process handle returned by a provider-specific launcher. */ -export interface ProviderProcessLaunch { - readonly process: ChildProcess; - readonly ownsProcessLifetime: boolean; - readonly ownership?: OwnedProcessGroup; - readonly cleanup?: () => Promise; -} +export type ProviderProcessLaunch = + | { + readonly process: ChildProcess; + readonly ownsProcessLifetime: false; + readonly ownership?: never; + readonly cleanup?: never; + } + | { + readonly process: ChildProcess; + readonly ownsProcessLifetime: true; + readonly ownership?: OwnedProcessGroup; + readonly cleanup?: () => Promise; + }; /** Detached diagnostics captured for one supervised provider process. */ export interface ProviderProcessSnapshot { diff --git a/src/reference/ReferenceSourceReader.ts b/src/reference/ReferenceSourceReader.ts index c345f46fe..8d5bdc84d 100644 --- a/src/reference/ReferenceSourceReader.ts +++ b/src/reference/ReferenceSourceReader.ts @@ -58,7 +58,7 @@ export const readReferenceSource = async ( bytesRead: 0, filesSeen: 0, truncated: false, - stopped: false, + stopReason: undefined, }; const traversal = await traverse(state); if (!traversal.ok) return traversal; @@ -70,7 +70,7 @@ export const readReferenceSource = async ( truncated: state.truncated, limitations: [ PATH_RACE_LIMITATION, - ...(state.stopped + ...(state.stopReason === "entry-limit" ? ["Traversal stopped because the entry limit was reached."] : []), ], @@ -80,7 +80,7 @@ export const readReferenceSource = async ( const traverse = async ( state: TraversalState, ): Promise> => { - while (state.pending.length > 0 && !state.stopped) { + while (state.pending.length > 0 && state.stopReason === undefined) { if (isAborted(state.signal)) return err({ tag: "reference-source-reader", diff --git a/src/reference/ReferenceSourceReaderEntries.ts b/src/reference/ReferenceSourceReaderEntries.ts index 8d7f8cc99..d2453bc60 100644 --- a/src/reference/ReferenceSourceReaderEntries.ts +++ b/src/reference/ReferenceSourceReaderEntries.ts @@ -83,7 +83,7 @@ export const traverseDirectory = async ( for (const name of names.value) { const result = await processEntry(state, current, name, directories); if (!result.ok) return result; - if (state.stopped) break; + if (state.stopReason !== undefined) break; } directories.reverse(); state.pending.push(...directories); @@ -297,6 +297,6 @@ const reserveEntry = (state: TraversalState): boolean => { return true; } state.truncated = true; - state.stopped = true; + state.stopReason = "entry-limit"; return false; }; diff --git a/src/reference/ReferenceSourceReaderTypes.ts b/src/reference/ReferenceSourceReaderTypes.ts index 6d601e851..8a78e23bc 100644 --- a/src/reference/ReferenceSourceReaderTypes.ts +++ b/src/reference/ReferenceSourceReaderTypes.ts @@ -89,7 +89,7 @@ export type TraversalState = { bytesRead: number; filesSeen: number; truncated: boolean; - stopped: boolean; + stopReason: "entry-limit" | undefined; }; export type StableFileRequest = { diff --git a/src/replay/JavaScriptReplayWorker.ts b/src/replay/JavaScriptReplayWorker.ts index d02850fb9..bd4865869 100644 --- a/src/replay/JavaScriptReplayWorker.ts +++ b/src/replay/JavaScriptReplayWorker.ts @@ -7,52 +7,102 @@ import { } from "node:vm"; import { types } from "node:util"; -interface WorkerModule { - readonly alias: string; - readonly format: "esm" | "commonjs-factory"; - readonly dependencies: Readonly>; - readonly source: string; -} +import type { + WorkerModule, + WorkerOutcome, + WorkerRequest, + WorkerSide, +} from "./JavaScriptReplayWorkerTypes.js"; -interface WorkerSide { - readonly modules: readonly WorkerModule[]; - readonly entryAlias: string; - readonly entryExport: string; -} +const isRecord = (value: unknown): value is Record => + typeof value === "object" && value !== null && !Array.isArray(value); -interface WorkerRequest { - readonly schemaVersion: 1; - readonly left: WorkerSide; - readonly right?: WorkerSide; - readonly cases: readonly { - readonly caseId: string; - readonly arguments: readonly unknown[]; - readonly inputSha256: string; - }[]; - readonly determinism: { - readonly clockIso: string; - readonly randomSeed: number; - }; - readonly limits: { - readonly resultDepth: number; - readonly resultNodes: number; - readonly exceptionBytes: number; - }; -} +const record = (value: unknown, label: string): Record => { + if (!isRecord(value)) throw new TypeError(`Invalid replay worker ${label}`); + return value; +}; -interface WorkerOutcome { - readonly case_id: string; - readonly outcome: "return" | "exception" | "serialization_error" | "denied"; - readonly value?: unknown; - readonly exception?: { - readonly name: string; - readonly message: string; - readonly stack: string | null; +const string = (value: unknown, label: string): string => { + if (typeof value !== "string") + throw new TypeError(`Invalid replay worker ${label}`); + return value; +}; + +const integer = (value: unknown, label: string): number => { + if (!Number.isSafeInteger(value) || Number(value) < 0) + throw new TypeError(`Invalid replay worker ${label}`); + return Number(value); +}; + +const parseWorkerModule = (value: unknown): WorkerModule => { + const module = record(value, "module"); + const format = module.format; + if (format !== "esm" && format !== "commonjs-factory") + throw new TypeError("Invalid replay worker module format"); + const dependencies = record(module.dependencies, "module dependencies"); + if ( + Object.values(dependencies).some( + (dependency) => typeof dependency !== "string", + ) + ) + throw new TypeError("Invalid replay worker module dependency"); + return { + alias: string(module.alias, "module alias"), + format, + dependencies: Object.fromEntries( + Object.entries(dependencies).map(([key, dependency]) => [ + key, + string(dependency, "module dependency"), + ]), + ), + source: string(module.source, "module source"), }; - readonly input_sha256: string; - readonly output_sha256: null; - readonly truncated: false; -} +}; + +const parseWorkerSide = (value: unknown): WorkerSide => { + const side = record(value, "side"); + if (!Array.isArray(side.modules)) + throw new TypeError("Invalid replay worker modules"); + return { + modules: side.modules.map(parseWorkerModule), + entryAlias: string(side.entryAlias, "entry alias"), + entryExport: string(side.entryExport, "entry export"), + }; +}; + +const parseWorkerRequest = (value: unknown): WorkerRequest => { + const request = record(value, "request"); + if (request.schemaVersion !== 1 || !Array.isArray(request.cases)) + throw new TypeError("Unsupported replay worker protocol"); + const determinism = record(request.determinism, "determinism"); + const limits = record(request.limits, "limits"); + return { + schemaVersion: 1, + left: parseWorkerSide(request.left), + ...(request.right === undefined + ? {} + : { right: parseWorkerSide(request.right) }), + cases: request.cases.map((value) => { + const replayCase = record(value, "case"); + if (!Array.isArray(replayCase.arguments)) + throw new TypeError("Invalid replay worker case arguments"); + return { + caseId: string(replayCase.caseId, "case ID"), + arguments: replayCase.arguments, + inputSha256: string(replayCase.inputSha256, "case digest"), + }; + }), + determinism: { + clockIso: string(determinism.clockIso, "clock"), + randomSeed: integer(determinism.randomSeed, "random seed"), + }, + limits: { + resultDepth: integer(limits.resultDepth, "result depth"), + resultNodes: integer(limits.resultNodes, "result nodes"), + exceptionBytes: integer(limits.exceptionBytes, "exception bytes"), + }, + }; +}; class ReplayDeniedError extends Error { override readonly name = "ReplayDeniedError"; @@ -61,11 +111,10 @@ class ReplayDeniedError extends Error { const main = async (): Promise => { const chunks: Buffer[] = []; for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk)); - const request = JSON.parse( + const rawRequest: unknown = JSON.parse( Buffer.concat(chunks).toString("utf8"), - ) as WorkerRequest; - if (request.schemaVersion !== 1) - throw new TypeError("Unsupported replay worker protocol"); + ); + const request = parseWorkerRequest(rawRequest); const left: WorkerOutcome[] = []; const right: WorkerOutcome[] = []; for (let index = 0; index < request.cases.length; index += 1) { @@ -146,25 +195,22 @@ const loadEntry = async ( throw new TypeError( `Synchronous require cannot load ESM module: ${alias}`, ); - const module = { exports: {} as Record }; + const module: { exports: Record } = { exports: {} }; commonJsCache.set(alias, module.exports); - const requireModule = ((specifier: string): Record => { + const requireModule = (specifier: string): Record => { const dependency = descriptor.dependencies[specifier]; if (dependency === undefined) throw new ReplayDeniedError(`Undeclared require: ${specifier}`); return loadCommonJs(dependency); - }) as ((specifier: string) => Record) & - Record; + }; installRspackHelpers(requireModule); const source = normalizeFactorySource(descriptor.source); - const factory = new Script(`(${source})`, { + const factory: unknown = new Script(`(${source})`, { filename: `/modules/${alias}.js`, - }).runInContext(context) as ( - module: { exports: Record }, - exports: Record, - require_: typeof requireModule, - ) => void; - factory(module, module.exports, requireModule); + }).runInContext(context); + if (typeof factory !== "function") + throw new TypeError(`CommonJS factory is not callable: ${alias}`); + Reflect.apply(factory, undefined, [module, module.exports, requireModule]); commonJsCache.set(alias, module.exports); return module.exports; }; @@ -219,7 +265,7 @@ const loadEntry = async ( : exported[side.entryExport]; } const namespace = (await loadEsm(side.entryAlias)).namespace; - return (namespace as Record)[side.entryExport]; + return Reflect.get(namespace, side.entryExport); }; const deterministicContext = (request: WorkerRequest, caseIndex: number) => { @@ -239,7 +285,7 @@ const deterministicContext = (request: WorkerRequest, caseIndex: number) => { return epoch; } } - const replayMath = Object.create(Math) as Math; + const replayMath: Math = Object.create(Math); Object.defineProperty(replayMath, "random", { value: random }); return createContext( { Date: ReplayDate, Math: replayMath }, @@ -251,10 +297,9 @@ const deterministicContext = (request: WorkerRequest, caseIndex: number) => { }; const installRspackHelpers = ( - require_: ((specifier: string) => Record) & - Record, + require_: (specifier: string) => Record, ): void => { - require_.d = ( + const defineExports = ( exports: Record, definitions: Record unknown>, ) => { @@ -262,16 +307,22 @@ const installRspackHelpers = ( if (!Object.prototype.hasOwnProperty.call(exports, name)) Object.defineProperty(exports, name, { enumerable: true, get: getter }); }; - require_.r = (exports: Record) => { + const markModule = (exports: Record) => { Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); }; - require_.n = (module: Record) => { + const normalizeModule = (module: Record) => { const getter = () => (module.__esModule === true ? module.default : module); Object.defineProperty(getter, "a", { get: getter }); return getter; }; - require_.nmd = (module: Record) => module; + const passModule = (module: Record) => module; + Object.defineProperties(require_, { + d: { value: defineExports }, + r: { value: markModule }, + n: { value: normalizeModule }, + nmd: { value: passModule }, + }); }; const requiredModule = ( @@ -348,7 +399,7 @@ const projectLeaf = (candidate: unknown): unknown => { const assertSupportedPrototype = (candidate: object): void => { if (Array.isArray(candidate)) return; - const prototype = Object.getPrototypeOf(candidate) as object | null; + const prototype: object | null = Object.getPrototypeOf(candidate); if (prototype !== null && Object.getPrototypeOf(prototype) !== null) throw new TypeError("Unsupported replay result prototype"); }; @@ -421,7 +472,7 @@ const exceptionDetails = ( if (types.isProxy(error)) return { name: "Error", message: "Proxy replay exception", stack: null }; const own = Object.getOwnPropertyDescriptors(error); - const prototype = Object.getPrototypeOf(error) as object | null; + const prototype: object | null = Object.getPrototypeOf(error); const inherited = prototype === null ? {} : Object.getOwnPropertyDescriptors(prototype); const stringValue = ( diff --git a/src/replay/JavaScriptReplayWorkerTypes.ts b/src/replay/JavaScriptReplayWorkerTypes.ts new file mode 100644 index 000000000..21842169e --- /dev/null +++ b/src/replay/JavaScriptReplayWorkerTypes.ts @@ -0,0 +1,50 @@ +/** One source module admitted to the disposable replay worker. */ +export interface WorkerModule { + readonly alias: string; + readonly format: "esm" | "commonjs-factory"; + readonly dependencies: Readonly>; + readonly source: string; +} + +/** One independently loaded side of a replay comparison. */ +export interface WorkerSide { + readonly modules: readonly WorkerModule[]; + readonly entryAlias: string; + readonly entryExport: string; +} + +/** Parsed parent-to-worker runtime-hop request. */ +export interface WorkerRequest { + readonly schemaVersion: 1; + readonly left: WorkerSide; + readonly right?: WorkerSide; + readonly cases: readonly { + readonly caseId: string; + readonly arguments: readonly unknown[]; + readonly inputSha256: string; + }[]; + readonly determinism: { + readonly clockIso: string; + readonly randomSeed: number; + }; + readonly limits: { + readonly resultDepth: number; + readonly resultNodes: number; + readonly exceptionBytes: number; + }; +} + +/** Worker-side observation before the parent authenticates its commitments. */ +export interface WorkerOutcome { + readonly case_id: string; + readonly outcome: "return" | "exception" | "serialization_error" | "denied"; + readonly value?: unknown; + readonly exception?: { + readonly name: string; + readonly message: string; + readonly stack: string | null; + }; + readonly input_sha256: string; + readonly output_sha256: null; + readonly truncated: false; +} diff --git a/src/replay/LinuxJavaScriptReplayRunner.ts b/src/replay/LinuxJavaScriptReplayRunner.ts index 5121232e7..89efab792 100644 --- a/src/replay/LinuxJavaScriptReplayRunner.ts +++ b/src/replay/LinuxJavaScriptReplayRunner.ts @@ -4,7 +4,7 @@ import { readFile } from "node:fs/promises"; import { digestBytes, - type JavaScriptReplayPolicy, + type EnabledJavaScriptReplayPolicy, type JavaScriptReplayRunner, type PreparedReplayPlan, } from "../application/JavaScriptReplayPlanning.js"; @@ -42,7 +42,7 @@ const isAborted = (signal: AbortSignal | undefined): boolean => export class LinuxJavaScriptReplayRunner implements JavaScriptReplayRunner { async execute( prepared: PreparedReplayPlan, - policy: JavaScriptReplayPolicy, + policy: EnabledJavaScriptReplayPolicy, signal?: AbortSignal, ): Promise { if (isAborted(signal)) @@ -76,8 +76,7 @@ export class LinuxJavaScriptReplayRunner implements JavaScriptReplayRunner { collected, unitResult, cleanup, - cancelled: replayProcess.cancelled, - timedOut: replayProcess.timedOut, + termination: replayProcess.termination, }); } finally { signal?.removeEventListener("abort", replayProcess.terminate); @@ -97,7 +96,7 @@ export class LinuxJavaScriptReplayRunner implements JavaScriptReplayRunner { const validateReplayCommitments = async ( prepared: PreparedReplayPlan, - policy: JavaScriptReplayPolicy, + policy: EnabledJavaScriptReplayPolicy, ): Promise => { const closure = await resolveLinuxRuntimeClosure(policy.nodePath); assertRuntimeCommitment(prepared, closure); @@ -126,7 +125,7 @@ const buildWorkerPayload = (prepared: PreparedReplayPlan): Buffer => { interface LaunchReplayProcessOptions { readonly prepared: PreparedReplayPlan; - readonly policy: JavaScriptReplayPolicy; + readonly policy: EnabledJavaScriptReplayPolicy; readonly encoded: Buffer; readonly closure: readonly RuntimeFile[]; readonly filterPath: string; @@ -141,8 +140,7 @@ interface ReplayProcess { readonly terminate: () => void; readonly requestTermination: () => void; readonly terminationRequest: Promise | undefined; - readonly cancelled: boolean; - readonly timedOut: boolean; + readonly termination: "cancelled" | "timeout" | undefined; } const launchReplayProcess = ( @@ -160,15 +158,14 @@ const launchReplayProcess = ( }); let child: ReturnType | undefined; let timeout: NodeJS.Timeout | undefined; - let cancelled = false; - let timedOut = false; + let termination: "cancelled" | "timeout" | undefined; let terminationRequest: Promise | undefined; const requestTermination = (): void => { terminationRequest ??= killUnit(policy.systemctlPath, unit); child?.kill("SIGKILL"); }; const terminate = (): void => { - cancelled = true; + termination ??= "cancelled"; requestTermination(); }; const completion = new Promise((resolve, reject) => { @@ -197,7 +194,7 @@ const launchReplayProcess = ( signal?.addEventListener("abort", terminate, { once: true }); if (isAborted(signal)) terminate(); timeout = setTimeout(() => { - timedOut = true; + termination ??= "timeout"; requestTermination(); }, prepared.publicPlan.limits.wall_time_ms); timeout.unref(); @@ -212,11 +209,8 @@ const launchReplayProcess = ( get terminationRequest() { return terminationRequest; }, - get cancelled() { - return cancelled; - }, - get timedOut() { - return timedOut; + get termination() { + return termination; }, }; }; @@ -239,20 +233,18 @@ interface ResolveReplayResultOptions { readonly collected: CollectedProcess; readonly unitResult: string; readonly cleanup: ReplayExecutionResult["cleanup"]; - readonly cancelled: boolean; - readonly timedOut: boolean; + readonly termination: "cancelled" | "timeout" | undefined; } const resolveReplayResult = ( options: ResolveReplayResultOptions, ): ReplayExecutionResult => { - const { prepared, collected, unitResult, cleanup, cancelled, timedOut } = - options; - if (cancelled || timedOut) + const { prepared, collected, unitResult, cleanup, termination } = options; + if (termination !== undefined) return terminationResult({ prepared, stderr: collected.stderr, - termination: cancelled ? "cancelled" : "timeout", + termination, cleanup, }); if (collected.outputExceeded) @@ -277,7 +269,7 @@ const resolveReplayResult = ( response = parseReplayWorkerResponse( rawResponse, prepared.publicPlan.cases, - prepared.publicPlan.right !== undefined, + prepared.publicPlan.right === undefined ? "single" : "differential", ); } catch { return terminationResult({ diff --git a/src/replay/LinuxJavaScriptReplaySandbox.ts b/src/replay/LinuxJavaScriptReplaySandbox.ts index 3819d534b..7f774367f 100644 --- a/src/replay/LinuxJavaScriptReplaySandbox.ts +++ b/src/replay/LinuxJavaScriptReplaySandbox.ts @@ -3,7 +3,7 @@ import { dirname } from "node:path"; import { digestJson, - type JavaScriptReplayPolicy, + type EnabledJavaScriptReplayPolicy, type PreparedReplayPlan, } from "../application/JavaScriptReplayPlanning.js"; import { buildLinuxX64ReplaySeccomp } from "./LinuxSeccompPolicy.js"; @@ -15,7 +15,7 @@ export type RuntimeFile = Awaited< export interface SandboxArgumentsOptions { readonly unit: string; - readonly policy: JavaScriptReplayPolicy; + readonly policy: EnabledJavaScriptReplayPolicy; readonly prepared: PreparedReplayPlan; readonly workerPath: string; readonly closure: readonly RuntimeFile[]; diff --git a/src/replay/ReplayOutcome.ts b/src/replay/ReplayOutcome.ts index c006c12cb..e14d808a3 100644 --- a/src/replay/ReplayOutcome.ts +++ b/src/replay/ReplayOutcome.ts @@ -50,19 +50,21 @@ export const commitOutcomes = ( outcomes: readonly WorkerProtocolOutcome[], ): ReplayExecutionResult["outcomes"] => outcomes.map((outcome) => { - const semantic = - outcome.value === undefined ? (outcome.exception ?? null) : outcome.value; + if (outcome.outcome === "return") + return { + case_id: outcome.case_id, + outcome: outcome.outcome, + value: jsonValueSchema.parse(outcome.value), + input_sha256: outcome.input_sha256, + output_sha256: digestJson(outcome.value), + truncated: false, + }; return { case_id: outcome.case_id, outcome: outcome.outcome, - ...(outcome.value === undefined - ? {} - : { value: jsonValueSchema.parse(outcome.value) }), - ...(outcome.exception === undefined - ? {} - : { exception: outcome.exception }), + exception: outcome.exception, input_sha256: outcome.input_sha256, - output_sha256: digestJson(semantic), + output_sha256: digestJson(outcome.exception), truncated: false, }; }); @@ -101,13 +103,22 @@ export const terminationResult = ( options: TerminationResultOptions, ): ReplayExecutionResult => { const { prepared, stderr, termination, cleanup, limitation } = options; - const outcomes = prepared.publicPlan.cases.map((item) => ({ - case_id: item.case_id, - outcome: termination, - input_sha256: item.sha256, - output_sha256: null, - truncated: termination === "protocol_error", - })); + const outcomes: ReplayExecutionResult["outcomes"] = + termination === "protocol_error" + ? prepared.publicPlan.cases.map((item) => ({ + case_id: item.case_id, + outcome: termination, + input_sha256: item.sha256, + output_sha256: null, + truncated: true, + })) + : prepared.publicPlan.cases.map((item) => ({ + case_id: item.case_id, + outcome: termination, + input_sha256: item.sha256, + output_sha256: null, + truncated: false, + })); const differential = prepared.publicPlan.right !== undefined; return { schema_version: 1, diff --git a/src/replay/ReplayWorkerProtocol.ts b/src/replay/ReplayWorkerProtocol.ts index 96607f1fb..ded2b8453 100644 --- a/src/replay/ReplayWorkerProtocol.ts +++ b/src/replay/ReplayWorkerProtocol.ts @@ -1,42 +1,54 @@ import { z } from "zod"; -const workerOutcomeSchema = z - .object({ - case_id: z.string(), - outcome: z.enum(["return", "exception", "serialization_error", "denied"]), - value: z.json().optional(), - exception: z - .object({ - name: z.string(), - message: z.string(), - stack: z.string().nullable(), - }) - .strict() - .optional(), - input_sha256: z.string().regex(/^[a-f0-9]{64}$/u), - output_sha256: z.null(), - truncated: z.literal(false), - }) - .strict() - .superRefine((value, context) => { - if (value.outcome === "return" && value.value === undefined) - context.addIssue({ code: "custom", message: "Return value is missing" }); - if (value.outcome !== "return" && value.exception === undefined) - context.addIssue({ code: "custom", message: "Exception is missing" }); - if (value.outcome === "return" && value.exception !== undefined) - context.addIssue({ code: "custom", message: "Return has an exception" }); - }); +const workerOutcomeFacts = { + case_id: z.string(), + input_sha256: z.string().regex(/^[a-f0-9]{64}$/u), + output_sha256: z.null(), + truncated: z.literal(false), +} as const; -const workerResponseSchema = z +const exceptionSchema = z + .object({ + name: z.string(), + message: z.string(), + stack: z.string().nullable(), + }) + .strict(); + +const workerOutcomeSchema = z.discriminatedUnion("outcome", [ + z.strictObject({ + ...workerOutcomeFacts, + outcome: z.literal("return"), + value: z.json(), + }), + z.strictObject({ + ...workerOutcomeFacts, + outcome: z.enum(["exception", "serialization_error", "denied"]), + exception: z.object(exceptionSchema.shape).strict(), + }), +]); + +const singleWorkerResponseSchema = z .object({ schema_version: z.literal(1), left: z.array(workerOutcomeSchema), - right: z.array(workerOutcomeSchema).optional(), + }) + .strict(); + +const differentialWorkerResponseSchema = z + .object({ + schema_version: z.literal(1), + left: z.array(workerOutcomeSchema), + right: z.array(workerOutcomeSchema), }) .strict(); export type WorkerProtocolOutcome = z.infer; -export type WorkerProtocolResponse = z.infer; +export type WorkerProtocolResponse = + | (z.infer & { readonly right?: never }) + | z.infer; + +export type ReplayWorkerResponseMode = "single" | "differential"; interface ExpectedCase { readonly case_id: string; @@ -47,14 +59,18 @@ interface ExpectedCase { export const parseReplayWorkerResponse = ( rawResponse: unknown, cases: readonly ExpectedCase[], - differential: boolean, + mode: ReplayWorkerResponseMode, ): WorkerProtocolResponse => { - const response = workerResponseSchema.parse(rawResponse); - if ((response.right !== undefined) !== differential) - throw new TypeError("Replay worker differential response is incomplete"); + const response = + mode === "single" + ? singleWorkerResponseSchema.parse(rawResponse) + : differentialWorkerResponseSchema.parse(rawResponse); validateOutcomeSequence(response.left, cases); - if (response.right !== undefined) - validateOutcomeSequence(response.right, cases); + if (mode === "differential") + validateOutcomeSequence( + differentialWorkerResponseSchema.parse(response).right, + cases, + ); return response; }; diff --git a/src/replay/SystemJavaScriptReplayHost.ts b/src/replay/SystemJavaScriptReplayHost.ts index c0c94ed77..2ec6c521e 100644 --- a/src/replay/SystemJavaScriptReplayHost.ts +++ b/src/replay/SystemJavaScriptReplayHost.ts @@ -15,7 +15,7 @@ import { spawn, type StdioOptions } from "node:child_process"; import type { JavaScriptReplayHost, - JavaScriptReplayPolicy, + EnabledJavaScriptReplayPolicy, ReplayExecutableIdentity, ReplaySourceBytes, } from "../application/JavaScriptReplayPlanning.js"; @@ -86,7 +86,7 @@ export class SystemJavaScriptReplayHost implements JavaScriptReplayHost { return linuxX64ReplaySeccompDigest(); } - async probe(policy: JavaScriptReplayPolicy): Promise { + async probe(policy: EnabledJavaScriptReplayPolicy): Promise { if (process.platform !== "linux" || process.arch !== "x64") throw new TypeError("Controlled replay requires Linux x86_64 in v1"); const bwrapMetadata = await stat(policy.bubblewrapPath); diff --git a/src/server/DynamicToolAvailability.ts b/src/server/DynamicToolAvailability.ts deleted file mode 100644 index 8f93f9932..000000000 --- a/src/server/DynamicToolAvailability.ts +++ /dev/null @@ -1,98 +0,0 @@ -import type { McpServer, RegisteredTool } from "@modelcontextprotocol/server"; - -import { - buildCapabilityInventory, - type AvailabilityPolicy, -} from "../application/CapabilityInventory.js"; -import type { BinarySessionPort } from "../application/BinarySession.js"; -import type { ClientFeatureAvailability } from "../contracts/toolOutputSchemaPrimitives.js"; - -interface ToolAvailabilityController { - /** Apply current session, policy, host, provider, and client availability. */ - synchronize(): boolean; -} - -/** - * Track public SDK tool handles and keep their visible state synchronized with - * the same availability projection returned by `binary_session`. - */ -export const installDynamicToolAvailability = ( - server: McpServer, - session: BinarySessionPort, - policy: () => AvailabilityPolicy, -): ToolAvailabilityController => { - const tools = new Map(); - const originalRegisterTool = server.registerTool.bind(server); - const originalSendToolListChanged = server.sendToolListChanged.bind(server); - let synchronizing = false; - const controller: ToolAvailabilityController = { - synchronize: () => { - if (synchronizing) return false; - synchronizing = true; - try { - const availability = new Map( - buildCapabilityInventory( - session.status(), - policy(), - clientFeatures(server), - ).map((item) => [item.name, item.available]), - ); - let changed = false; - for (const [name, tool] of tools) { - const enabled = availability.get(name) === true; - if (tool.enabled === enabled) continue; - changed = true; - if (enabled) tool.enable(); - else tool.disable(); - } - return changed; - } finally { - synchronizing = false; - } - }, - }; - - const wrappedRegisterTool = (...args: unknown[]): unknown => { - const name = args[0]; - if (typeof name !== "string") - throw new TypeError("MCP tool registration requires a string name"); - const registered: unknown = Reflect.apply( - originalRegisterTool, - server, - args, - ); - if (!isRegisteredTool(registered)) - throw new TypeError(`MCP SDK did not return a tool handle for ${name}`); - tools.set(name, registered); - return registered; - }; - if (!Reflect.set(server, "registerTool", wrappedRegisterTool)) - throw new TypeError("Unable to install dynamic MCP tool registration"); - if ( - !Reflect.set(server, "sendToolListChanged", () => { - if (controller.synchronize()) originalSendToolListChanged(); - }) - ) - throw new TypeError("Unable to install dynamic MCP tool notifications"); - - return controller; -}; - -const clientFeatures = (server: McpServer): ClientFeatureAvailability => { - const capabilities = server.server.getClientCapabilities(); - return { - elicitation_form: capabilities?.elicitation?.form !== undefined, - elicitation_url: capabilities?.elicitation?.url !== undefined, - roots: capabilities?.roots !== undefined, - sampling: capabilities?.sampling !== undefined, - }; -}; - -const isRegisteredTool = (value: unknown): value is RegisteredTool => { - if (typeof value !== "object" || value === null) return false; - return ( - typeof Reflect.get(value, "enabled") === "boolean" && - typeof Reflect.get(value, "enable") === "function" && - typeof Reflect.get(value, "disable") === "function" - ); -}; diff --git a/src/server/LazyToolCatalog.ts b/src/server/LazyToolCatalog.ts deleted file mode 100644 index b2b57ea78..000000000 --- a/src/server/LazyToolCatalog.ts +++ /dev/null @@ -1,181 +0,0 @@ -import type { - AnyToolHandler, - JsonSchemaValidator, - jsonSchemaValidator, - McpServer, - RegisteredTool, - StandardSchemaWithJSON, -} from "@modelcontextprotocol/server"; -import { - fromJsonSchema, - isCallToolResult, - isInputRequiredResult, -} from "@modelcontextprotocol/server"; - -import { GENERATED_MCP_TOOL_CATALOG } from "../generatedMcpToolCatalog.js"; -import type { ToolKind } from "../contracts/toolContractTypes.js"; - -type HydrateToolRegistrations = (kind: ToolKind) => Promise; - -/** - * Advertise the generated MCP catalog immediately and hydrate its callbacks - * through the existing registrars on first execution. - */ -export class LazyToolCatalog { - readonly #server: McpServer; - readonly #hydrateRegistrations: HydrateToolRegistrations; - readonly #includeSessionTools: boolean; - readonly #tools = new Map(); - readonly #hydrations = new Map>(); - #hydrationQueue: Promise = Promise.resolve(); - #closed = false; - - constructor( - server: McpServer, - hydrateRegistrations: HydrateToolRegistrations, - includeSessionTools = true, - ) { - this.#server = server; - this.#hydrateRegistrations = hydrateRegistrations; - this.#includeSessionTools = includeSessionTools; - } - - /** Register every generated tool with a lazy callback. */ - register(): void { - for (const contract of GENERATED_MCP_TOOL_CATALOG) { - if (contract.requiresSession && !this.#includeSessionTools) continue; - const inputSchema = advertisedSchema(contract.inputSchema); - const outputSchema = advertisedSchema(contract.outputSchema); - let registered: RegisteredTool | undefined; - const callback: AnyToolHandler = async ( - input, - context, - ) => { - await this.#hydrate(contract.kind); - const handler = registered?.handler; - if (handler === undefined || handler === callback) - throw new Error(`MCP tool ${contract.name} was not hydrated`); - const result: unknown = await Reflect.apply(handler, undefined, [ - input, - context, - ]); - if (isCallToolResult(result) || isInputRequiredResult(result)) - return result; - throw new TypeError( - `MCP tool ${contract.name} returned an invalid result`, - ); - }; - registered = this.#server.registerTool( - contract.name, - { - title: contract.title, - description: contract.description, - inputSchema, - outputSchema, - annotations: contract.annotations, - }, - callback, - ); - this.#tools.set(contract.name, registered); - } - } - - /** Wait for in-flight hydration and reject future first-use loading. */ - async close(): Promise { - this.#closed = true; - await Promise.allSettled(this.#hydrations.values()); - } - - async #hydrate(kind: ToolKind): Promise { - if (this.#closed) throw new Error("MCP tool catalog is closed"); - const existing = this.#hydrations.get(kind); - if (existing !== undefined) { - await existing; - return; - } - const hydration = this.#hydrationQueue - .catch(() => undefined) - .then(() => this.#runHydration(kind)); - this.#hydrationQueue = hydration; - this.#hydrations.set(kind, hydration); - try { - await hydration; - } catch (cause: unknown) { - if (this.#hydrations.get(kind) === hydration) - this.#hydrations.delete(kind); - throw cause; - } - } - - async #runHydration(kind: ToolKind): Promise { - if (this.#closed) throw new Error("MCP tool catalog is closed"); - const expected = GENERATED_MCP_TOOL_CATALOG.filter( - (contract) => - contract.kind === kind && - (this.#includeSessionTools || !contract.requiresSession), - ).map((contract) => contract.name); - const expectedNames = new Set(expected); - const hydrated = new Set(); - const originalRegisterTool = this.#server.registerTool; - const hydrationRegisterTool = (...args: unknown[]): unknown => { - const [name, config, callback] = args; - if ( - typeof name !== "string" || - !isRecord(config) || - typeof callback !== "function" - ) - throw new TypeError("Invalid lazy MCP tool registration"); - const registered = this.#tools.get(name); - if (registered === undefined || !expectedNames.has(name)) - throw new TypeError( - `MCP tool ${name} is not in the ${kind} catalog family`, - ); - if (hydrated.has(name)) - throw new TypeError(`MCP tool ${name} was hydrated more than once`); - hydrated.add(name); - Reflect.apply(registered.update, registered, [ - { - title: config.title, - description: config.description, - paramsSchema: config.inputSchema, - outputSchema: config.outputSchema, - annotations: config.annotations, - callback, - }, - ]); - return registered; - }; - if (!Reflect.set(this.#server, "registerTool", hydrationRegisterTool)) - throw new TypeError("Unable to install lazy MCP tool hydration"); - try { - await this.#hydrateRegistrations(kind); - } finally { - Reflect.set(this.#server, "registerTool", originalRegisterTool); - } - const missing = expected.filter((name) => !hydrated.has(name)); - if (missing.length > 0) - throw new TypeError( - `Generated MCP tools were not hydrated: ${missing.join(", ")}`, - ); - } -} - -const advertisedSchema = ( - jsonSchema: Readonly>, -): StandardSchemaWithJSON => - fromJsonSchema(jsonSchema, DEFERRED_VALIDATION_PROVIDER); - -class DeferredValidationProvider implements jsonSchemaValidator { - getValidator(): JsonSchemaValidator { - return (input: unknown) => ({ - valid: true, - data: input as T, - errorMessage: undefined, - }); - } -} - -const DEFERRED_VALIDATION_PROVIDER = new DeferredValidationProvider(); - -const isRecord = (value: unknown): value is Readonly> => - typeof value === "object" && value !== null && !Array.isArray(value); diff --git a/src/server/ProcessCaptureElicitation.ts b/src/server/ProcessCaptureElicitation.ts index 43cd1eafb..b44d7022b 100644 --- a/src/server/ProcessCaptureElicitation.ts +++ b/src/server/ProcessCaptureElicitation.ts @@ -6,6 +6,7 @@ import { inputResponse, type InputRequiredResult, type RequestStateCodec, + type ServerContext, } from "@modelcontextprotocol/server"; import { z } from "zod"; @@ -65,10 +66,11 @@ export interface ProcessCaptureElicitation { } interface ProcessCaptureElicitationContext { - readonly mcpReq: { - readonly envelope?: Readonly>; - readonly inputResponses?: Record; - readonly requestState: () => unknown; + readonly mcpReq: Pick< + ServerContext["mcpReq"], + "envelope" | "inputResponses" + > & { + readonly requestState: () => ProcessCaptureElicitationState | undefined; }; } diff --git a/src/server/createServer.ts b/src/server/createServer.ts index bbc6d4ad0..a81291ded 100644 --- a/src/server/createServer.ts +++ b/src/server/createServer.ts @@ -5,50 +5,65 @@ import { createRequestStateCodec, McpServer, PROTOCOL_VERSION_META_KEY, + type ServerContext, } from "@modelcontextprotocol/server"; import type { AnalysisOperationPort } from "../application/AnalysisProvider.js"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import { PRODUCT_IDENTITY } from "../identity.js"; -import { silentLogger, type Logger } from "../logger.js"; -import type { ProcessExecutionPolicy } from "../domain/processCapture.js"; -import type { EvidenceFilePolicy } from "../domain/evidenceBundle.js"; -import { registerGuidedPrompts } from "./registerPrompts.js"; -import { registerEvidenceResources } from "./registerEvidenceResources.js"; -import type { PermissionAuthority } from "../application/PermissionAuthority.js"; import type { BrowserObservationPort } from "../application/BrowserObservationPort.js"; import type { BrowserScenarioCapturePort } from "../application/BrowserScenarioCapturePort.js"; -import type { ElectronObservationPort } from "../application/ElectronObservationPort.js"; import type { ElectronActiveObservationPort } from "../application/ElectronActiveObservationPort.js"; +import type { ElectronObservationPort } from "../application/ElectronObservationPort.js"; +import type { + JavaScriptReplayHost, + JavaScriptReplayPolicy, + JavaScriptReplayRunner, +} from "../application/JavaScriptReplayPlanning.js"; import type { JavaScriptRuntimeObservationPort } from "../application/JavaScriptRuntimeObservationPort.js"; +import type { ManagedRuntimePolicy } from "../application/ManagedRuntimeCorrelationService.js"; +import { MANAGED_RUNTIME_DISABLED } from "../application/ManagedRuntimeCorrelationService.js"; +import type { PermissionAuthority } from "../application/PermissionAuthority.js"; +import type { EvidenceFilePolicy } from "../domain/evidenceBundle.js"; +import type { ProcessExecutionPolicy } from "../domain/processCapture.js"; +import { PRODUCT_IDENTITY } from "../identity.js"; +import { silentLogger, type Logger } from "../logger.js"; +import { LinuxJavaScriptReplayRunner } from "../replay/LinuxJavaScriptReplayRunner.js"; +import { SystemJavaScriptReplayHost } from "../replay/SystemJavaScriptReplayHost.js"; +import { mcpClientMetadata, mcpEnvelopeValue } from "./mcpClientMetadata.js"; +import { + PROCESS_CAPTURE_ELICITATION_POLICY, + type ProcessCaptureElicitationState, +} from "./ProcessCaptureElicitation.js"; +import { registerApplicationTools } from "./registerApplicationTools.js"; +import { registerArtifactTools } from "./registerArtifactTools.js"; +import { registerBrowserScenarioTool } from "./registerBrowserScenarioTool.js"; +import { registerBrowserTools } from "./registerBrowserTools.js"; +import { registerElectronTools } from "./registerElectronTools.js"; +import { registerEnhancedTools } from "./registerEnhancedTools.js"; +import { registerEvidenceResources } from "./registerEvidenceResources.js"; +import { registerJavaScriptRuntimeObservationTools } from "./registerJavaScriptRuntimeObservationTools.js"; +import { registerManagedTools } from "./registerManagedTools.js"; +import { registerManagedWorkflowTools } from "./registerManagedWorkflowTools.js"; +import { registerNativeTools } from "./registerNativeTools.js"; +import { registerOfficialTools } from "./registerOfficialTools.js"; +import { registerGuidedPrompts } from "./registerPrompts.js"; +import { registerSessionTools } from "./registerSessionTools.js"; import type { SessionAvailability } from "./sessionAvailabilityPolicy.js"; import { sessionAvailabilityPolicy } from "./sessionAvailabilityPolicy.js"; import { DENY_EVIDENCE_FILE_POLICY, DENY_PROCESS_POLICY, } from "./sessionToolPolicies.js"; -import { installDynamicToolAvailability } from "./DynamicToolAvailability.js"; const TARGET_FREE_INSTRUCTIONS = "ASAR/JavaScript -> analyze_javascript_application; archive/package -> open_binary(path), then inspect_artifact/inventory_artifact (active target); managed PE/CLI -> inspect_managed_artifact; browser/Electron -> list_browser_targets/list_electron_targets; approved -> capture_browser_scenario/capture_electron_scenario; Node/Electron Inspector -> list_javascript_runtime_targets; native binary/database -> open_binary, then binary_overview. Start with binary_session; use tools/list; capabilities via binary_session. Use summaries, cite Evidence IDs; Never repeat identical analysis or read full Evidence."; const ACTIVE_TARGET_INSTRUCTIONS = "REA analyzes the active reverse-engineering target. Start native analysis with binary_overview, then narrow with analyze_function, literal search, callers, callees, and xrefs. Prefer summary views, never repeat an identical call, and read full Evidence only when the task requires it."; -import type { - JavaScriptReplayHost, - JavaScriptReplayPolicy, - JavaScriptReplayRunner, -} from "../application/JavaScriptReplayPlanning.js"; -import type { ManagedRuntimePolicy } from "../application/ManagedRuntimeCorrelationService.js"; -import { - PROCESS_CAPTURE_ELICITATION_POLICY, - type ProcessCaptureElicitationState, -} from "./ProcessCaptureElicitation.js"; -import { LazyToolCatalog } from "./LazyToolCatalog.js"; export interface CreateServerOptions { readonly logger?: Logger; - readonly processPolicy?: ProcessExecutionPolicy; + readonly processPolicy?: () => ProcessExecutionPolicy; readonly evidenceFilePolicy?: EvidenceFilePolicy; readonly investigationInputRoots?: readonly string[]; readonly analysisSnapshotFilePolicy?: EvidenceFilePolicy; @@ -59,18 +74,11 @@ export interface CreateServerOptions { readonly electronActiveObservation?: ElectronActiveObservationPort; readonly javascriptRuntimeObservation?: JavaScriptRuntimeObservationPort; readonly artifactIntegrityContinueEnabled?: () => boolean; - readonly javascriptReplayPolicy?: JavaScriptReplayPolicy; + readonly javascriptReplayPolicy?: () => JavaScriptReplayPolicy; readonly javascriptReplayHost?: JavaScriptReplayHost; readonly javascriptReplayRunner?: JavaScriptReplayRunner; - readonly managedRuntimePolicy?: ManagedRuntimePolicy; + readonly managedRuntimePolicy?: () => ManagedRuntimePolicy; readonly availabilityPolicy?: () => SessionAvailability; - readonly loadOptionalProviders?: () => Promise<{ - readonly browserObservation: BrowserObservationPort; - readonly browserScenarioCapture: BrowserScenarioCapturePort; - readonly electronObservation: ElectronObservationPort; - readonly electronActiveObservation: ElectronActiveObservationPort; - readonly javascriptRuntimeObservation: JavaScriptRuntimeObservationPort; - }>; } const installSessionToolAvailability = ( @@ -80,7 +88,7 @@ const installSessionToolAvailability = ( ) => { if (session === undefined) return undefined; const policy = sessionAvailabilityPolicy(options.availabilityPolicy, { - processPolicy: options.processPolicy ?? DENY_PROCESS_POLICY, + processPolicy: options.processPolicy?.() ?? DENY_PROCESS_POLICY, evidenceFilePolicy: options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY, investigationInputRoots: options.investigationInputRoots ?? [], optionalFeatures: { @@ -92,13 +100,14 @@ const installSessionToolAvailability = ( options.permissionAuthority !== undefined, v8InspectorObservationEnabled: options.javascriptRuntimeObservation !== undefined, - javascriptReplayEnabled: options.javascriptReplayPolicy?.enabled ?? false, - managedRuntimeEnabled: options.managedRuntimePolicy?.enabled ?? false, + javascriptReplayEnabled: + options.javascriptReplayPolicy?.().status === "enabled", + managedRuntimeEnabled: + options.managedRuntimePolicy?.().status === "enabled", }, }); return { policy, - controller: installDynamicToolAvailability(server, session, policy), }; }; @@ -107,9 +116,7 @@ type ProcessCaptureElicitation = { typeof createRequestStateCodec >; readonly supported: (context: { - readonly mcpReq: { - readonly envelope?: Readonly>; - }; + readonly mcpReq: Pick; }) => boolean; readonly now: typeof Date.now; readonly consumedNonces: Map; @@ -121,8 +128,11 @@ const createProcessCaptureElicitation = ( stateCodec, supported: (context) => { const envelope = context.mcpReq.envelope; - const version = envelope?.[PROTOCOL_VERSION_META_KEY]; - const capabilities = envelope?.[CLIENT_CAPABILITIES_META_KEY]; + const version = mcpEnvelopeValue(envelope, PROTOCOL_VERSION_META_KEY); + const capabilities = mcpEnvelopeValue( + envelope, + CLIENT_CAPABILITIES_META_KEY, + ); return ( typeof version === "string" && PROCESS_CAPTURE_ELICITATION_POLICY.protocolVersions.some( @@ -137,93 +147,6 @@ const createProcessCaptureElicitation = ( consumedNonces: new Map(), }); -const createOptionalProviderLoader = (options: CreateServerOptions) => { - let optionalProviders: - | ReturnType> - | undefined; - return () => { - optionalProviders ??= options - .loadOptionalProviders?.() - .catch((cause: unknown) => { - optionalProviders = undefined; - throw cause; - }); - return optionalProviders; - }; -}; - -const createLazyToolCatalog = ({ - server, - analysis, - session, - options, - toolLogger, - permissionAuthority, - activeTarget, - recordEvidence, - recordEvidenceWithUnknown, - availabilityPolicy, - startedAt, - processCaptureElicitation, -}: { - readonly server: McpServer; - readonly analysis: AnalysisOperationPort; - readonly session: BinarySessionPort | undefined; - readonly options: CreateServerOptions; - readonly toolLogger: Logger; - readonly permissionAuthority: PermissionAuthority | undefined; - readonly activeTarget: ReturnType< - typeof createSessionRecorders - >["activeTarget"]; - readonly recordEvidence: ReturnType< - typeof createSessionRecorders - >["recordEvidence"]; - readonly recordEvidenceWithUnknown: ReturnType< - typeof createSessionRecorders - >["recordEvidenceWithUnknown"]; - readonly availabilityPolicy: CreateServerOptions["availabilityPolicy"]; - readonly startedAt: string; - readonly processCaptureElicitation: ProcessCaptureElicitation; -}): LazyToolCatalog => { - const loadOptionalProviders = createOptionalProviderLoader(options); - return new LazyToolCatalog( - server, - async (kind) => { - const needsObservationProviders = - kind === "browser-provider" || - kind === "electron-provider" || - kind === "runtime-provider"; - const [{ hydrateServerToolFamily }, loadedOptionalProviders] = - await Promise.all([ - import("./hydrateServerTools.js"), - needsObservationProviders ? loadOptionalProviders() : undefined, - ]); - const hydratedOptions = - loadedOptionalProviders === undefined - ? options - : { ...options, ...loadedOptionalProviders }; - await hydrateServerToolFamily({ - kind, - server, - analysis, - session, - options: hydratedOptions, - context: { - logger: toolLogger, - permissionAuthority, - activeTarget, - recordEvidence, - recordEvidenceWithUnknown, - availabilityPolicy, - startedAt, - processCaptureElicitation, - }, - }); - }, - session !== undefined, - ); -}; - const createMcpServer = ( processCaptureStateCodec: ProcessCaptureElicitation["stateCodec"], session: BinarySessionPort | undefined, @@ -235,8 +158,7 @@ const createMcpServer = ( }, { capabilities: { - tools: { listChanged: true }, - resources: { listChanged: true, subscribe: true }, + resources: { subscribe: true }, }, inputRequired: { maxRounds: 3, @@ -270,13 +192,10 @@ export const createServer = ( ttlSeconds: PROCESS_CAPTURE_ELICITATION_POLICY.stateTtlSeconds, }); const server = createMcpServer(processCaptureStateCodec, session); - const dynamicTools = installSessionToolAvailability(server, session, options); + const availability = installSessionToolAvailability(server, session, options); server.server.onclose = () => { permissionAuthority?.clearSessionGrants(); }; - if (dynamicTools !== undefined) - server.server.oninitialized = () => server.sendToolListChanged(); - session?.onAvailabilityChanged?.(() => server.sendToolListChanged()); registerServerIdentityResource(server, startedAt); const toolLogger = logger.child({ layer: "server" }); const { activeTarget, recordEvidence, recordEvidenceWithUnknown } = @@ -284,34 +203,38 @@ export const createServer = ( const processCaptureElicitation = createProcessCaptureElicitation( processCaptureStateCodec, ); - const lazyTools = createLazyToolCatalog({ + const toolContext: ServerToolContext = { server, analysis, session, options, - toolLogger, + logger: toolLogger, permissionAuthority, activeTarget, recordEvidence, recordEvidenceWithUnknown, - availabilityPolicy: dynamicTools?.policy, - startedAt, - processCaptureElicitation, - }); - lazyTools.register(); + }; + registerBinaryAnalysisTools(toolContext); + registerObservationTools(toolContext); registerGuidedPrompts(server, analysis, session); if (session !== undefined) { registerEvidenceResources(server, session); + registerSessionTools(server, session, toolLogger, { + ...options, + ...(availability === undefined + ? {} + : { availabilityPolicy: availability.policy }), + ...(permissionAuthority === undefined ? {} : { permissionAuthority }), + startedAt, + processCaptureElicitation, + }); } - dynamicTools?.controller.synchronize(); - const close = server.close.bind(server); - server.close = async () => { - await lazyTools.close(); - await close(); - }; return server; }; +const isRecord = (value: unknown): value is Record => + typeof value === "object" && value !== null && !Array.isArray(value); + const createSessionRecorders = ( server: McpServer, session: BinarySessionPort | undefined, @@ -337,6 +260,120 @@ const createSessionRecorders = ( }, }); +interface ServerToolContext extends ReturnType { + readonly server: McpServer; + readonly analysis: AnalysisOperationPort; + readonly session: BinarySessionPort | undefined; + readonly options: CreateServerOptions; + readonly logger: Logger; + readonly permissionAuthority: PermissionAuthority | undefined; +} + +const registerBinaryAnalysisTools = ({ + server, + analysis, + session, + options, + logger, + permissionAuthority, + activeTarget, + recordEvidence, + recordEvidenceWithUnknown, +}: ServerToolContext): void => { + const recordUnknown = + session === undefined + ? undefined + : (input: Parameters[0]) => + session.recordUnknown(input); + const analysisOptions = { + logger, + activeTarget, + recordEvidence, + recordUnknown, + }; + registerOfficialTools(server, analysis, analysisOptions); + registerEnhancedTools(server, analysis, { + ...analysisOptions, + analysisProfile: + session === undefined ? undefined : () => session.analysisProfile(), + }); + const evidenceOptions = { logger, activeTarget, recordEvidence }; + registerNativeTools(server, analysis, evidenceOptions); + registerArtifactTools(server, analysis, { + ...evidenceOptions, + ...(permissionAuthority === undefined ? {} : { permissionAuthority }), + }); + registerManagedTools(server, analysis, { + ...evidenceOptions, + session, + }); + if (session !== undefined) + registerManagedWorkflowTools(server, { + logger, + recordEvidence, + recordEvidenceWithUnknown, + session, + runtime: { + policy: + options.managedRuntimePolicy ?? (() => MANAGED_RUNTIME_DISABLED), + authority: permissionAuthority, + }, + }); +}; + +const registerObservationTools = ({ + server, + session, + options, + logger, + permissionAuthority, + recordEvidence, + recordEvidenceWithUnknown, +}: ServerToolContext): void => { + const common = { logger, permissionAuthority, recordEvidence }; + registerBrowserTools(server, { + ...common, + browser: options.browserObservation, + }); + registerBrowserScenarioTool(server, { + ...common, + provider: options.browserScenarioCapture, + }); + registerElectronTools(server, { + ...common, + electron: options.electronObservation, + electronActive: options.electronActiveObservation, + }); + registerJavaScriptRuntimeObservationTools(server, { + ...common, + runtime: options.javascriptRuntimeObservation, + }); + registerApplicationTools(server, { + logger, + recordEvidence, + recordEvidenceWithUnknown, + evidenceLookup: + session === undefined + ? undefined + : (evidenceId) => session.evidenceById(evidenceId), + evidenceFilePolicy: options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY, + permissionAuthority, + retainCoverageWorkspace: + session === undefined + ? undefined + : (workspace) => + session.retainReconstructionCoverageWorkspace(workspace), + replay: { + policy: + options.javascriptReplayPolicy ?? (() => ({ status: "disabled" })), + host: options.javascriptReplayHost ?? new SystemJavaScriptReplayHost(), + runner: + options.javascriptReplayRunner ?? new LinuxJavaScriptReplayRunner(), + authority: permissionAuthority, + }, + }); +}; + const registerServerIdentityResource = ( server: McpServer, startedAt: string, @@ -349,10 +386,9 @@ const registerServerIdentityResource = ( description: "Live package, SDK, protocol, and catalog identity.", mimeType: "application/json", }, - async (uri) => { + async (uri, context) => { const { createServerIdentity } = await import("../serverIdentity.js"); - const client = server.server.getClientVersion(); - const protocolVersion = server.server.getNegotiatedProtocolVersion(); + const { client, protocolVersion } = mcpClientMetadata(context); return { contents: [ { @@ -373,6 +409,3 @@ const registerServerIdentityResource = ( }, ); }; - -const isRecord = (value: unknown): value is Record => - typeof value === "object" && value !== null && !Array.isArray(value); diff --git a/src/server/hydrateServerTools.ts b/src/server/hydrateServerTools.ts deleted file mode 100644 index 16f0f04d2..000000000 --- a/src/server/hydrateServerTools.ts +++ /dev/null @@ -1,298 +0,0 @@ -import type { McpServer } from "@modelcontextprotocol/server"; - -import type { AnalysisOperationPort } from "../application/AnalysisProvider.js"; -import type { BinarySessionPort } from "../application/BinarySession.js"; -import type { PermissionAuthority } from "../application/PermissionAuthority.js"; -import type { BinaryTarget } from "../domain/binaryTarget.js"; -import type { Logger } from "../logger.js"; -import type { ToolKind } from "../contracts/toolContractTypes.js"; -import type { CreateServerOptions } from "./createServer.js"; -import type { ProcessCaptureElicitation } from "./ProcessCaptureElicitation.js"; -import type { SessionAvailability } from "./sessionAvailabilityPolicy.js"; - -interface HydratedToolContext { - readonly logger: Logger; - readonly permissionAuthority: PermissionAuthority | undefined; - readonly activeTarget: (() => BinaryTarget | undefined) | undefined; - readonly recordEvidence: BinarySessionPort["recordEvidence"] | undefined; - readonly recordEvidenceWithUnknown: - | BinarySessionPort["recordEvidenceWithUnknown"] - | undefined; - readonly availabilityPolicy: (() => SessionAvailability) | undefined; - readonly startedAt: string; - readonly processCaptureElicitation: ProcessCaptureElicitation; -} - -export interface HydrateServerToolFamilyInput { - readonly kind: ToolKind; - readonly server: McpServer; - readonly analysis: AnalysisOperationPort; - readonly session: BinarySessionPort | undefined; - readonly options: CreateServerOptions; - readonly context: HydratedToolContext; -} - -/** - * Install production callbacks on generated lazy tool registrations. - */ -export const hydrateServerToolFamily = async ({ - kind, - server, - analysis, - session, - options, - context, -}: HydrateServerToolFamilyInput): Promise => { - const toolContext = { - server, - analysis, - session, - options, - logger: context.logger, - permissionAuthority: context.permissionAuthority, - activeTarget: context.activeTarget, - recordEvidence: context.recordEvidence, - recordEvidenceWithUnknown: context.recordEvidenceWithUnknown, - }; - switch (kind) { - case "official-proxy": { - const { registerOfficialTools } = await import( - "./registerOfficialTools.js" - ); - registerOfficialTools(server, analysis, analysisOptions(toolContext)); - return; - } - case "enhanced": { - const { registerEnhancedTools } = await import( - "./registerEnhancedTools.js" - ); - registerEnhancedTools(server, analysis, enhancedOptions(toolContext)); - return; - } - case "native-provider": { - const { registerNativeTools } = await import("./registerNativeTools.js"); - registerNativeTools(server, analysis, evidenceOptions(toolContext)); - return; - } - case "artifact-provider": { - const { registerArtifactTools } = await import( - "./registerArtifactTools.js" - ); - registerArtifactTools(server, analysis, { - ...evidenceOptions(toolContext), - ...(context.permissionAuthority === undefined - ? {} - : { permissionAuthority: context.permissionAuthority }), - }); - return; - } - case "managed-provider": { - const { registerManagedTools } = await import( - "./registerManagedTools.js" - ); - registerManagedTools(server, analysis, { - ...evidenceOptions(toolContext), - session, - }); - return; - } - case "application": - await registerApplicationFamily(toolContext); - return; - case "browser-provider": - case "electron-provider": - case "runtime-provider": { - await hydrateObservationFamily(kind, toolContext); - return; - } - case "session": { - if (session === undefined) - throw new TypeError("Session tools require a binary session"); - const { registerSessionTools } = await import( - "./registerSessionTools.js" - ); - registerSessionTools(server, session, context.logger, { - ...options, - ...(context.availabilityPolicy === undefined - ? {} - : { availabilityPolicy: context.availabilityPolicy }), - ...(context.permissionAuthority === undefined - ? {} - : { permissionAuthority: context.permissionAuthority }), - startedAt: context.startedAt, - processCaptureElicitation: context.processCaptureElicitation, - }); - } - } -}; - -const hydrateObservationFamily = async ( - kind: "browser-provider" | "electron-provider" | "runtime-provider", - context: ServerToolContext, -): Promise => { - const common = { - logger: context.logger, - permissionAuthority: context.permissionAuthority, - recordEvidence: context.recordEvidence, - }; - if (kind === "browser-provider") { - const [{ registerBrowserTools }, { registerBrowserScenarioTool }] = - await Promise.all([ - import("./registerBrowserTools.js"), - import("./registerBrowserScenarioTool.js"), - ]); - registerBrowserTools(context.server, { - ...common, - browser: context.options.browserObservation, - }); - registerBrowserScenarioTool(context.server, { - ...common, - provider: context.options.browserScenarioCapture, - }); - return; - } - if (kind === "electron-provider") { - const { registerElectronTools } = await import( - "./registerElectronTools.js" - ); - registerElectronTools(context.server, { - ...common, - electron: context.options.electronObservation, - electronActive: context.options.electronActiveObservation, - }); - return; - } - const { registerJavaScriptRuntimeObservationTools } = await import( - "./registerJavaScriptRuntimeObservationTools.js" - ); - registerJavaScriptRuntimeObservationTools(context.server, { - ...common, - runtime: context.options.javascriptRuntimeObservation, - }); -}; - -interface ServerToolContext { - readonly server: McpServer; - readonly analysis: AnalysisOperationPort; - readonly session: BinarySessionPort | undefined; - readonly options: CreateServerOptions; - readonly logger: Logger; - readonly permissionAuthority: PermissionAuthority | undefined; - readonly activeTarget: (() => BinaryTarget | undefined) | undefined; - readonly recordEvidence: BinarySessionPort["recordEvidence"] | undefined; - readonly recordEvidenceWithUnknown: - | BinarySessionPort["recordEvidenceWithUnknown"] - | undefined; -} - -const analysisOptions = ({ - logger, - activeTarget, - recordEvidence, - session, -}: ServerToolContext) => { - const recordUnknown = - session === undefined - ? undefined - : (input: Parameters[0]) => - session.recordUnknown(input); - return { - logger, - activeTarget, - recordEvidence, - recordUnknown, - }; -}; - -const enhancedOptions = (context: ServerToolContext) => ({ - ...analysisOptions(context), - analysisProfile: - context.session === undefined - ? undefined - : () => context.session?.analysisProfile(), -}); - -const evidenceOptions = ({ - logger, - activeTarget, - recordEvidence, -}: ServerToolContext) => ({ - logger, - activeTarget, - recordEvidence, -}); - -const registerApplicationFamily = async ({ - server, - session, - options, - logger, - permissionAuthority, - recordEvidence, - recordEvidenceWithUnknown, -}: ServerToolContext): Promise => { - const [ - { registerApplicationTools }, - { registerManagedWorkflowTools }, - { LinuxJavaScriptReplayRunner }, - { SystemJavaScriptReplayHost }, - ] = await Promise.all([ - import("./registerApplicationTools.js"), - import("./registerManagedWorkflowTools.js"), - import("../replay/LinuxJavaScriptReplayRunner.js"), - import("../replay/SystemJavaScriptReplayHost.js"), - ]); - if (session !== undefined) - registerManagedWorkflowTools(server, { - logger, - recordEvidence, - recordEvidenceWithUnknown, - session, - runtime: { - policy: options.managedRuntimePolicy ?? { - enabled: false, - roots: [], - executablePath: "/usr/bin/dotnet", - }, - authority: permissionAuthority, - }, - }); - registerApplicationTools(server, { - logger, - recordEvidence, - recordEvidenceWithUnknown, - evidenceLookup: - session === undefined - ? undefined - : (evidenceId) => session.evidenceById(evidenceId), - evidenceFilePolicy: options.evidenceFilePolicy ?? { - roots: [], - maxBytes: 1, - maxDepth: 1, - maxStringLength: 1, - maxNodes: 1, - }, - permissionAuthority, - retainCoverageWorkspace: - session === undefined - ? undefined - : (workspace) => { - return session.retainReconstructionCoverageWorkspace(workspace); - }, - replay: { - policy: options.javascriptReplayPolicy ?? { - enabled: false, - roots: [], - nodePath: process.execPath, - bubblewrapPath: "/usr/bin/bwrap", - systemdRunPath: "/usr/bin/systemd-run", - systemctlPath: "/usr/bin/systemctl", - shellPath: "/usr/bin/bash", - }, - host: options.javascriptReplayHost ?? new SystemJavaScriptReplayHost(), - runner: - options.javascriptReplayRunner ?? new LinuxJavaScriptReplayRunner(), - authority: permissionAuthority, - }, - }); -}; diff --git a/src/server/mcpClientMetadata.ts b/src/server/mcpClientMetadata.ts new file mode 100644 index 000000000..a475a9a13 --- /dev/null +++ b/src/server/mcpClientMetadata.ts @@ -0,0 +1,56 @@ +import { + CLIENT_CAPABILITIES_META_KEY, + CLIENT_INFO_META_KEY, + PROTOCOL_VERSION_META_KEY, + type ServerContext, +} from "@modelcontextprotocol/server"; + +import type { ClientFeatureAvailability } from "../contracts/toolOutputSchemaPrimitives.js"; +import type { ConnectedClientIdentity } from "../serverIdentity.js"; + +/** Client metadata bound to the current SDK request rather than server-global state. */ +export const mcpClientMetadata = (context: { + readonly mcpReq: Pick; +}) => { + const envelope = context.mcpReq.envelope; + const client = implementation( + mcpEnvelopeValue(envelope, CLIENT_INFO_META_KEY), + ); + const protocolVersion = mcpEnvelopeValue(envelope, PROTOCOL_VERSION_META_KEY); + return { + ...(client === undefined ? {} : { client }), + clientFeatures: capabilityFeatures( + mcpEnvelopeValue(envelope, CLIENT_CAPABILITIES_META_KEY), + ), + ...(typeof protocolVersion === "string" ? { protocolVersion } : {}), + }; +}; + +/** Read an SDK-defined metadata key from the SDK's currently opaque envelope type. */ +export const mcpEnvelopeValue = ( + envelope: ServerContext["mcpReq"]["envelope"], + key: string, +): unknown => (envelope === undefined ? undefined : Reflect.get(envelope, key)); + +const implementation = (value: unknown): ConnectedClientIdentity | undefined => + isRecord(value) && + typeof value.name === "string" && + typeof value.version === "string" + ? { name: value.name, version: value.version } + : undefined; + +const capabilityFeatures = (value: unknown): ClientFeatureAvailability => { + const capabilities = isRecord(value) ? value : {}; + const elicitation = isRecord(capabilities.elicitation) + ? capabilities.elicitation + : {}; + return { + elicitation_form: elicitation.form !== undefined, + elicitation_url: elicitation.url !== undefined, + roots: capabilities.roots !== undefined, + sampling: capabilities.sampling !== undefined, + }; +}; + +const isRecord = (value: unknown): value is Record => + typeof value === "object" && value !== null && !Array.isArray(value); diff --git a/src/server/mcpProgress.ts b/src/server/mcpProgress.ts index 430fa8e37..1b2aa09a4 100644 --- a/src/server/mcpProgress.ts +++ b/src/server/mcpProgress.ts @@ -1,22 +1,12 @@ +import type { ServerContext } from "@modelcontextprotocol/server"; import type { ProgressReporter } from "../application/ProgressReporter.js"; import { createProgressReporter, silentProgressReporter, } from "../application/ProgressReporter.js"; -interface McpProgressContext { - readonly mcpReq: { - readonly _meta?: { readonly progressToken?: string | number | undefined }; - notify(notification: { - readonly method: "notifications/progress"; - readonly params: { - readonly progressToken: string | number; - readonly progress: number; - readonly total?: number; - readonly message?: string; - }; - }): Promise; - }; +export interface McpProgressContext { + readonly mcpReq: Pick; } /** Adapt the request's negotiated MCP progress token to application progress. */ diff --git a/src/server/registerApplicationTools/characterization.ts b/src/server/registerApplicationTools/characterization.ts index 0002243b8..0bba0980e 100644 --- a/src/server/registerApplicationTools/characterization.ts +++ b/src/server/registerApplicationTools/characterization.ts @@ -5,18 +5,15 @@ import { prepareNodeCharacterization, } from "../../application/NodeRuntimeCharacterizationService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; +import { parseEvidence } from "../../domain/evidence.js"; import { - nodeCharacterizationExecutionInputSchema, nodeCharacterizationExecutionOutputSchema, - nodeCharacterizationPreparationInputSchema, nodeCharacterizationPreparationOutputSchema, } from "../../domain/nodeRuntimeCharacterization.js"; -import { parseEvidence } from "../../domain/evidence.js"; -import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; -import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; import { mcpProgressReporter } from "../mcpProgress.js"; +import { logToolExecution } from "../toolLogging.js"; +import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; +import { toCallToolResult } from "../toolResult.js"; import { recordSources } from "./helpers.js"; import type { ApplicationToolRegistration } from "./types.js"; @@ -36,17 +33,11 @@ export const registerCharacterizationTools = ( prepareContract.name, toolRegistrationOptions(prepareContract), async (input, context) => { - const parsed = safeParseToolInput( - nodeCharacterizationPreparationInputSchema, - input, - prepareContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, prepareContract); const result = await logToolExecution( options.logger, prepareContract.name, () => - prepareNodeCharacterization(options.replay, parsed.value, { + prepareNodeCharacterization(options.replay, input, { signal: context.mcpReq.signal, progress: mcpProgressReporter(context), }), @@ -69,17 +60,11 @@ export const registerCharacterizationTools = ( executeContract.name, toolRegistrationOptions(executeContract), async (input, context) => { - const parsed = safeParseToolInput( - nodeCharacterizationExecutionInputSchema, - input, - executeContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, executeContract); const result = await logToolExecution( options.logger, executeContract.name, () => - executeNodeCharacterization(options.replay, parsed.value, { + executeNodeCharacterization(options.replay, input, { signal: context.mcpReq.signal, progress: mcpProgressReporter(context), }), @@ -91,7 +76,7 @@ export const registerCharacterizationTools = ( const sources = [ output.transformation_evidence, ...output.replay.source_evidence, - ...(output.replay.evidence === null ? [] : [output.replay.evidence]), + output.replay.evidence, output.evidence, ].map((item) => parseEvidence(item)); const recorded = recordSources(options.recordEvidence, sources); diff --git a/src/server/registerApplicationTools/compareExportShapes.ts b/src/server/registerApplicationTools/compareExportShapes.ts index 5b6fb7e31..b51eb65de 100644 --- a/src/server/registerApplicationTools/compareExportShapes.ts +++ b/src/server/registerApplicationTools/compareExportShapes.ts @@ -3,12 +3,10 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { resolveCompareJavaScriptExportShapesRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js"; import { compareJavaScriptExportShapesEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { compareJavaScriptExportShapesRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js"; import { javaScriptExportShapeComparisonResultSchema } from "../../domain/javascriptExportShapeComparisonSchemas.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; +import { toCallToolResult } from "../toolResult.js"; import { recordResult, recordSources } from "./helpers.js"; import type { ApplicationToolRegistration } from "./types.js"; @@ -23,14 +21,8 @@ export const registerCompareJavaScriptExportShapesTool = ( contract.name, toolRegistrationOptions(contract), async (input) => { - const parsedInput = safeParseToolInput( - compareJavaScriptExportShapesRequestSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); const resolved = resolveCompareJavaScriptExportShapesRequestValidated( - parsedInput.value, + input, options.evidenceLookup, ); if (!resolved.ok) return toCallToolResult(resolved, contract); diff --git a/src/server/registerApplicationTools/compareSourceToBundle.ts b/src/server/registerApplicationTools/compareSourceToBundle.ts index 67eb20932..5796e2a74 100644 --- a/src/server/registerApplicationTools/compareSourceToBundle.ts +++ b/src/server/registerApplicationTools/compareSourceToBundle.ts @@ -1,12 +1,10 @@ import type { McpServer } from "@modelcontextprotocol/server"; -import { compareSourceToBundleEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js"; import { resolveCompareSourceToBundleRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js"; +import { compareSourceToBundleEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { compareSourceToBundleRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js"; import { sourceToBundleComparisonResultSchema } from "../../domain/sourceToBundleComparisonSchemas.js"; import { logToolExecution } from "../toolLogging.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; import { recordResult, recordSources } from "./helpers.js"; @@ -23,14 +21,8 @@ export const registerCompareSourceToBundleTool = ( contract.name, toolRegistrationOptions(contract), async (input) => { - const parsedInput = safeParseToolInput( - compareSourceToBundleRequestSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); const resolved = resolveCompareSourceToBundleRequestValidated( - parsedInput.value, + input, options.evidenceLookup, ); if (!resolved.ok) return toCallToolResult(resolved, contract); diff --git a/src/server/registerApplicationTools/compareVersions.ts b/src/server/registerApplicationTools/compareVersions.ts index 95a5c4077..b3e1a37b5 100644 --- a/src/server/registerApplicationTools/compareVersions.ts +++ b/src/server/registerApplicationTools/compareVersions.ts @@ -1,14 +1,12 @@ import type { McpServer } from "@modelcontextprotocol/server"; -import { compareApplicationVersionsEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js"; import { resolveCompareApplicationVersionsRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js"; +import { compareApplicationVersionsEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { compareApplicationVersionsRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js"; import { applicationVersionComparisonResultSchema } from "../../domain/javascriptApplicationVersionComparisonSchemas.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { toCallToolResult } from "../toolResult.js"; import { recordResult, recordSources } from "./helpers.js"; import type { ApplicationToolRegistration } from "./types.js"; @@ -23,15 +21,8 @@ export const registerCompareApplicationVersionsTool = ( compareContract.name, toolRegistrationOptions(compareContract), async (input) => { - const parsedInput = safeParseToolInput( - compareApplicationVersionsRequestSchema, - input, - compareContract.name, - ); - if (!parsedInput.ok) - return toCallToolResult(parsedInput, compareContract); const resolved = resolveCompareApplicationVersionsRequestValidated( - parsedInput.value, + input, options.evidenceLookup, ); if (!resolved.ok) return toCallToolResult(resolved, compareContract); diff --git a/src/server/registerApplicationTools/controlledReplay.ts b/src/server/registerApplicationTools/controlledReplay.ts index 9966d69fe..b9fb348b4 100644 --- a/src/server/registerApplicationTools/controlledReplay.ts +++ b/src/server/registerApplicationTools/controlledReplay.ts @@ -2,16 +2,12 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { runControlledReplayValidated } from "../../application/JavaScriptReplayService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { - controlledReplayInputSchema, - controlledReplayOutputSchema, -} from "../../domain/javascriptReplay.js"; import { parseEvidence } from "../../domain/evidence.js"; -import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; -import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { controlledReplayOutputSchema } from "../../domain/javascriptReplay.js"; import { mcpProgressReporter } from "../mcpProgress.js"; +import { logToolExecution } from "../toolLogging.js"; +import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; +import { toCallToolResult } from "../toolResult.js"; import { recordSources } from "./helpers.js"; import type { ApplicationToolRegistration } from "./types.js"; @@ -26,25 +22,18 @@ export const registerControlledReplayTool = ( replayContract.name, toolRegistrationOptions(replayContract), async (input, context) => { - const parsedInput = safeParseToolInput( - controlledReplayInputSchema, - input, - replayContract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, replayContract); - const parsed = parsedInput.value; const result = await logToolExecution( options.logger, replayContract.name, () => - runControlledReplayValidated(options.replay, parsed, { + runControlledReplayValidated(options.replay, input, { signal: context.mcpReq.signal, progress: mcpProgressReporter(context), }), ); if (!result.ok) return toCallToolResult(result, replayContract); const output = controlledReplayOutputSchema.parse(result.value); - if (output.evidence !== null) { + if (output.phase === "execute") { const sourcesRecorded = recordSources( options.recordEvidence, output.source_evidence.map((item) => parseEvidence(item)), @@ -59,7 +48,7 @@ export const registerControlledReplayTool = ( } return toCallToolResult(result, replayContract, { evidenceResourcesAvailable: - output.evidence !== null && options.recordEvidence !== undefined, + output.phase === "execute" && options.recordEvidence !== undefined, }); }, ); diff --git a/src/server/registerApplicationTools/coverage.ts b/src/server/registerApplicationTools/coverage.ts index 76f882b02..f625f2ac1 100644 --- a/src/server/registerApplicationTools/coverage.ts +++ b/src/server/registerApplicationTools/coverage.ts @@ -1,29 +1,24 @@ import type { McpServer } from "@modelcontextprotocol/server"; +import { + authorizeFileReadWithDeferredWrite, + authorizeRootPermission, +} from "../../application/DeferredFileAuthorization.js"; import { commitReconstructionCoverage, queryReconstructionCoverage, } from "../../application/ReconstructionCoverageService.js"; import { readReconstructionCoverageWorkspace } from "../../application/ReconstructionCoverageWorkspaceStore.js"; -import { - authorizeFileReadWithDeferredWrite, - authorizeRootPermission, -} from "../../application/DeferredFileAuthorization.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { - reconstructionCoverageCommitInputSchema, - reconstructionCoverageQueryInputSchema, -} from "../../application/ReconstructionCoverageService.js"; -import { reconstructionClosureResultSchema } from "../../domain/reconstructionCoverage.js"; import { AnalysisCapabilityUnavailableError, EvidenceIntegrityError, } from "../../domain/errors.js"; +import { reconstructionClosureResultSchema } from "../../domain/reconstructionCoverage.js"; import { err } from "../../domain/result.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { toCallToolResult } from "../toolResult.js"; import { coverageWorkspaceUri } from "./helpers.js"; import type { ApplicationToolRegistration } from "./types.js"; @@ -49,12 +44,6 @@ const registerCommitTool = ( commitContract.name, toolRegistrationOptions(commitContract), async (input, context) => { - const parsed = safeParseToolInput( - reconstructionCoverageCommitInputSchema, - input, - commitContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, commitContract); if (options.permissionAuthority === undefined) return toCallToolResult( err( @@ -69,7 +58,7 @@ const registerCommitTool = ( const authorization = await authorizeFileReadWithDeferredWrite( options.permissionAuthority, { - path: parsed.value.workspace_path, + path: input.workspace_path, readCapability: "investigation_workspace_read", writeCapability: "investigation_workspace_write", operation: commitContract.name, @@ -83,22 +72,20 @@ const registerCommitTool = ( options.logger, commitContract.name, () => - commitReconstructionCoverage( - parsed.value, - options.evidenceFilePolicy, - { signal: context.mcpReq.signal }, - ), + commitReconstructionCoverage(input, options.evidenceFilePolicy, { + signal: context.mcpReq.signal, + }), ); if (!result.ok) return toCallToolResult(result, commitContract); - options.retainCoverageWorkspace?.(parsed.value.workspace); + options.retainCoverageWorkspace?.(input.workspace); return toCallToolResult(result, commitContract, { resourceLinks: options.retainCoverageWorkspace === undefined ? [] : [ { - uri: coverageWorkspaceUri(parsed.value.workspace), - name: parsed.value.workspace.workspace_id, + uri: coverageWorkspaceUri(input.workspace), + name: input.workspace.workspace_id, description: "Session-retained reconstruction coverage workspace revision", }, @@ -116,12 +103,6 @@ const registerQueryTool = ( queryContract.name, toolRegistrationOptions(queryContract), async (input, context) => { - const parsed = safeParseToolInput( - reconstructionCoverageQueryInputSchema, - input, - queryContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, queryContract); if (options.permissionAuthority === undefined) return toCallToolResult( err( @@ -137,7 +118,7 @@ const registerQueryTool = ( options.permissionAuthority, { capability: "investigation_workspace_read", - roots: [parsed.value.workspace_path], + roots: [input.workspace_path], access: "read", operation: queryContract.name, }, @@ -148,7 +129,7 @@ const registerQueryTool = ( queryContract.name, () => queryReconstructionCoverage( - parsed.value, + input, options.evidenceFilePolicy, Date.now(), { signal: context.mcpReq.signal }, @@ -157,7 +138,7 @@ const registerQueryTool = ( if (result.ok && options.retainCoverageWorkspace !== undefined) { const closure = reconstructionClosureResultSchema.parse(result.value); const loaded = await readReconstructionCoverageWorkspace( - parsed.value.workspace_path, + input.workspace_path, options.evidenceFilePolicy, ); if (!loaded.ok) return toCallToolResult(loaded, queryContract); diff --git a/src/server/registerApplicationTools/obligationLedger.ts b/src/server/registerApplicationTools/obligationLedger.ts index 2dd4cb50c..e881647ed 100644 --- a/src/server/registerApplicationTools/obligationLedger.ts +++ b/src/server/registerApplicationTools/obligationLedger.ts @@ -5,9 +5,7 @@ import { resolveReconstructionObligationLedgerRequest, } from "../../application/ReconstructionObligationLedgerService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { reconstructionObligationLedgerInputSchema } from "../../domain/reconstructionObligationLedgerSchemas.js"; import { logToolExecution } from "../toolLogging.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; import { recordResult, recordSources } from "./helpers.js"; @@ -26,15 +24,7 @@ export const registerReconstructionObligationLedgerTool = ( contract.name, toolRegistrationOptions(contract), async (input) => { - const parsed = safeParseToolInput( - reconstructionObligationLedgerInputSchema, - input, - contract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, contract); - const resolved = resolveReconstructionObligationLedgerRequest( - parsed.value, - ); + const resolved = resolveReconstructionObligationLedgerRequest(input); if (!resolved.ok) return toCallToolResult(resolved, contract); const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve( diff --git a/src/server/registerApplicationTools/readiness.ts b/src/server/registerApplicationTools/readiness.ts index 8d9324d14..1e9256426 100644 --- a/src/server/registerApplicationTools/readiness.ts +++ b/src/server/registerApplicationTools/readiness.ts @@ -5,10 +5,8 @@ import { resolveReconstructionReadinessRequest, } from "../../application/ReconstructionReadinessService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { reconstructionReadinessInputSchema } from "../../domain/reconstructionReadinessSchemas.js"; import { reconstructionReadinessReportSchema } from "../../domain/reconstructionReadinessSchemas.js"; import { logToolExecution } from "../toolLogging.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; import { recordSources } from "./helpers.js"; @@ -25,13 +23,7 @@ export const registerReconstructionReadinessTool = ( contract.name, toolRegistrationOptions(contract), async (input) => { - const parsed = safeParseToolInput( - reconstructionReadinessInputSchema, - input, - contract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, contract); - const resolved = resolveReconstructionReadinessRequest(parsed.value); + const resolved = resolveReconstructionReadinessRequest(input); if (!resolved.ok) return toCallToolResult(resolved, contract); const result = await logToolExecution(options.logger, contract.name, () => Promise.resolve( diff --git a/src/server/registerApplicationTools/traceFeature.ts b/src/server/registerApplicationTools/traceFeature.ts index 9457c1868..a300b535c 100644 --- a/src/server/registerApplicationTools/traceFeature.ts +++ b/src/server/registerApplicationTools/traceFeature.ts @@ -1,13 +1,11 @@ import type { McpServer } from "@modelcontextprotocol/server"; -import { traceApplicationFeatureEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js"; import { resolveTraceApplicationFeatureRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js"; +import { traceApplicationFeatureEvidenceValidated } from "../../application/JavaScriptApplicationWorkflowService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { traceApplicationFeatureRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { toCallToolResult } from "../toolResult.js"; import { recordResult, recordSources } from "./helpers.js"; import type { ApplicationToolRegistration } from "./types.js"; @@ -22,14 +20,8 @@ export const registerTraceFeatureTool = ( traceContract.name, toolRegistrationOptions(traceContract), async (input) => { - const parsedInput = safeParseToolInput( - traceApplicationFeatureRequestSchema, - input, - traceContract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, traceContract); const resolved = resolveTraceApplicationFeatureRequestValidated( - parsedInput.value, + input, options.evidenceLookup, ); if (!resolved.ok) return toCallToolResult(resolved, traceContract); diff --git a/src/server/registerApplicationTools/traceSemantics.ts b/src/server/registerApplicationTools/traceSemantics.ts index 19ef9c71a..2b54a1675 100644 --- a/src/server/registerApplicationTools/traceSemantics.ts +++ b/src/server/registerApplicationTools/traceSemantics.ts @@ -3,8 +3,6 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { resolveTraceJavaScriptSemanticsRequestValidated } from "../../application/ApplicationWorkflowEvidenceResolver.js"; import { traceJavaScriptSemanticsEvidenceValidated } from "../../application/JavaScriptSemanticTraceService.js"; import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { traceJavaScriptSemanticsRequestSchema } from "../../contracts/applicationWorkflowInputContracts.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; import { logToolExecution } from "../toolLogging.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; import { toCallToolResult } from "../toolResult.js"; @@ -22,14 +20,8 @@ export const registerTraceJavaScriptSemanticsTool = ( contract.name, toolRegistrationOptions(contract), async (input) => { - const parsedInput = safeParseToolInput( - traceJavaScriptSemanticsRequestSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); const resolved = resolveTraceJavaScriptSemanticsRequestValidated( - parsedInput.value, + input, options.evidenceLookup, ); if (!resolved.ok) return toCallToolResult(resolved, contract); diff --git a/src/server/registerArtifactComparisonTool.ts b/src/server/registerArtifactComparisonTool.ts index 3f17a8e9c..c01e5373e 100644 --- a/src/server/registerArtifactComparisonTool.ts +++ b/src/server/registerArtifactComparisonTool.ts @@ -1,70 +1,59 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import type { ToolContract } from "../contracts/toolContracts.js"; -import { - artifactComparisonInputSchema, - compareArtifacts, -} from "../domain/artifactComparison.js"; +import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { compareArtifacts } from "../domain/artifactComparison.js"; import { createEvidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import type { RecordUnknownInput } from "../domain/residualUnknown.js"; import { recordDerivedEvidence } from "./recordDerivedEvidence.js"; +import { runDerivedOperation } from "./runDerivedOperation.js"; import { resolveSessionEvidenceIds } from "./sessionEvidence.js"; import { ARTIFACT_COMPARISON_PROVIDER } from "./sessionToolPolicies.js"; -import { toCallToolResult } from "./toolResult.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { runDerivedOperation } from "./runDerivedOperation.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; +import { toCallToolResult } from "./toolResult.js"; /** Register Evidence-backed deterministic artifact comparison. */ export const registerArtifactComparisonTool = ( server: McpServer, session: BinarySessionPort, - contract: ToolContract<"compare_artifacts">, + contract: (typeof SESSION_TOOL_CONTRACTS)[7], ): void => { server.registerTool( contract.name, toolRegistrationOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - artifactComparisonInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; const expected = { operation: "inventory_artifact", predicate: "rea.analysis/v2", }; const left = resolveSessionEvidenceIds( session, - parsed.left_evidence_ids, + input.left_evidence_ids, expected, ); if (!left.ok) return toCallToolResult(left, contract); const right = resolveSessionEvidenceIds( session, - parsed.right_evidence_ids, + input.right_evidence_ids, expected, ); if (!right.ok) return toCallToolResult(right, contract); const computed = await runDerivedOperation(context, contract.name, () => - compareArtifacts(left.value, right.value, parsed.offset, parsed.limit), + compareArtifacts(left.value, right.value, input.offset, input.limit), ); if (!computed.ok) return toCallToolResult(computed, contract); const comparison = computed.value; - const leftEvidenceIds = parsed.left_evidence_ids; - const rightEvidenceIds = parsed.right_evidence_ids; + const leftEvidenceIds = input.left_evidence_ids; + const rightEvidenceIds = input.right_evidence_ids; const evidence = createEvidence(undefined, ARTIFACT_COMPARISON_PROVIDER, { predicateType: "rea.artifact-comparison/v1", operation: contract.name, parameters: { left_evidence_ids: leftEvidenceIds, right_evidence_ids: rightEvidenceIds, - offset: parsed.offset, - limit: parsed.limit, + offset: input.offset, + limit: input.limit, }, result: jsonValueSchema.parse(comparison), confidence: "derived", @@ -76,7 +65,7 @@ export const registerArtifactComparisonTool = ( recordDerivedEvidence( session, evidence, - artifactUnknownInput(parsed, comparison.status), + artifactUnknownInput(input, comparison.status), ), contract, ); diff --git a/src/server/registerBrowserScenarioTool.ts b/src/server/registerBrowserScenarioTool.ts index a14303152..b408dc71e 100644 --- a/src/server/registerBrowserScenarioTool.ts +++ b/src/server/registerBrowserScenarioTool.ts @@ -5,10 +5,8 @@ import type { BrowserScenarioCapturePort } from "../application/BrowserScenarioC import { captureBrowserScenario } from "../application/BrowserScenarioCaptureService.js"; import type { PermissionAuthority } from "../application/PermissionAuthority.js"; import { BROWSER_SCENARIO_TOOL_CONTRACTS } from "../contracts/browserScenarioToolContracts.js"; -import { browserScenarioSchema } from "../domain/browserScenario.js"; import type { Logger } from "../logger.js"; import { logToolExecution } from "./toolLogging.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; import { toCallToolResult } from "./toolResult.js"; @@ -29,17 +27,11 @@ export const registerBrowserScenarioTool = ( contract.name, toolRegistrationOptions(contract), async (input, context) => { - const parsed = safeParseToolInput( - browserScenarioSchema, - input, - contract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, contract); const result = await logToolExecution(options.logger, contract.name, () => captureBrowserScenario( options.provider, options.permissionAuthority, - parsed.value, + input, { signal: context.mcpReq.signal }, ), ); diff --git a/src/server/registerBrowserTools.ts b/src/server/registerBrowserTools.ts index 5672307c7..0c5158f24 100644 --- a/src/server/registerBrowserTools.ts +++ b/src/server/registerBrowserTools.ts @@ -1,9 +1,7 @@ -import type { McpServer } from "@modelcontextprotocol/server"; -import type { z } from "zod"; +import type { McpServer, ServerContext } from "@modelcontextprotocol/server"; -import type { BrowserObservationPort } from "../application/BrowserObservationPort.js"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import type { PermissionAuthority } from "../application/PermissionAuthority.js"; +import type { BrowserObservationPort } from "../application/BrowserObservationPort.js"; import { analyzeWebBundle, captureWebScreenshot, @@ -14,30 +12,18 @@ import { listBrowserTargets, observeWebSession, } from "../application/BrowserObservationService.js"; -import { BROWSER_TOOL_CONTRACTS } from "../contracts/browserToolContracts.js"; -import { - inspectWebPageInputSchema, - listBrowserTargetsInputSchema, -} from "../domain/browserObservation.js"; -import { analyzeWebBundleInputSchema } from "../domain/webBundleAnalysis.js"; -import { observeWebSessionInputSchema } from "../domain/browserSession.js"; -import { discoverWebMcpToolsInputSchema } from "../domain/webMcpDiscovery.js"; -import { browserCaptureComparisonInputSchema } from "../domain/browserCaptureComparison.js"; -import { - captureWebScreenshotInputSchema, - compareWebScreenshotsInputSchema, -} from "../domain/webScreenshot.js"; -import type { Logger } from "../logger.js"; -import { logToolExecution } from "./toolLogging.js"; -import { toCallToolResult } from "./toolResult.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; -import { mcpProgressReporter } from "./mcpProgress.js"; +import type { PermissionAuthority } from "../application/PermissionAuthority.js"; import type { ProgressReporter } from "../application/ProgressReporter.js"; +import { BROWSER_TOOL_CONTRACTS } from "../contracts/browserToolContracts.js"; +import type { ToolContract } from "../contracts/toolContracts.js"; +import type { AnalysisError } from "../domain/errors.js"; import type { Evidence } from "../domain/evidence.js"; import type { Result } from "../domain/result.js"; -import type { AnalysisError } from "../domain/errors.js"; -import type { ToolContract } from "../contracts/toolContracts.js"; +import type { Logger } from "../logger.js"; +import { mcpProgressReporter } from "./mcpProgress.js"; +import { logToolExecution } from "./toolLogging.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; interface BrowserToolRegistration { readonly logger: Logger; @@ -51,16 +37,8 @@ interface BrowserToolContext { readonly progress: ProgressReporter; } -interface BrowserToolSpec { - readonly contract: ToolContract; - readonly schema: Schema; - readonly execute: ( - parsed: z.output, - context: BrowserToolContext, - ) => Promise>; -} - /** Register browser tools even when policy/provider availability denies execution. */ +// oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation. export const registerBrowserTools = ( server: McpServer, options: BrowserToolRegistration, @@ -76,111 +54,162 @@ export const registerBrowserTools = ( screenshotDiffContract, ] = BROWSER_TOOL_CONTRACTS; - registerBrowserTool(server, options, { - contract: listContract, - schema: listBrowserTargetsInputSchema, - execute: (parsed, { signal }) => - listBrowserTargets(options.browser, options.permissionAuthority, parsed, { - signal, - }), - }); - registerBrowserTool(server, options, { - contract: inspectContract, - schema: inspectWebPageInputSchema, - execute: (parsed, { signal, progress }) => - inspectWebPage(options.browser, options.permissionAuthority, parsed, { - signal, - progress, - }), - }); - registerBrowserTool(server, options, { - contract: analyzeContract, - schema: analyzeWebBundleInputSchema, - execute: (parsed, { signal, progress }) => - analyzeWebBundle(options.browser, options.permissionAuthority, parsed, { - signal, - progress, - }), - }); - registerBrowserTool(server, options, { - contract: sessionContract, - schema: observeWebSessionInputSchema, - execute: (parsed, { signal, progress }) => - observeWebSession(options.browser, options.permissionAuthority, parsed, { - signal, - progress, - }), - }); - registerBrowserTool(server, options, { - contract: webMcpContract, - schema: discoverWebMcpToolsInputSchema, - execute: (parsed, { signal, progress }) => - discoverWebMcpTools( - options.browser, - options.permissionAuthority, - parsed, - { - signal, - progress, - }, + server.registerTool( + listContract.name, + toolRegistrationOptions(listContract), + (input, context) => + runBrowserTool( + options, + listContract, + { input, context }, + (parsed, { signal }) => + listBrowserTargets( + options.browser, + options.permissionAuthority, + parsed, + { + signal, + }, + ), ), - }); - registerBrowserTool(server, options, { - contract: captureDiffContract, - schema: browserCaptureComparisonInputSchema, - execute: (parsed, _context) => - compareWebCaptureEvidence(options.browser, parsed), - }); - registerBrowserTool(server, options, { - contract: screenshotContract, - schema: captureWebScreenshotInputSchema, - execute: (parsed, { signal, progress }) => - captureWebScreenshot( - options.browser, - options.permissionAuthority, - parsed, - { - signal, - progress, - }, + ); + server.registerTool( + inspectContract.name, + toolRegistrationOptions(inspectContract), + (input, context) => + runBrowserTool( + options, + inspectContract, + { input, context }, + (parsed, { signal, progress }) => + inspectWebPage(options.browser, options.permissionAuthority, parsed, { + signal, + progress, + }), ), - }); - registerBrowserTool(server, options, { - contract: screenshotDiffContract, - schema: compareWebScreenshotsInputSchema, - execute: (parsed, _context) => - compareWebScreenshotEvidence(options.browser, parsed), - }); + ); + server.registerTool( + analyzeContract.name, + toolRegistrationOptions(analyzeContract), + (input, context) => + runBrowserTool( + options, + analyzeContract, + { input, context }, + (parsed, { signal, progress }) => + analyzeWebBundle( + options.browser, + options.permissionAuthority, + parsed, + { + signal, + progress, + }, + ), + ), + ); + server.registerTool( + sessionContract.name, + toolRegistrationOptions(sessionContract), + (input, context) => + runBrowserTool( + options, + sessionContract, + { input, context }, + (parsed, { signal, progress }) => + observeWebSession( + options.browser, + options.permissionAuthority, + parsed, + { + signal, + progress, + }, + ), + ), + ); + server.registerTool( + webMcpContract.name, + toolRegistrationOptions(webMcpContract), + (input, context) => + runBrowserTool( + options, + webMcpContract, + { input, context }, + (parsed, { signal, progress }) => + discoverWebMcpTools( + options.browser, + options.permissionAuthority, + parsed, + { + signal, + progress, + }, + ), + ), + ); + server.registerTool( + captureDiffContract.name, + toolRegistrationOptions(captureDiffContract), + (input, context) => + runBrowserTool( + options, + captureDiffContract, + { input, context }, + (parsed) => compareWebCaptureEvidence(options.browser, parsed), + ), + ); + server.registerTool( + screenshotContract.name, + toolRegistrationOptions(screenshotContract), + (input, context) => + runBrowserTool( + options, + screenshotContract, + { input, context }, + (parsed, { signal, progress }) => + captureWebScreenshot( + options.browser, + options.permissionAuthority, + parsed, + { + signal, + progress, + }, + ), + ), + ); + server.registerTool( + screenshotDiffContract.name, + toolRegistrationOptions(screenshotDiffContract), + (input, context) => + runBrowserTool( + options, + screenshotDiffContract, + { input, context }, + (parsed) => compareWebScreenshotEvidence(options.browser, parsed), + ), + ); }; -const registerBrowserTool = ( - server: McpServer, +const runBrowserTool = async ( options: BrowserToolRegistration, - spec: BrowserToolSpec, -): void => { - server.registerTool( - spec.contract.name, - toolRegistrationOptions(spec.contract), - async (input, context) => { - const parsedInput = safeParseToolInput( - spec.schema, - input, - spec.contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, spec.contract); - const result = await logToolExecution( - options.logger, - spec.contract.name, - () => - spec.execute(parsedInput.value, { - signal: context.mcpReq.signal, - progress: mcpProgressReporter(context), - }), - ); - if (!result.ok) return toCallToolResult(result, spec.contract); - return evidenceResult(options, spec.contract, result.value); - }, + contract: ToolContract, + request: { readonly input: Input; readonly context: ServerContext }, + execute: ( + input: Input, + context: BrowserToolContext, + ) => Promise>, +) => { + const { input, context } = request; + const result = await logToolExecution(options.logger, contract.name, () => + execute(input, { + signal: context.mcpReq.signal, + progress: mcpProgressReporter(context), + }), ); + if (!result.ok) return toCallToolResult(result, contract); + return evidenceResult(options, contract, result.value); }; const evidenceResult = ( diff --git a/src/server/registerBundleComparisonTool.ts b/src/server/registerBundleComparisonTool.ts index 16caec8fc..bfed60a93 100644 --- a/src/server/registerBundleComparisonTool.ts +++ b/src/server/registerBundleComparisonTool.ts @@ -2,42 +2,31 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; import { readEvidenceBundle } from "../application/EvidenceBundleFiles.js"; -import type { ToolContract } from "../contracts/toolContracts.js"; -import { - bundleComparisonInputSchema, - compareBundles, -} from "../domain/bundleComparison.js"; +import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { compareBundles } from "../domain/bundleComparison.js"; import { createEvidence } from "../domain/evidence.js"; +import type { EvidenceFilePolicy } from "../domain/evidenceBundle.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import { ok } from "../domain/result.js"; -import type { EvidenceFilePolicy } from "../domain/evidenceBundle.js"; -import { BUNDLE_COMPARISON_PROVIDER } from "./sessionToolPolicies.js"; -import { toCallToolResult } from "./toolResult.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; import { runDerivedOperation } from "./runDerivedOperation.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; +import { BUNDLE_COMPARISON_PROVIDER } from "./sessionToolPolicies.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; /** Register canonical Evidence bundle comparison. */ export const registerBundleComparisonTool = ( server: McpServer, session: BinarySessionPort, - contract: ToolContract<"compare_bundles">, + contract: (typeof SESSION_TOOL_CONTRACTS)[9], evidenceFilePolicy: EvidenceFilePolicy, ): void => { server.registerTool( contract.name, toolRegistrationOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - bundleComparisonInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; const [left, right] = await Promise.all([ - readEvidenceBundle(parsed.left_bundle_path, evidenceFilePolicy), - readEvidenceBundle(parsed.right_bundle_path, evidenceFilePolicy), + readEvidenceBundle(input.left_bundle_path, evidenceFilePolicy), + readEvidenceBundle(input.right_bundle_path, evidenceFilePolicy), ]); if (!left.ok) return toCallToolResult(left, contract); if (!right.ok) return toCallToolResult(right, contract); @@ -45,9 +34,9 @@ export const registerBundleComparisonTool = ( compareBundles( left.value, right.value, - parsed.record_pairs, - parsed.offset, - parsed.limit, + input.record_pairs, + input.offset, + input.limit, ), ); if (!computed.ok) return toCallToolResult(computed, contract); @@ -58,9 +47,9 @@ export const registerBundleComparisonTool = ( parameters: { left_bundle_sha256: comparison.left_bundle_sha256, right_bundle_sha256: comparison.right_bundle_sha256, - record_pairs: parsed.record_pairs, - offset: parsed.offset, - limit: parsed.limit, + record_pairs: input.record_pairs, + offset: input.offset, + limit: input.limit, }, result: jsonValueSchema.parse(comparison), confidence: "derived", diff --git a/src/server/registerCloseLifecycleTool.ts b/src/server/registerCloseLifecycleTool.ts index 8ff2c9688..f0334b9ac 100644 --- a/src/server/registerCloseLifecycleTool.ts +++ b/src/server/registerCloseLifecycleTool.ts @@ -1,17 +1,15 @@ import { writeAnalysisSnapshot } from "../application/AnalysisSnapshotFiles.js"; -import { closeBinaryInputSchema } from "../contracts/sessionLifecycleInputs.js"; import { ok } from "../domain/result.js"; import { reportLifecycleEnd, reportLifecycleStart, } from "./lifecycleProgress.js"; -import { logToolExecution } from "./toolLogging.js"; -import { toCallToolResult } from "./toolResult.js"; import { mcpProgressReporter } from "./mcpProgress.js"; import { permissionFailure } from "./permissionFailure.js"; import type { LifecycleToolRegistration } from "./registerSessionTools.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; +import { logToolExecution } from "./toolLogging.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; /** Register provider cleanup and optional pre-close snapshot persistence. */ export const registerCloseLifecycleTool = ({ @@ -26,33 +24,25 @@ export const registerCloseLifecycleTool = ({ closeContract.name, toolRegistrationOptions(closeContract), async (input, context) => { - const parsedInput = safeParseToolInput( - closeBinaryInputSchema, - input, - closeContract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, closeContract); - const parsed = parsedInput.value; const progress = mcpProgressReporter(context); - if (parsed.snapshot_path === undefined) { + if (input.snapshot_path === undefined) { await reportLifecycleStart(progress, closeContract.name); const closed = await logToolExecution(logger, closeContract.name, () => session.close({ progress }), ); await reportLifecycleEnd(progress, closeContract.name, closed.ok); - server.sendToolListChanged(); return toCallToolResult(closed, closeContract); } if (permissionAuthority !== undefined) { const authorized = await permissionAuthority.authorize( { capability: "snapshot_write", - roots: [parsed.snapshot_path], + roots: [input.snapshot_path], executables: [], environment_names: [], network: "none", mount: false, - operation_identity: `close_binary:snapshot:${parsed.snapshot_path}`, + operation_identity: `close_binary:snapshot:${input.snapshot_path}`, }, "write", ); @@ -63,8 +53,8 @@ export const registerCloseLifecycleTool = ({ if (!snapshot.ok) return toCallToolResult(snapshot, closeContract); const written = await writeAnalysisSnapshot( snapshot.value, - parsed.snapshot_path, - parsed.overwrite, + input.snapshot_path, + input.overwrite, snapshotFilePolicy, ); if (!written.ok) return toCallToolResult(written, closeContract); @@ -77,7 +67,6 @@ export const registerCloseLifecycleTool = ({ session.close({ progress }), ); await reportLifecycleEnd(progress, closeContract.name, closed.ok); - server.sendToolListChanged(); return closed.ok ? toCallToolResult( ok({ diff --git a/src/server/registerElectronTools.ts b/src/server/registerElectronTools.ts index 6c38235f6..75f0af834 100644 --- a/src/server/registerElectronTools.ts +++ b/src/server/registerElectronTools.ts @@ -1,40 +1,29 @@ -import type { McpServer } from "@modelcontextprotocol/server"; -import type { z } from "zod"; +import type { McpServer, ServerContext } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import type { ElectronObservationPort } from "../application/ElectronObservationPort.js"; import type { ElectronActiveObservationPort } from "../application/ElectronActiveObservationPort.js"; import { captureElectronScenario } from "../application/ElectronActiveObservationService.js"; -import { analyzeJavaScriptApplicationValidated } from "../application/JavaScriptApplicationService.js"; -import { reconcileJavaScriptRuntimeEvidenceValidated } from "../application/JavaScriptRuntimeReconciliationService.js"; +import type { ElectronObservationPort } from "../application/ElectronObservationPort.js"; import { inspectElectronPage, listElectronTargets, } from "../application/ElectronObservationService.js"; +import { analyzeJavaScriptApplicationValidated } from "../application/JavaScriptApplicationService.js"; +import { reconcileJavaScriptRuntimeEvidenceValidated } from "../application/JavaScriptRuntimeReconciliationService.js"; import type { PermissionAuthority } from "../application/PermissionAuthority.js"; -import { - analyzeJavaScriptApplicationToolInputSchema, - ELECTRON_TOOL_CONTRACTS, -} from "../contracts/electronToolContracts.js"; -import { - inspectElectronPageInputSchema, - listElectronTargetsInputSchema, -} from "../domain/electronObservation.js"; -import { electronActiveObservationInputSchema } from "../domain/electronActiveObservation.js"; -import { reconcileJavaScriptRuntimeInputSchema } from "../domain/javascriptRuntimeReconciliationSchemas.js"; -import type { Logger } from "../logger.js"; -import { logToolExecution } from "./toolLogging.js"; -import { toCallToolResult } from "./toolResult.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; -import { mcpProgressReporter } from "./mcpProgress.js"; import type { ProgressReporter } from "../application/ProgressReporter.js"; -import type { Evidence } from "../domain/evidence.js"; -import type { Result } from "../domain/result.js"; -import type { AnalysisError } from "../domain/errors.js"; +import { ELECTRON_TOOL_CONTRACTS } from "../contracts/electronToolContracts.js"; import type { ToolContract } from "../contracts/toolContracts.js"; +import type { AnalysisError } from "../domain/errors.js"; +import type { Evidence } from "../domain/evidence.js"; import type { JsonValue } from "../domain/jsonValue.js"; +import type { Result } from "../domain/result.js"; +import type { Logger } from "../logger.js"; import { summarizeJavaScriptApplicationEvidence } from "./javascriptApplicationResult.js"; +import { mcpProgressReporter } from "./mcpProgress.js"; +import { logToolExecution } from "./toolLogging.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; interface ElectronToolRegistration { readonly logger: Logger; @@ -49,23 +38,8 @@ interface ElectronToolContext { readonly progress: ProgressReporter; } -interface ElectronToolSpec { - readonly contract: ToolContract; - readonly schema: Schema; - readonly execute: ( - parsed: z.output, - context: ElectronToolContext, - ) => Promise>; - readonly projectEvidence?: ( - evidence: Evidence, - parsed: z.output, - ) => { - readonly structured: JsonValue; - readonly text?: JsonValue; - }; -} - /** Register Electron tools even when provider or permission policy is absent. */ +// oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation. export const registerElectronTools = ( server: McpServer, options: ElectronToolRegistration, @@ -78,100 +52,130 @@ export const registerElectronTools = ( activeContract, ] = ELECTRON_TOOL_CONTRACTS; - registerElectronTool(server, options, { - contract: listContract, - schema: listElectronTargetsInputSchema, - execute: (parsed, { signal }) => - listElectronTargets( - options.electron, - options.permissionAuthority, - parsed, + server.registerTool( + listContract.name, + toolRegistrationOptions(listContract), + (input, context) => + runElectronTool( + options, + listContract, + { input, context }, + (parsed, { signal }) => + listElectronTargets( + options.electron, + options.permissionAuthority, + parsed, + { + signal, + }, + ), + ), + ); + server.registerTool( + inspectContract.name, + toolRegistrationOptions(inspectContract), + (input, context) => + runElectronTool( + options, + inspectContract, + { input, context }, + (parsed, { signal, progress }) => + inspectElectronPage( + options.electron, + options.permissionAuthority, + parsed, + { + signal, + progress, + }, + ), + ), + ); + server.registerTool( + analyzeContract.name, + toolRegistrationOptions(analyzeContract), + (input, context) => + runElectronTool( + options, + analyzeContract, { - signal, + input, + context, + projectEvidence: (evidence, parsed) => { + const summary = summarizeJavaScriptApplicationEvidence(evidence); + return parsed.detail === "full" + ? { structured: evidence.normalized_result, text: summary } + : { structured: summary }; + }, }, + (parsed, { signal, progress }) => + analyzeJavaScriptApplicationValidated( + options.permissionAuthority, + parsed, + { signal, progress }, + ), ), - }); - registerElectronTool(server, options, { - contract: inspectContract, - schema: inspectElectronPageInputSchema, - execute: (parsed, { signal, progress }) => - inspectElectronPage( - options.electron, - options.permissionAuthority, - parsed, - { - signal, - progress, - }, + ); + server.registerTool( + reconcileContract.name, + toolRegistrationOptions(reconcileContract), + (input, context) => + runElectronTool( + options, + reconcileContract, + { input, context }, + (parsed) => + Promise.resolve(reconcileJavaScriptRuntimeEvidenceValidated(parsed)), ), - }); - registerElectronTool(server, options, { - contract: analyzeContract, - schema: analyzeJavaScriptApplicationToolInputSchema, - execute: (parsed, { signal, progress }) => - analyzeJavaScriptApplicationValidated( - options.permissionAuthority, - parsed, - { signal, progress }, + ); + server.registerTool( + activeContract.name, + toolRegistrationOptions(activeContract), + (input, context) => + runElectronTool( + options, + activeContract, + { input, context }, + (parsed, { signal, progress }) => + captureElectronScenario( + options.electronActive, + options.permissionAuthority, + parsed, + { signal, progress }, + ), ), - projectEvidence: (evidence, parsed) => { - const summary = summarizeJavaScriptApplicationEvidence(evidence); - return parsed.detail === "full" - ? { structured: evidence.normalized_result, text: summary } - : { structured: summary }; - }, - }); - registerElectronTool(server, options, { - contract: reconcileContract, - schema: reconcileJavaScriptRuntimeInputSchema, - execute: (parsed, _context) => - Promise.resolve(reconcileJavaScriptRuntimeEvidenceValidated(parsed)), - }); - registerElectronTool(server, options, { - contract: activeContract, - schema: electronActiveObservationInputSchema, - execute: (parsed, { signal, progress }) => - captureElectronScenario( - options.electronActive, - options.permissionAuthority, - parsed, - { signal, progress }, - ), - }); + ); }; -const registerElectronTool = ( - server: McpServer, +const runElectronTool = async ( options: ElectronToolRegistration, - spec: ElectronToolSpec, -): void => { - server.registerTool( - spec.contract.name, - toolRegistrationOptions(spec.contract), - async (input, context) => { - const parsedInput = safeParseToolInput( - spec.schema, - input, - spec.contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, spec.contract); - const result = await logToolExecution( - options.logger, - spec.contract.name, - () => - spec.execute(parsedInput.value, { - signal: context.mcpReq.signal, - progress: mcpProgressReporter(context), - }), - ); - if (!result.ok) return toCallToolResult(result, spec.contract); - return evidenceResult( - options, - spec.contract, - result.value, - spec.projectEvidence?.(result.value, parsedInput.value), - ); - }, + contract: ToolContract, + request: { + readonly input: Input; + readonly context: ServerContext; + readonly projectEvidence?: ( + evidence: Evidence, + input: Input, + ) => { readonly structured: JsonValue; readonly text?: JsonValue }; + }, + execute: ( + input: Input, + context: ElectronToolContext, + ) => Promise>, +) => { + const { input, context, projectEvidence } = request; + const result = await logToolExecution(options.logger, contract.name, () => + execute(input, { + signal: context.mcpReq.signal, + progress: mcpProgressReporter(context), + }), + ); + if (!result.ok) return toCallToolResult(result, contract); + return evidenceResult( + options, + contract, + result.value, + projectEvidence?.(result.value, input), ); }; diff --git a/src/server/registerEnhancedTools.ts b/src/server/registerEnhancedTools.ts index f2d8bc872..2bfe9ee78 100644 --- a/src/server/registerEnhancedTools.ts +++ b/src/server/registerEnhancedTools.ts @@ -1,36 +1,33 @@ -import type { McpServer } from "@modelcontextprotocol/server"; -import type { z } from "zod"; +import type { + CallToolResult, + McpServer, + ServerContext, +} from "@modelcontextprotocol/server"; +import type { AnalysisOperationPort } from "../application/AnalysisProvider.js"; +import type { BinarySessionPort } from "../application/BinarySession.js"; import { EnhancedTools, type ValidatedEnhancedCall, } from "../application/EnhancedTools.js"; -import type { AnalysisOperationPort } from "../application/AnalysisProvider.js"; -import type { BinarySessionPort } from "../application/BinarySession.js"; -import { - enhancedInputSchemas, - enhancedToolNameSchema, -} from "../contracts/enhancedInputs.js"; -import { - ENHANCED_TOOL_CONTRACTS, - type ToolContract, -} from "../contracts/toolContracts.js"; -import { toCallToolResult } from "./toolResult.js"; -import type { Logger } from "../logger.js"; -import { logToolExecution } from "./toolLogging.js"; -import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { createEvidence } from "../domain/evidence.js"; -import type { JsonValue } from "../domain/jsonValue.js"; -import { AnalysisInputError, UnknownRegistryError } from "../domain/errors.js"; -import { ok, type Result } from "../domain/result.js"; -import { mcpProgressReporter } from "./mcpProgress.js"; -import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "../application/InvestigationProviders.js"; +import { + ENHANCED_TOOL_CONTRACTS, + type ToolContract, +} from "../contracts/toolContracts.js"; +import type { AnalysisProfileCommitment } from "../domain/analysisProfile.js"; +import type { BinaryTarget } from "../domain/binaryTarget.js"; +import { UnknownRegistryError } from "../domain/errors.js"; +import { createEvidence } from "../domain/evidence.js"; +import type { JsonValue } from "../domain/jsonValue.js"; +import type { Logger } from "../logger.js"; +import { mcpProgressReporter } from "./mcpProgress.js"; +import { logToolExecution } from "./toolLogging.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; +import { toCallToolResult } from "./toolResult.js"; /** Optional session services used by enhanced tool registration. */ export interface EnhancedToolRegistration { @@ -44,107 +41,219 @@ export interface EnhancedToolRegistration { } /** Register composed workflows against the same port as direct bridge tools. */ +// oxlint-disable-next-line max-lines-per-function -- direct SDK calls retain each schema-handler type correlation. export const registerEnhancedTools = ( server: McpServer, analysis: AnalysisOperationPort, options: EnhancedToolRegistration, ): void => { - for (const contract of ENHANCED_TOOL_CONTRACTS) { - registerEnhancedTool(server, analysis, contract, { - logger: options.logger, - activeTarget: options.activeTarget, - analysisProfile: options.analysisProfile, - recordEvidence: options.recordEvidence, - recordUnknown: options.recordUnknown, - }); - } + const [ + swiftClasses, + objcClasses, + objcProtocols, + batchDecompile, + callGraph, + swiftTypes, + xrefsToName, + binaryOverview, + analyzeFunction, + inspectNativeApi, + traceFeature, + codeForString, + traceCallPath, + ] = ENHANCED_TOOL_CONTRACTS; + server.registerTool( + swiftClasses.name, + toolRegistrationOptions(swiftClasses), + (input, context) => + executeEnhancedTool(analysis, options, swiftClasses, { + validatedCall: { name: "swift_classes", input }, + context, + }), + ); + server.registerTool( + objcClasses.name, + toolRegistrationOptions(objcClasses), + (input, context) => + executeEnhancedTool(analysis, options, objcClasses, { + validatedCall: { name: "get_objc_classes", input }, + context, + }), + ); + server.registerTool( + objcProtocols.name, + toolRegistrationOptions(objcProtocols), + (input, context) => + executeEnhancedTool(analysis, options, objcProtocols, { + validatedCall: { name: "get_objc_protocols", input }, + context, + }), + ); + server.registerTool( + batchDecompile.name, + toolRegistrationOptions(batchDecompile), + (input, context) => + executeEnhancedTool(analysis, options, batchDecompile, { + validatedCall: { name: "batch_decompile", input }, + context, + }), + ); + server.registerTool( + callGraph.name, + toolRegistrationOptions(callGraph), + (input, context) => + executeEnhancedTool(analysis, options, callGraph, { + validatedCall: { name: "get_call_graph", input }, + context, + }), + ); + server.registerTool( + swiftTypes.name, + toolRegistrationOptions(swiftTypes), + (input, context) => + executeEnhancedTool(analysis, options, swiftTypes, { + validatedCall: { name: "analyze_swift_types", input }, + context, + }), + ); + server.registerTool( + xrefsToName.name, + toolRegistrationOptions(xrefsToName), + (input, context) => + executeEnhancedTool(analysis, options, xrefsToName, { + validatedCall: { name: "find_xrefs_to_name", input }, + context, + }), + ); + server.registerTool( + binaryOverview.name, + toolRegistrationOptions(binaryOverview), + (input, context) => + executeEnhancedTool(analysis, options, binaryOverview, { + validatedCall: { name: "binary_overview", input }, + context, + }), + ); + server.registerTool( + analyzeFunction.name, + toolRegistrationOptions(analyzeFunction), + (input, context) => + executeEnhancedTool(analysis, options, analyzeFunction, { + validatedCall: { name: "analyze_function", input }, + context, + }), + ); + server.registerTool( + inspectNativeApi.name, + toolRegistrationOptions(inspectNativeApi), + (input, context) => + executeEnhancedTool(analysis, options, inspectNativeApi, { + validatedCall: { name: "inspect_native_api", input }, + context, + }), + ); + server.registerTool( + traceFeature.name, + toolRegistrationOptions(traceFeature), + (input, context) => + executeEnhancedTool(analysis, options, traceFeature, { + validatedCall: { name: "trace_feature", input }, + context, + }), + ); + server.registerTool( + codeForString.name, + toolRegistrationOptions(codeForString), + (input, context) => + executeEnhancedTool(analysis, options, codeForString, { + validatedCall: { name: "find_code_for_string", input }, + context, + }), + ); + server.registerTool( + traceCallPath.name, + toolRegistrationOptions(traceCallPath), + (input, context) => + executeEnhancedTool(analysis, options, traceCallPath, { + validatedCall: { name: "trace_call_path", input }, + context, + }), + ); }; -const registerEnhancedTool = ( - server: McpServer, +const executeEnhancedTool = async ( analysis: AnalysisOperationPort, + registration: EnhancedToolRegistration, contract: ToolContract, - registration: { - readonly logger: Logger; - readonly activeTarget: (() => BinaryTarget | undefined) | undefined; - readonly analysisProfile: - | (() => AnalysisProfileCommitment | undefined) - | undefined; - readonly recordEvidence: BinarySessionPort["recordEvidence"] | undefined; - readonly recordUnknown: BinarySessionPort["recordUnknown"] | undefined; + request: { + readonly validatedCall: ValidatedEnhancedCall; + readonly context: ServerContext; }, -): void => { - const name = enhancedToolNameSchema.parse(contract.name); - server.registerTool( - name, - toolRegistrationOptions(contract), - async (input, context) => { - const progress = mcpProgressReporter(context); - await progress.report({ - phase: name, - completed: 0, - total: 1, - message: "started", - }); - const validatedCall = parseEnhancedCall(name, input); - if (!validatedCall.ok) return toCallToolResult(validatedCall, contract); - const parsedInput = validatedCall.value.input; - const parameters = jsonParameters(parsedInput); - const services = new EnhancedTools({ - execute: (operation, operationParameters, executionOptions) => - analysis.execute(operation, operationParameters, { - ...executionOptions, - progress, - }), - }); - const result = await logToolExecution(registration.logger, name, () => - services.executeValidated(validatedCall.value, context.mcpReq.signal), - ); - await progress.report({ - phase: name, - completed: 1, - total: 1, - message: result.ok ? "completed" : "failed", - terminal: true, - }); - if (result.ok) { - const upstreamProfile = registration.analysisProfile?.(); - const evidence = createEvidence( - registration.activeTarget?.(), - REA_WORKFLOW_PROVIDER, - { - operation: name, - parameters, - result: result.value, - ...(upstreamProfile === undefined - ? {} - : { - analysisProfile: workflowAnalysisProfile(upstreamProfile), - }), - confidence: "derived", - limitations: [ - "Derived by an REA workflow from one or more provider observations.", - ], - }, - ); - const recorded = registration.recordEvidence?.(evidence); - if (recorded !== undefined && !recorded.ok) - return toCallToolResult(recorded, contract); - const unknowns = recordWorkflowUnknowns({ - name, - input: parameters, - result: result.value, - evidenceId: evidence.evidence_id, - recordUnknown: registration.recordUnknown, - }); - if (!unknowns.ok) return toCallToolResult(unknowns, contract); - return toCallToolResult({ ok: true, value: evidence }, contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); - } - return toCallToolResult(result, contract); - }, +): Promise => { + const { validatedCall, context } = request; + const name = validatedCall.name; + const progress = mcpProgressReporter(context); + await progress.report({ + phase: name, + completed: 0, + total: 1, + message: "started", + }); + const parsedInput = validatedCall.input; + const parameters = jsonParameters(parsedInput); + const services = new EnhancedTools({ + execute: (operation, operationParameters, executionOptions) => + analysis.execute(operation, operationParameters, { + ...executionOptions, + progress, + }), + }); + const result = await logToolExecution(registration.logger, name, () => + services.executeValidated(validatedCall, context.mcpReq.signal), ); + await progress.report({ + phase: name, + completed: 1, + total: 1, + message: result.ok ? "completed" : "failed", + terminal: true, + }); + if (result.ok) { + const upstreamProfile = registration.analysisProfile?.(); + const evidence = createEvidence( + registration.activeTarget?.(), + REA_WORKFLOW_PROVIDER, + { + operation: name, + parameters, + result: result.value, + ...(upstreamProfile === undefined + ? {} + : { + analysisProfile: workflowAnalysisProfile(upstreamProfile), + }), + confidence: "derived", + limitations: [ + "Derived by an REA workflow from one or more provider observations.", + ], + }, + ); + const recorded = registration.recordEvidence?.(evidence); + if (recorded !== undefined && !recorded.ok) + return toCallToolResult(recorded, contract); + const unknowns = recordWorkflowUnknowns({ + name, + input: parameters, + result: result.value, + evidenceId: evidence.evidence_id, + recordUnknown: registration.recordUnknown, + }); + if (!unknowns.ok) return toCallToolResult(unknowns, contract); + return toCallToolResult({ ok: true, value: evidence }, contract, { + evidenceResourcesAvailable: recorded !== undefined, + }); + } + return toCallToolResult(result, contract); }; const jsonParameters = ( @@ -156,178 +265,6 @@ const jsonParameters = ( ), ); -type EnhancedToolName = ValidatedEnhancedCall["name"]; - -type EnhancedInputOf = z.output< - (typeof enhancedInputSchemas)[Name] ->; - -type EnhancedInputParser = ( - input: unknown, -) => Result, AnalysisInputError>; - -const ENHANCED_INPUT_PARSERS: { - [Name in EnhancedToolName]: EnhancedInputParser; -} = { - swift_classes: (input) => - safeParseToolInput( - enhancedInputSchemas.swift_classes, - input, - "swift_classes", - ), - get_objc_classes: (input) => - safeParseToolInput( - enhancedInputSchemas.get_objc_classes, - input, - "get_objc_classes", - ), - get_objc_protocols: (input) => - safeParseToolInput( - enhancedInputSchemas.get_objc_protocols, - input, - "get_objc_protocols", - ), - batch_decompile: (input) => - safeParseToolInput( - enhancedInputSchemas.batch_decompile, - input, - "batch_decompile", - ), - get_call_graph: (input) => - safeParseToolInput( - enhancedInputSchemas.get_call_graph, - input, - "get_call_graph", - ), - analyze_swift_types: (input) => - safeParseToolInput( - enhancedInputSchemas.analyze_swift_types, - input, - "analyze_swift_types", - ), - find_xrefs_to_name: (input) => - safeParseToolInput( - enhancedInputSchemas.find_xrefs_to_name, - input, - "find_xrefs_to_name", - ), - binary_overview: (input) => - safeParseToolInput( - enhancedInputSchemas.binary_overview, - input, - "binary_overview", - ), - analyze_function: (input) => - safeParseToolInput( - enhancedInputSchemas.analyze_function, - input, - "analyze_function", - ), - inspect_native_api: (input) => - safeParseToolInput( - enhancedInputSchemas.inspect_native_api, - input, - "inspect_native_api", - ), - trace_feature: (input) => - safeParseToolInput( - enhancedInputSchemas.trace_feature, - input, - "trace_feature", - ), - find_code_for_string: (input) => - safeParseToolInput( - enhancedInputSchemas.find_code_for_string, - input, - "find_code_for_string", - ), - trace_call_path: (input) => - safeParseToolInput( - enhancedInputSchemas.trace_call_path, - input, - "trace_call_path", - ), -}; - -const parseEnhancedCall = ( - name: ValidatedEnhancedCall["name"], - input: unknown, -): Result => { - switch (name) { - case "swift_classes": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.swift_classes(input), - (value) => ({ name, input: value }), - ); - case "get_objc_classes": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.get_objc_classes(input), - (value) => ({ name, input: value }), - ); - case "get_objc_protocols": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.get_objc_protocols(input), - (value) => ({ name, input: value }), - ); - case "batch_decompile": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.batch_decompile(input), - (value) => ({ name, input: value }), - ); - case "get_call_graph": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.get_call_graph(input), - (value) => ({ name, input: value }), - ); - case "analyze_swift_types": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.analyze_swift_types(input), - (value) => ({ name, input: value }), - ); - case "find_xrefs_to_name": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.find_xrefs_to_name(input), - (value) => ({ name, input: value }), - ); - case "binary_overview": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.binary_overview(input), - (value) => ({ name, input: value }), - ); - case "analyze_function": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.analyze_function(input), - (value) => ({ name, input: value }), - ); - case "inspect_native_api": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.inspect_native_api(input), - (value) => ({ name, input: value }), - ); - case "trace_feature": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.trace_feature(input), - (value) => ({ name, input: value }), - ); - case "find_code_for_string": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.find_code_for_string(input), - (value) => ({ name, input: value }), - ); - case "trace_call_path": - return mapEnhancedCall( - ENHANCED_INPUT_PARSERS.trace_call_path(input), - (value) => ({ name, input: value }), - ); - } -}; - -const mapEnhancedCall = ( - parsed: Result, - project: (input: Input) => Call, -): Result => - parsed.ok ? ok(project(parsed.value)) : parsed; - interface WorkflowUnknownInput { readonly name: string; readonly input: Readonly>; diff --git a/src/server/registerEvidenceTools.ts b/src/server/registerEvidenceTools.ts index 7bc215bd6..2b968afd1 100644 --- a/src/server/registerEvidenceTools.ts +++ b/src/server/registerEvidenceTools.ts @@ -5,22 +5,21 @@ import type { AnalysisOperationPort, } from "../application/AnalysisProvider.js"; import type { BinarySessionPort } from "../application/BinarySession.js"; +import type { PermissionAuthority } from "../application/PermissionAuthority.js"; import type { ToolContract } from "../contracts/toolContracts.js"; import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { createEvidence, type Evidence } from "../domain/evidence.js"; -import { jsonObjectSchema } from "../domain/jsonValue.js"; -import type { Logger } from "../logger.js"; -import { logToolExecution } from "./toolLogging.js"; -import { toCallToolResult } from "./toolResult.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { mcpProgressReporter } from "./mcpProgress.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; -import type { PermissionAuthority } from "../application/PermissionAuthority.js"; import { AnalysisProtocolError, PermissionRequiredError, } from "../domain/errors.js"; +import { createEvidence, type Evidence } from "../domain/evidence.js"; +import { jsonObjectSchema } from "../domain/jsonValue.js"; import { err } from "../domain/result.js"; +import type { Logger } from "../logger.js"; +import { mcpProgressReporter } from "./mcpProgress.js"; +import { logToolExecution } from "./toolLogging.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; interface EvidenceToolRegistration { readonly logger: Logger; @@ -52,13 +51,7 @@ export const registerEvidenceTools = ( total: 1, message: "started", }); - const parsedInput = safeParseToolInput( - contract.inputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parameters = jsonObjectSchema.parse(parsedInput.value); + const parameters = jsonObjectSchema.parse(input); if (options.permissionAuthority !== undefined) { const request = permissionRequest(contract.name, parameters); if (request !== undefined) { diff --git a/src/server/registerFunctionComparisonTool.ts b/src/server/registerFunctionComparisonTool.ts index 9b9d89d6d..30b5fb1dd 100644 --- a/src/server/registerFunctionComparisonTool.ts +++ b/src/server/registerFunctionComparisonTool.ts @@ -1,59 +1,48 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import type { ToolContract } from "../contracts/toolContracts.js"; -import { - compareFunctions, - functionComparisonInputSchema, -} from "../domain/functionComparison.js"; +import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; import { createEvidence } from "../domain/evidence.js"; +import { compareFunctions } from "../domain/functionComparison.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; import type { RecordUnknownInput } from "../domain/residualUnknown.js"; -import { FUNCTION_COMPARISON_PROVIDER } from "./sessionToolPolicies.js"; -import { toCallToolResult } from "./toolResult.js"; import { recordDerivedEvidence } from "./recordDerivedEvidence.js"; -import { resolveSessionEvidenceIds } from "./sessionEvidence.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; import { runDerivedOperation } from "./runDerivedOperation.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; +import { resolveSessionEvidenceIds } from "./sessionEvidence.js"; +import { FUNCTION_COMPARISON_PROVIDER } from "./sessionToolPolicies.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; /** Register explicit Evidence-backed function comparison. */ export const registerFunctionComparisonTool = ( server: McpServer, session: BinarySessionPort, - contract: ToolContract<"compare_functions">, + contract: (typeof SESSION_TOOL_CONTRACTS)[8], ): void => { server.registerTool( contract.name, toolRegistrationOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - functionComparisonInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; const expected = { operation: "analyze_function", predicate: "rea.analysis/v2", }; const left = resolveSessionEvidenceIds( session, - parsed.left_evidence_ids, + input.left_evidence_ids, expected, ); if (!left.ok) return toCallToolResult(left, contract); const right = resolveSessionEvidenceIds( session, - parsed.right_evidence_ids, + input.right_evidence_ids, expected, ); if (!right.ok) return toCallToolResult(right, contract); const leftIds = left.value.map(({ evidence_id: id }) => id); const rightIds = right.value.map(({ evidence_id: id }) => id); const computed = await runDerivedOperation(context, contract.name, () => - compareFunctions(left.value, right.value, parsed.offset, parsed.limit), + compareFunctions(left.value, right.value, input.offset, input.limit), ); if (!computed.ok) return toCallToolResult(computed, contract); const comparison = computed.value; @@ -63,8 +52,8 @@ export const registerFunctionComparisonTool = ( parameters: { left_evidence_ids: leftIds, right_evidence_ids: rightIds, - offset: parsed.offset, - limit: parsed.limit, + offset: input.offset, + limit: input.limit, }, result: jsonValueSchema.parse(comparison), confidence: "derived", @@ -76,7 +65,7 @@ export const registerFunctionComparisonTool = ( session, evidence, functionUnknownInput({ - approved: parsed.unknown_registry_approved, + approved: input.unknown_registry_approved, status: comparison.status, leftIds, rightIds, diff --git a/src/server/registerInvestigationTools.ts b/src/server/registerInvestigationTools.ts index 7312f2043..16e178de6 100644 --- a/src/server/registerInvestigationTools.ts +++ b/src/server/registerInvestigationTools.ts @@ -3,44 +3,25 @@ import type { z } from "zod"; import type { BinarySessionPort } from "../application/BinarySession.js"; import { runCrossVersionInvestigationValidated } from "../application/CrossVersionInvestigation.js"; -import type { ToolContract } from "../contracts/toolContracts.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; -import { buildCallPath, callPathInputSchema } from "../domain/callPath.js"; -import { - correlateStaticAndRuntime, - staticRuntimeCorrelationInputSchema, -} from "../domain/staticRuntimeCorrelation.js"; -import { - reconstructionVerificationInputSchema, - verifyReconstruction, -} from "../domain/reconstructionVerification.js"; -import { - changedBehaviorResultSchema, - changedBehaviorInputSchema, - findChangedBehavior, -} from "../domain/changedBehavior.js"; -import { createEvidence } from "../domain/evidence.js"; -import { type AnalysisError } from "../domain/errors.js"; -import { jsonValueSchema } from "../domain/jsonValue.js"; -import type { Result } from "../domain/result.js"; -import { - CALL_PATH_PROVIDER, - CHANGED_BEHAVIOR_PROVIDER, - RECONSTRUCTION_PROVIDER, - STATIC_RUNTIME_PROVIDER, -} from "./sessionToolPolicies.js"; -import { toCallToolResult } from "./toolResult.js"; -import { mcpProgressReporter } from "./mcpProgress.js"; -import { - runDerivedOperation, - type DerivedOperationContext, -} from "./runDerivedOperation.js"; import { authorizeFileReadWithDeferredWrite, authorizeRootPermission, type DeferredFileWriteAuthorization, } from "../application/DeferredFileAuthorization.js"; +import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { buildCallPath } from "../domain/callPath.js"; +import { + changedBehaviorInputSchema, + changedBehaviorResultSchema, + findChangedBehavior, +} from "../domain/changedBehavior.js"; +import { type AnalysisError } from "../domain/errors.js"; +import { createEvidence } from "../domain/evidence.js"; +import { jsonValueSchema } from "../domain/jsonValue.js"; +import { verifyReconstruction } from "../domain/reconstructionVerification.js"; +import type { Result } from "../domain/result.js"; +import { correlateStaticAndRuntime } from "../domain/staticRuntimeCorrelation.js"; +import { mcpProgressReporter } from "./mcpProgress.js"; import { comparisonClosure, evidenceClosure, @@ -51,16 +32,28 @@ import { verifyCoverageReadiness, } from "./registerInvestigationTools/helpers.js"; import type { InvestigationToolPolicies } from "./registerInvestigationTools/types.js"; +import { + runDerivedOperation, + type DerivedOperationContext, +} from "./runDerivedOperation.js"; +import { + CALL_PATH_PROVIDER, + CHANGED_BEHAVIOR_PROVIDER, + RECONSTRUCTION_PROVIDER, + STATIC_RUNTIME_PROVIDER, +} from "./sessionToolPolicies.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; /** Register Evidence-composed differential investigation workflows. */ export const registerInvestigationTools = ( server: McpServer, session: BinarySessionPort, contracts: readonly [ - ToolContract<"find_changed_behavior">, - ToolContract<"build_call_path">, - ToolContract<"correlate_static_and_runtime">, - ToolContract<"verify_reconstruction">, + (typeof SESSION_TOOL_CONTRACTS)[10], + (typeof SESSION_TOOL_CONTRACTS)[11], + (typeof SESSION_TOOL_CONTRACTS)[12], + (typeof SESSION_TOOL_CONTRACTS)[13], ], policies: InvestigationToolPolicies, ): void => { @@ -73,21 +66,14 @@ export const registerInvestigationTools = ( const registerChangedBehavior = ( server: McpServer, session: BinarySessionPort, - contract: ToolContract<"find_changed_behavior">, + contract: (typeof SESSION_TOOL_CONTRACTS)[10], policies: InvestigationToolPolicies, ): void => { server.registerTool( contract.name, contractOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - changedBehaviorInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; - const investigationRun = parsed.investigation_run; + const investigationRun = input.investigation_run; if (investigationRun !== undefined) return runAutomaticInvestigation({ server, @@ -95,17 +81,17 @@ const registerChangedBehavior = ( contract, policies, investigationRun, - unknownRegistryApproved: parsed.unknown_registry_approved, + unknownRegistryApproved: input.unknown_registry_approved, context, }); const closure = evidenceClosure( session, - comparisonClosure(parsed.comparisons), + comparisonClosure(input.comparisons), ); if (!closure.ok) return toCallToolResult(closure, contract); const links = closure.value; const computed = await runDerivedOperation(context, contract.name, () => - findChangedBehavior(parsed.comparisons, parsed.offset, parsed.limit), + findChangedBehavior(input.comparisons, input.offset, input.limit), ); if (!computed.ok) return toCallToolResult(computed, contract); const result = computed.value; @@ -113,11 +99,11 @@ const registerChangedBehavior = ( predicateType: "rea.changed-behavior/v1", operation: contract.name, parameters: { - comparison_evidence_ids: parsed.comparisons.map( + comparison_evidence_ids: input.comparisons.map( ({ evidence_id: id }) => id, ), - offset: parsed.offset, - limit: parsed.limit, + offset: input.offset, + limit: input.limit, }, result: jsonValueSchema.parse(result), confidence: "derived", @@ -128,7 +114,7 @@ const registerChangedBehavior = ( const recorded = recordWorkflowEvidence( session, evidence, - parsed.unknown_registry_approved, + input.unknown_registry_approved, isIncomplete(result.behavior_status), { question: @@ -153,7 +139,7 @@ const registerChangedBehavior = ( const runAutomaticInvestigation = async (input: { readonly server: McpServer; readonly session: BinarySessionPort; - readonly contract: ToolContract<"find_changed_behavior">; + readonly contract: (typeof SESSION_TOOL_CONTRACTS)[10]; readonly policies: InvestigationToolPolicies; readonly investigationRun: NonNullable< z.output["investigation_run"] @@ -253,27 +239,20 @@ const runAutomaticInvestigation = async (input: { const registerCallPath = ( server: McpServer, session: BinarySessionPort, - contract: ToolContract<"build_call_path">, + contract: (typeof SESSION_TOOL_CONTRACTS)[11], ): void => { server.registerTool( contract.name, contractOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - callPathInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; const closure = evidenceClosure( session, - functionEvidenceIds(parsed.functions), + functionEvidenceIds(input.functions), ); if (!closure.ok) return toCallToolResult(closure, contract); const links = closure.value; const computed = await runDerivedOperation(context, contract.name, () => - buildCallPath(parsed), + buildCallPath(input), ); if (!computed.ok) return toCallToolResult(computed, contract); const result = computed.value; @@ -281,12 +260,12 @@ const registerCallPath = ( predicateType: "rea.call-path/v1", operation: contract.name, parameters: { - start: parsed.start.address, - goal: parsed.goal.address, - max_depth: parsed.max_depth, - max_paths: parsed.max_paths, - offset: parsed.offset, - limit: parsed.limit, + start: input.start.address, + goal: input.goal.address, + max_depth: input.max_depth, + max_paths: input.max_paths, + offset: input.offset, + limit: input.limit, }, result: jsonValueSchema.parse(result), confidence: "derived", @@ -297,7 +276,7 @@ const registerCallPath = ( const recorded = recordWorkflowEvidence( session, evidence, - parsed.unknown_registry_approved, + input.unknown_registry_approved, result.status === "unknown" || result.status === "truncated", { question: @@ -322,30 +301,23 @@ const registerCallPath = ( const registerStaticRuntime = ( server: McpServer, session: BinarySessionPort, - contract: ToolContract<"correlate_static_and_runtime">, + contract: (typeof SESSION_TOOL_CONTRACTS)[12], ): void => { server.registerTool( contract.name, contractOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - staticRuntimeCorrelationInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; const closure = evidenceClosure( session, comparisonClosure([ - ...parsed.static_comparisons, - ...parsed.runtime_comparisons, + ...input.static_comparisons, + ...input.runtime_comparisons, ]), ); if (!closure.ok) return toCallToolResult(closure, contract); const links = closure.value; const computed = await runDerivedOperation(context, contract.name, () => - correlateStaticAndRuntime(parsed), + correlateStaticAndRuntime(input), ); if (!computed.ok) return toCallToolResult(computed, contract); const result = computed.value; @@ -353,9 +325,9 @@ const registerStaticRuntime = ( predicateType: "rea.static-runtime-correlation/v1", operation: contract.name, parameters: { - mapping_count: parsed.mappings.length, - offset: parsed.offset, - limit: parsed.limit, + mapping_count: input.mappings.length, + offset: input.offset, + limit: input.limit, }, result: jsonValueSchema.parse(result), confidence: "inferred", @@ -367,7 +339,7 @@ const registerStaticRuntime = ( recordWorkflowEvidence( session, evidence, - parsed.unknown_registry_approved, + input.unknown_registry_approved, result.status === "unknown" || result.status === "truncated", { question: @@ -393,28 +365,21 @@ const registerStaticRuntime = ( const registerReconstruction = ( server: McpServer, session: BinarySessionPort, - contract: ToolContract<"verify_reconstruction">, + contract: (typeof SESSION_TOOL_CONTRACTS)[13], ): void => { server.registerTool( contract.name, contractOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - reconstructionVerificationInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; - const coverage = verifyCoverageReadiness(session, parsed.coverage); + const coverage = verifyCoverageReadiness(session, input.coverage); if (!coverage.ok) return toCallToolResult(coverage, contract); const owned = session.exportEvidenceBundle(); const computed = await runDerivedOperation(context, contract.name, () => verifyReconstruction( - parsed.specification, + input.specification, owned, - parsed.offset, - parsed.limit, + input.offset, + input.limit, ), ); if (!computed.ok) return toCallToolResult(computed, contract); @@ -427,9 +392,9 @@ const registerReconstruction = ( operation: contract.name, parameters: { specification_sha256: result.specification_sha256, - claim_ids: parsed.specification.claims.map(({ claim_id: id }) => id), - offset: parsed.offset, - limit: parsed.limit, + claim_ids: input.specification.claims.map(({ claim_id: id }) => id), + offset: input.offset, + limit: input.limit, }, result: jsonValueSchema.parse(result), confidence: "derived", @@ -441,7 +406,7 @@ const registerReconstruction = ( recordWorkflowEvidence( session, evidence, - parsed.unknown_registry_approved, + input.unknown_registry_approved, result.status === "unknown", { question: "Does the reconstruction satisfy every declared claim?", diff --git a/src/server/registerJavaScriptRuntimeObservationTools.ts b/src/server/registerJavaScriptRuntimeObservationTools.ts index ea6a7910e..c8e30a655 100644 --- a/src/server/registerJavaScriptRuntimeObservationTools.ts +++ b/src/server/registerJavaScriptRuntimeObservationTools.ts @@ -1,5 +1,4 @@ -import type { McpServer } from "@modelcontextprotocol/server"; -import type { z } from "zod"; +import type { McpServer, ServerContext } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; import type { JavaScriptRuntimeObservationPort } from "../application/JavaScriptRuntimeObservationPort.js"; @@ -12,14 +11,9 @@ import { JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS } from "../contracts/java import type { ToolContract } from "../contracts/toolContracts.js"; import type { AnalysisError } from "../domain/errors.js"; import type { Evidence } from "../domain/evidence.js"; -import { - listJavaScriptRuntimeTargetsInputSchema, - observeJavaScriptRuntimeInputSchema, -} from "../domain/javascriptRuntimeObservation.js"; import type { Result } from "../domain/result.js"; import type { Logger } from "../logger.js"; import { logToolExecution } from "./toolLogging.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; import { toCallToolResult } from "./toolResult.js"; @@ -30,15 +24,6 @@ interface RuntimeToolRegistration { readonly recordEvidence: BinarySessionPort["recordEvidence"] | undefined; } -interface RuntimeToolSpec { - readonly contract: ToolContract; - readonly schema: Schema; - readonly execute: ( - parsed: z.output, - signal: AbortSignal, - ) => Promise>; -} - /** Register passive Inspector tools even when policy keeps them unavailable. */ export const registerJavaScriptRuntimeObservationTools = ( server: McpServer, @@ -46,53 +31,60 @@ export const registerJavaScriptRuntimeObservationTools = ( ): void => { const [listContract, observeContract] = JAVASCRIPT_RUNTIME_OBSERVATION_TOOL_CONTRACTS; - registerRuntimeTool(server, options, { - contract: listContract, - schema: listJavaScriptRuntimeTargetsInputSchema, - execute: (parsed, signal) => - listJavaScriptRuntimeTargets( - options.runtime, - options.permissionAuthority, - parsed, - { signal }, - ), - }); - registerRuntimeTool(server, options, { - contract: observeContract, - schema: observeJavaScriptRuntimeInputSchema, - execute: (parsed, signal) => - observeJavaScriptRuntime( - options.runtime, - options.permissionAuthority, - parsed, - { signal }, - ), - }); -}; - -const registerRuntimeTool = ( - server: McpServer, - options: RuntimeToolRegistration, - spec: RuntimeToolSpec, -): void => { server.registerTool( - spec.contract.name, - toolRegistrationOptions(spec.contract), - async (input, context) => { - const parsed = safeParseToolInput(spec.schema, input, spec.contract.name); - if (!parsed.ok) return toCallToolResult(parsed, spec.contract); - const result = await logToolExecution( - options.logger, - spec.contract.name, - () => spec.execute(parsed.value, context.mcpReq.signal), - ); - if (!result.ok) return toCallToolResult(result, spec.contract); - const recorded = options.recordEvidence?.(result.value); - return recorded !== undefined && !recorded.ok - ? toCallToolResult(recorded, spec.contract) - : toCallToolResult({ ok: true, value: result.value }, spec.contract, { - evidenceResourcesAvailable: recorded !== undefined, - }); - }, + listContract.name, + toolRegistrationOptions(listContract), + (input, context) => + runRuntimeTool( + options, + listContract, + { input, context }, + (parsed, signal) => + listJavaScriptRuntimeTargets( + options.runtime, + options.permissionAuthority, + parsed, + { signal }, + ), + ), + ); + server.registerTool( + observeContract.name, + toolRegistrationOptions(observeContract), + (input, context) => + runRuntimeTool( + options, + observeContract, + { input, context }, + (parsed, signal) => + observeJavaScriptRuntime( + options.runtime, + options.permissionAuthority, + parsed, + { signal }, + ), + ), ); }; + +const runRuntimeTool = async ( + options: RuntimeToolRegistration, + contract: ToolContract, + request: { readonly input: Input; readonly context: ServerContext }, + execute: ( + input: Input, + signal: AbortSignal, + ) => Promise>, +) => { + const { input, context } = request; + const result = await logToolExecution(options.logger, contract.name, () => + execute(input, context.mcpReq.signal), + ); + if (!result.ok) return toCallToolResult(result, contract); + const recorded = options.recordEvidence?.(result.value); + return recorded !== undefined && !recorded.ok + ? toCallToolResult(recorded, contract) + : toCallToolResult({ ok: true, value: result.value }, contract, { + evidenceResourcesAvailable: recorded !== undefined, + }); +}; diff --git a/src/server/registerManagedWorkflowTools/compareManagedMembers.ts b/src/server/registerManagedWorkflowTools/compareManagedMembers.ts index 65efe91ba..943dc0761 100644 --- a/src/server/registerManagedWorkflowTools/compareManagedMembers.ts +++ b/src/server/registerManagedWorkflowTools/compareManagedMembers.ts @@ -1,12 +1,10 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { compareManagedMembersEvidenceValidated } from "../../application/ManagedMemberComparisonService.js"; -import { compareManagedMembersReferenceInputSchema } from "../../contracts/managedWorkflowToolContracts.js"; import { managedMemberComparisonResultSchema } from "../../domain/managedMemberComparison.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { toCallToolResult } from "../toolResult.js"; import { managedWorkflowContract } from "./contract.js"; import { recordManagedSources, resolveManagedEvidence } from "./evidence.js"; import type { ManagedWorkflowToolRegistration } from "./types.js"; @@ -22,16 +20,9 @@ export const registerCompareManagedMembers = ( compareContract.name, toolRegistrationOptions(compareContract), async (input) => { - const parsedInput = safeParseToolInput( - compareManagedMembersReferenceInputSchema, - input, - compareContract.name, - ); - if (!parsedInput.ok) - return toCallToolResult(parsedInput, compareContract); const resolved = resolveManagedEvidence(options.session, [ - parsedInput.value.left_evidence_id, - parsedInput.value.right_evidence_id, + input.left_evidence_id, + input.right_evidence_id, ]); if (!resolved.ok) return toCallToolResult(resolved, compareContract); const [left, right] = resolved.value; @@ -41,7 +32,7 @@ export const registerCompareManagedMembers = ( left_evidence_id: _leftEvidenceId, right_evidence_id: _rightEvidenceId, ...referencedInput - } = parsedInput.value; + } = input; const parsed = { ...referencedInput, left, right }; const result = await logToolExecution( options.logger, diff --git a/src/server/registerManagedWorkflowTools/contract.ts b/src/server/registerManagedWorkflowTools/contract.ts index 126962308..b36ffcd80 100644 --- a/src/server/registerManagedWorkflowTools/contract.ts +++ b/src/server/registerManagedWorkflowTools/contract.ts @@ -1,12 +1,27 @@ import { MANAGED_WORKFLOW_TOOL_CONTRACTS } from "../../contracts/managedWorkflowToolContracts.js"; /** Locate one managed workflow tool contract by exact name. */ -export const managedWorkflowContract = ( +export function managedWorkflowContract( + name: "compare_managed_members", +): (typeof MANAGED_WORKFLOW_TOOL_CONTRACTS)[0]; +export function managedWorkflowContract( + name: "verify_managed_native_boundaries", +): (typeof MANAGED_WORKFLOW_TOOL_CONTRACTS)[1]; +export function managedWorkflowContract( + name: "import_managed_reconstruction", +): (typeof MANAGED_WORKFLOW_TOOL_CONTRACTS)[2]; +export function managedWorkflowContract( + name: "plan_managed_runtime_correlation", +): (typeof MANAGED_WORKFLOW_TOOL_CONTRACTS)[3]; +export function managedWorkflowContract( + name: "project_managed_application_graph", +): (typeof MANAGED_WORKFLOW_TOOL_CONTRACTS)[4]; +export function managedWorkflowContract( name: (typeof MANAGED_WORKFLOW_TOOL_CONTRACTS)[number]["name"], -) => { +) { const found = MANAGED_WORKFLOW_TOOL_CONTRACTS.find( (candidate) => candidate.name === name, ); if (found === undefined) throw new Error(`Missing ${name} contract`); return found; -}; +} diff --git a/src/server/registerManagedWorkflowTools/importManagedReconstruction.ts b/src/server/registerManagedWorkflowTools/importManagedReconstruction.ts index fea8a79f1..3cca7ee49 100644 --- a/src/server/registerManagedWorkflowTools/importManagedReconstruction.ts +++ b/src/server/registerManagedWorkflowTools/importManagedReconstruction.ts @@ -1,11 +1,9 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { importManagedReconstructionEvidenceValidated } from "../../application/ManagedReconstructionService.js"; -import { managedReconstructionReferenceInputSchema } from "../../contracts/managedWorkflowToolContracts.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { toCallToolResult } from "../toolResult.js"; import { managedWorkflowContract } from "./contract.js"; import { resolveManagedEvidence } from "./evidence.js"; import type { ManagedWorkflowToolRegistration } from "./types.js"; @@ -23,15 +21,8 @@ export const registerImportManagedReconstruction = ( reconstructionContract.name, toolRegistrationOptions(reconstructionContract), async (input) => { - const parsedInput = safeParseToolInput( - managedReconstructionReferenceInputSchema, - input, - reconstructionContract.name, - ); - if (!parsedInput.ok) - return toCallToolResult(parsedInput, reconstructionContract); const resolved = resolveManagedEvidence(options.session, [ - parsedInput.value.static_members_evidence_id, + input.static_members_evidence_id, ]); if (!resolved.ok) return toCallToolResult(resolved, reconstructionContract); @@ -43,7 +34,7 @@ export const registerImportManagedReconstruction = ( const { static_members_evidence_id: _staticMembersEvidenceId, ...referencedInput - } = parsedInput.value; + } = input; const parsed = { ...referencedInput, static_members: staticMembers }; const result = await logToolExecution( options.logger, diff --git a/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts b/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts index 8c73f1cb2..2e25f09be 100644 --- a/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts +++ b/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts @@ -1,11 +1,9 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { planManagedRuntimeCorrelationEvidenceValidated } from "../../application/ManagedRuntimeCorrelationService.js"; -import { managedRuntimeCorrelationReferenceInputSchema } from "../../contracts/managedWorkflowToolContracts.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { toCallToolResult } from "../toolResult.js"; import { managedWorkflowContract } from "./contract.js"; import { resolveManagedEvidence } from "./evidence.js"; import type { ManagedWorkflowToolRegistration } from "./types.js"; @@ -23,15 +21,8 @@ export const registerPlanManagedRuntimeCorrelation = ( runtimeContract.name, toolRegistrationOptions(runtimeContract), async (input) => { - const parsedInput = safeParseToolInput( - managedRuntimeCorrelationReferenceInputSchema, - input, - runtimeContract.name, - ); - if (!parsedInput.ok) - return toCallToolResult(parsedInput, runtimeContract); const resolved = resolveManagedEvidence(options.session, [ - parsedInput.value.static_members_evidence_id, + input.static_members_evidence_id, ]); if (!resolved.ok) return toCallToolResult(resolved, runtimeContract); const staticMembers = resolved.value[0]; @@ -40,7 +31,7 @@ export const registerPlanManagedRuntimeCorrelation = ( const { static_members_evidence_id: _staticMembersEvidenceId, ...referencedInput - } = parsedInput.value; + } = input; const parsed = { ...referencedInput, static_members: staticMembers }; const result = await logToolExecution( options.logger, diff --git a/src/server/registerManagedWorkflowTools/projectManagedApplicationGraph.ts b/src/server/registerManagedWorkflowTools/projectManagedApplicationGraph.ts index 2e33b4aa1..7b2953521 100644 --- a/src/server/registerManagedWorkflowTools/projectManagedApplicationGraph.ts +++ b/src/server/registerManagedWorkflowTools/projectManagedApplicationGraph.ts @@ -1,11 +1,9 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { projectManagedApplicationGraphEvidence } from "../../application/ManagedApplicationGraphService.js"; -import { managedApplicationGraphReferenceInputSchema } from "../../contracts/managedWorkflowToolContracts.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { toCallToolResult } from "../toolResult.js"; import { managedWorkflowContract } from "./contract.js"; import { recordManagedSources, @@ -29,40 +27,34 @@ export const registerProjectManagedApplicationGraph = ( graphContract.name, toolRegistrationOptions(graphContract), async (input) => { - const parsedInput = safeParseToolInput( - managedApplicationGraphReferenceInputSchema, - input, - graphContract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, graphContract); const managedArtifact = - parsedInput.value.managed_artifact_evidence_id === undefined + input.managed_artifact_evidence_id === undefined ? undefined : resolveManagedArtifactEvidence( options.session, - parsedInput.value.managed_artifact_evidence_id, + input.managed_artifact_evidence_id, ); if (managedArtifact !== undefined && !managedArtifact.ok) return toCallToolResult(managedArtifact, graphContract); const managedMembers = - parsedInput.value.managed_members_evidence_id === undefined + input.managed_members_evidence_id === undefined ? undefined : resolveManagedEvidence(options.session, [ - parsedInput.value.managed_members_evidence_id, + input.managed_members_evidence_id, ]); if (managedMembers !== undefined && !managedMembers.ok) return toCallToolResult(managedMembers, graphContract); const managedBoundaries = - parsedInput.value.managed_native_boundaries_evidence_id === undefined + input.managed_native_boundaries_evidence_id === undefined ? undefined : resolveManagedBoundaryEvidence( options.session, - parsedInput.value.managed_native_boundaries_evidence_id, + input.managed_native_boundaries_evidence_id, ); if (managedBoundaries !== undefined && !managedBoundaries.ok) return toCallToolResult(managedBoundaries, graphContract); const parsed = { - limits: parsedInput.value.limits, + limits: input.limits, managed_artifact: managedArtifact?.value[0], managed_members: managedMembers?.value[0], managed_native_boundaries: managedBoundaries?.value[0], diff --git a/src/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.ts b/src/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.ts index b382cb5bd..8d88089ae 100644 --- a/src/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.ts +++ b/src/server/registerManagedWorkflowTools/verifyManagedNativeBoundaries.ts @@ -1,12 +1,10 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { verifyManagedNativeBoundariesEvidence } from "../../application/ManagedNativeVerificationService.js"; -import { managedNativeVerificationReferenceInputSchema } from "../../contracts/managedWorkflowToolContracts.js"; import { managedNativeVerificationResultSchema } from "../../domain/managedNativeVerification.js"; import { logToolExecution } from "../toolLogging.js"; -import { toCallToolResult } from "../toolResult.js"; import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { safeParseToolInput } from "../toolInputValidation.js"; +import { toCallToolResult } from "../toolResult.js"; import { managedWorkflowContract } from "./contract.js"; import { recordManagedSources, @@ -28,22 +26,15 @@ export const registerVerifyManagedNativeBoundaries = ( nativeVerificationContract.name, toolRegistrationOptions(nativeVerificationContract), async (input) => { - const parsedInput = safeParseToolInput( - managedNativeVerificationReferenceInputSchema, - input, - nativeVerificationContract.name, - ); - if (!parsedInput.ok) - return toCallToolResult(parsedInput, nativeVerificationContract); const managedBoundaries = resolveManagedBoundaryEvidence( options.session, - parsedInput.value.managed_boundaries_evidence_id, + input.managed_boundaries_evidence_id, ); if (!managedBoundaries.ok) return toCallToolResult(managedBoundaries, nativeVerificationContract); const nativeObservations = resolveNativeEvidence( options.session, - parsedInput.value.native_observation_evidence_ids, + input.native_observation_evidence_ids, ); if (!nativeObservations.ok) return toCallToolResult(nativeObservations, nativeVerificationContract); @@ -54,7 +45,7 @@ export const registerVerifyManagedNativeBoundaries = ( managed_boundaries_evidence_id: _managedBoundariesEvidenceId, native_observation_evidence_ids: _nativeObservationEvidenceIds, ...referencedInput - } = parsedInput.value; + } = input; const parsed = { ...referencedInput, managed_boundaries: managedBoundary, diff --git a/src/server/registerOfficialTools.ts b/src/server/registerOfficialTools.ts index 01bbbb73e..c40bfbf00 100644 --- a/src/server/registerOfficialTools.ts +++ b/src/server/registerOfficialTools.ts @@ -1,30 +1,32 @@ import type { McpServer } from "@modelcontextprotocol/server"; +import { z } from "zod"; -import type { AnalysisOperationPort } from "../application/AnalysisProvider.js"; -import type { AnalysisExecution } from "../application/AnalysisProvider.js"; +import type { + AnalysisExecution, + AnalysisOperationPort, +} from "../application/AnalysisProvider.js"; import type { BinarySessionPort } from "../application/BinarySession.js"; +import type { ProgressReporter } from "../application/ProgressReporter.js"; +import type { ToolContract } from "../contracts/toolContracts.js"; import { OFFICIAL_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import type { BinaryTarget } from "../domain/binaryTarget.js"; +import { + AnalysisCapabilityUnavailableError, + UnknownRegistryError, + type AnalysisError, +} from "../domain/errors.js"; +import { createEvidence } from "../domain/evidence.js"; import { jsonObjectSchema, jsonValueSchema, type JsonValue, } from "../domain/jsonValue.js"; -import { toCallToolResult } from "./toolResult.js"; -import type { Logger } from "../logger.js"; -import { logToolExecution } from "./toolLogging.js"; -import type { BinaryTarget } from "../domain/binaryTarget.js"; -import { createEvidence } from "../domain/evidence.js"; -import { - AnalysisCapabilityUnavailableError, - type AnalysisError, - UnknownRegistryError, -} from "../domain/errors.js"; -import { mcpProgressReporter } from "./mcpProgress.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; -import type { ToolContract } from "../contracts/toolContracts.js"; import type { Result } from "../domain/result.js"; -import type { ProgressReporter } from "../application/ProgressReporter.js"; +import type { Logger } from "../logger.js"; +import { mcpProgressReporter } from "./mcpProgress.js"; +import { logToolExecution } from "./toolLogging.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; /** Optional session services used by direct tool registration. */ export interface OfficialToolRegistration { @@ -65,13 +67,7 @@ const registerOfficialTool = ( contract.name, toolRegistrationOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - contract.inputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const arguments_ = projectOfficialArguments(contract, parsedInput.value); + const arguments_ = projectOfficialArguments(contract, input); const progress = mcpProgressReporter(context); const result = await runOfficialOperation( analysis, @@ -198,6 +194,10 @@ const projectOfficialArguments = ( input: unknown, ): Readonly> => { const parsed = jsonObjectSchema.parse(input); + if (!(contract.inputSchema instanceof z.ZodObject)) + throw new TypeError( + "Official tool input contract must be an object schema", + ); const projected: Record = {}; for (const key of Object.keys(contract.inputSchema.shape)) { diff --git a/src/server/registerProcessComparisonTool.ts b/src/server/registerProcessComparisonTool.ts index 951f7ee4e..e3d3fd18f 100644 --- a/src/server/registerProcessComparisonTool.ts +++ b/src/server/registerProcessComparisonTool.ts @@ -1,26 +1,22 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import { - processComparisonInputSchema, - SESSION_TOOL_CONTRACTS, -} from "../contracts/toolContracts.js"; -import { createEvidence, type EvidenceLocation } from "../domain/evidence.js"; +import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; import { EvidenceIntegrityError } from "../domain/errors.js"; +import { createEvidence, type EvidenceLocation } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; -import type { RecordUnknownInput } from "../domain/residualUnknown.js"; import { compareProcessCaptures, parseProcessCapture, } from "../domain/processCapture.js"; -import { recordDerivedEvidence } from "./recordDerivedEvidence.js"; +import type { RecordUnknownInput } from "../domain/residualUnknown.js"; import { err } from "../domain/result.js"; -import { PROCESS_PROVIDER } from "./sessionToolPolicies.js"; -import { toCallToolResult } from "./toolResult.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { recordDerivedEvidence } from "./recordDerivedEvidence.js"; import { runDerivedOperation } from "./runDerivedOperation.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; import { resolveSessionEvidenceIds } from "./sessionEvidence.js"; +import { PROCESS_PROVIDER } from "./sessionToolPolicies.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; const PROCESS_CAPTURE_EVIDENCE = { operation: "capture_process_scenario", @@ -43,22 +39,15 @@ export const registerProcessComparisonTool = ( contract.name, toolRegistrationOptions(contract), async (input, context) => { - const parsedInput = safeParseToolInput( - processComparisonInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; const leftRecord = resolveSessionEvidenceIds( session, - [parsed.left_evidence_id], + [input.left_evidence_id], PROCESS_CAPTURE_EVIDENCE, ); if (!leftRecord.ok) return toCallToolResult(leftRecord, contract); const rightRecord = resolveSessionEvidenceIds( session, - [parsed.right_evidence_id], + [input.right_evidence_id], PROCESS_CAPTURE_EVIDENCE, ); if (!rightRecord.ok) return toCallToolResult(rightRecord, contract); @@ -74,12 +63,12 @@ export const registerProcessComparisonTool = ( ); const computed = await runDerivedOperation(context, contract.name, () => compareProcessCaptures(leftCapture, rightCapture, { - ...(parsed.max_capture_age_ms === undefined + ...(input.max_capture_age_ms === undefined ? {} - : { maxCaptureAgeMs: parsed.max_capture_age_ms }), - ...(parsed.trace_spec === undefined + : { maxCaptureAgeMs: input.max_capture_age_ms }), + ...(input.trace_spec === undefined ? {} - : { traceSpecification: parsed.trace_spec }), + : { traceSpecification: input.trace_spec }), now, }), ); @@ -99,18 +88,18 @@ export const registerProcessComparisonTool = ( } const evidence = createEvidence(undefined, PROCESS_PROVIDER, { predicateType: - parsed.trace_spec === undefined + input.trace_spec === undefined ? "rea.process-comparison/v3" : "rea.process-comparison/v4", operation: contract.name, parameters: { - left_evidence_id: parsed.left_evidence_id, - right_evidence_id: parsed.right_evidence_id, + left_evidence_id: input.left_evidence_id, + right_evidence_id: input.right_evidence_id, left_normalization: leftCapture.normalization, right_normalization: rightCapture.normalization, - ...(parsed.trace_spec === undefined + ...(input.trace_spec === undefined ? {} - : { trace_spec: jsonValueSchema.parse(parsed.trace_spec) }), + : { trace_spec: jsonValueSchema.parse(input.trace_spec) }), }, result: jsonValueSchema.parse(comparison), confidence: "derived", @@ -120,13 +109,13 @@ export const registerProcessComparisonTool = ( leftRecord.value[0]?.locations, rightRecord.value[0]?.locations, ), - evidenceLinks: [parsed.left_evidence_id, parsed.right_evidence_id], + evidenceLinks: [input.left_evidence_id, input.right_evidence_id], }); return toCallToolResult( recordDerivedEvidence( session, evidence, - comparisonUnknownInput(parsed, comparison), + comparisonUnknownInput(input, comparison), ), contract, ); diff --git a/src/server/registerReplayMachineTool.ts b/src/server/registerReplayMachineTool.ts index 82e01caa9..058936753 100644 --- a/src/server/registerReplayMachineTool.ts +++ b/src/server/registerReplayMachineTool.ts @@ -1,22 +1,14 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; -import { - replayMachineRunInputSchema, - runReplayMachine, -} from "../domain/replayMachineRun.js"; +import { runReplayMachine } from "../domain/replayMachineRun.js"; import { ok } from "../domain/result.js"; import type { Logger } from "../logger.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; import { logToolExecution } from "./toolLogging.js"; -import { toCallToolResult } from "./toolResult.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; -const contract = SESSION_TOOL_CONTRACTS.find( - ({ name }) => name === "run_replay_machine", -); -if (contract === undefined) - throw new TypeError("Missing run_replay_machine tool contract"); +const contract = SESSION_TOOL_CONTRACTS[18]; /** Register direct execution-free finite replay-machine evaluation. */ export const registerReplayMachineTool = ( @@ -27,14 +19,8 @@ export const registerReplayMachineTool = ( contract.name, toolRegistrationOptions(contract), async (input) => { - const parsed = safeParseToolInput( - replayMachineRunInputSchema, - input, - contract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, contract); const result = await logToolExecution(logger, contract.name, () => - Promise.resolve(ok(runReplayMachine(parsed.value))), + Promise.resolve(ok(runReplayMachine(input))), ); return toCallToolResult(result, contract); }, diff --git a/src/server/registerSessionRecordTools.ts b/src/server/registerSessionRecordTools.ts index 0cb6c3674..46f9d7278 100644 --- a/src/server/registerSessionRecordTools.ts +++ b/src/server/registerSessionRecordTools.ts @@ -1,35 +1,22 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import type { PermissionAuthority } from "../application/PermissionAuthority.js"; import { readEvidenceBundle, writeEvidenceBundle, } from "../application/EvidenceBundleFiles.js"; -import { - exportEvidenceBundleInputSchema, - importEvidenceBundleInputSchema, - listUnknownsInputSchema, - releaseEvidenceBundleInputSchema, - snapshotEvidenceBundleInputSchema, - SESSION_TOOL_CONTRACTS, - verifyUnknownResolutionInputSchema, -} from "../contracts/toolContracts.js"; -import type { - EvidenceBundle, - EvidenceFilePolicy, -} from "../domain/evidenceBundle.js"; +import type { PermissionAuthority } from "../application/PermissionAuthority.js"; +import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; import { AnalysisProtocolError, PermissionRequiredError, type AnalysisError, } from "../domain/errors.js"; -import { - recordUnknownInputSchema, - updateUnknownInputSchema, -} from "../domain/residualUnknown.js"; +import type { + EvidenceBundle, + EvidenceFilePolicy, +} from "../domain/evidenceBundle.js"; import { err, ok, type Result } from "../domain/result.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; import { toCallToolResult } from "./toolResult.js"; @@ -64,30 +51,22 @@ const registerReleaseEvidenceTool = ({ releaseContract.name, toolRegistrationOptions(releaseContract), async (input) => { - const parsed = safeParseToolInput( - releaseEvidenceBundleInputSchema, - input, - releaseContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, releaseContract); const denied = await authorizeEvidenceWrite({ authority: permissionAuthority, - operationIdentity: `release_evidence:${parsed.value.bundle_digest}`, + operationIdentity: `release_evidence:${input.bundle_digest}`, }); if (denied !== undefined) return toCallToolResult(denied, releaseContract); - const released = session.releaseEvidenceBundle( - parsed.value.bundle_digest, - ); + const released = session.releaseEvidenceBundle(input.bundle_digest); if (released) void server.server .sendResourceUpdated({ - uri: `rea://evidence-bundle/${parsed.value.bundle_digest}`, + uri: `rea://evidence-bundle/${input.bundle_digest}`, }) .catch(() => undefined); return toCallToolResult( ok({ - bundle_digest: parsed.value.bundle_digest, + bundle_digest: input.bundle_digest, released, }), releaseContract, @@ -130,26 +109,19 @@ const registerExportEvidenceTool = ({ exportContract.name, toolRegistrationOptions(exportContract), async (input) => { - const parsedInput = safeParseToolInput( - exportEvidenceBundleInputSchema, - input, - exportContract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, exportContract); - const parsed = parsedInput.value; const bundle = session.exportEvidenceBundle(); const denied = await authorizeEvidencePath({ authority: permissionAuthority, capability: "evidence_write", - path: parsed.path, + path: input.path, access: "write", - operationIdentity: `export_evidence:${parsed.path}`, + operationIdentity: `export_evidence:${input.path}`, }); if (denied !== undefined) return toCallToolResult(denied, exportContract); const written = await writeEvidenceBundle( bundle, - parsed.path, - parsed.overwrite, + input.path, + input.overwrite, filePolicy, ); return written.ok @@ -175,13 +147,7 @@ const registerSnapshotEvidenceTool = ({ server.registerTool( snapshotContract.name, toolRegistrationOptions(snapshotContract), - (input) => { - const parsed = safeParseToolInput( - snapshotEvidenceBundleInputSchema, - input, - snapshotContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, snapshotContract); + () => { const snapshot = session.snapshotEvidenceBundle(); if (!snapshot.ok) return toCallToolResult(snapshot, snapshotContract); const value = { @@ -218,13 +184,7 @@ const registerImportEvidenceTool = ({ importContract.name, toolRegistrationOptions(importContract), async (input) => { - const parsedInput = safeParseToolInput( - importEvidenceBundleInputSchema, - input, - importContract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, importContract); - const path = parsedInput.value.path; + const path = input.path; const denied = await authorizeEvidencePath({ authority: permissionAuthority, capability: "evidence_read", @@ -306,13 +266,7 @@ const registerListUnknownsTool = ({ listContract.name, toolRegistrationOptions(listContract), (input) => { - const parsed = safeParseToolInput( - listUnknownsInputSchema, - input, - listContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, listContract); - const filters = parsed.value; + const filters = input; const all = session.listUnknowns({ ...(filters.status === undefined ? {} : { status: filters.status }), ...(filters.severity === undefined @@ -362,13 +316,7 @@ const registerRecordUnknownTool = ({ recordContract.name, toolRegistrationOptions(recordContract), (input) => { - const parsed = safeParseToolInput( - recordUnknownInputSchema, - input, - recordContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, recordContract); - const result = session.recordUnknown(parsed.value); + const result = session.recordUnknown(input); return result.ok ? toCallToolResult(result, recordContract, { resourceLinks: [ @@ -394,13 +342,7 @@ const registerUpdateUnknownTool = ({ updateContract.name, toolRegistrationOptions(updateContract), (input) => { - const parsed = safeParseToolInput( - updateUnknownInputSchema, - input, - updateContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, updateContract); - const result = session.updateUnknown(parsed.value); + const result = session.updateUnknown(input); if (result.ok) void server.server .sendResourceUpdated({ @@ -431,19 +373,11 @@ const registerVerifyUnknownTool = ({ server.registerTool( verifyContract.name, toolRegistrationOptions(verifyContract), - (input) => { - const parsed = safeParseToolInput( - verifyUnknownResolutionInputSchema, - input, - verifyContract.name, - ); - return parsed.ok - ? toCallToolResult( - session.verifyUnknownResolution(parsed.value.unknown_id), - verifyContract, - ) - : toCallToolResult(parsed, verifyContract); - }, + (input) => + toCallToolResult( + session.verifyUnknownResolution(input.unknown_id), + verifyContract, + ), ); }; diff --git a/src/server/registerSessionStatusTool.ts b/src/server/registerSessionStatusTool.ts index 950e51df9..be606df1f 100644 --- a/src/server/registerSessionStatusTool.ts +++ b/src/server/registerSessionStatusTool.ts @@ -2,18 +2,18 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { z } from "zod"; import type { BinarySessionPort } from "../application/BinarySession.js"; +import { buildCapabilityInventory } from "../application/CapabilityInventory.js"; import { binarySessionInputSchema, SESSION_TOOL_CONTRACTS, } from "../contracts/toolContracts.js"; -import { toCallToolResult } from "./toolResult.js"; +import type { ClientFeatureAvailability } from "../contracts/toolOutputSchemaPrimitives.js"; import { jsonObjectSchema } from "../domain/jsonValue.js"; import { createServerIdentity } from "../serverIdentity.js"; -import { buildCapabilityInventory } from "../application/CapabilityInventory.js"; -import type { ClientFeatureAvailability } from "../contracts/toolOutputSchemaPrimitives.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; +import { mcpClientMetadata } from "./mcpClientMetadata.js"; import type { SessionAvailability } from "./sessionAvailabilityPolicy.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; type BinarySessionInput = z.output; type ToolAvailability = ReturnType[number]; @@ -35,22 +35,9 @@ export const registerSessionStatusTool = ( server.registerTool( contract.name, toolRegistrationOptions(contract), - (input) => { - const parsedInput = safeParseToolInput( - binarySessionInputSchema, - input, - contract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, contract); - const parsed = parsedInput.value; - const client = server.server.getClientVersion(); - const clientCapabilities = server.server.getClientCapabilities(); - const clientFeatures: ClientFeatureAvailability = { - elicitation_form: clientCapabilities?.elicitation?.form !== undefined, - elicitation_url: clientCapabilities?.elicitation?.url !== undefined, - roots: clientCapabilities?.roots !== undefined, - sampling: clientCapabilities?.sampling !== undefined, - }; + (input, context) => { + const { client, clientFeatures, protocolVersion } = + mcpClientMetadata(context); const status = session.status(); const statusObject = jsonObjectSchema.parse(status); const toolAvailability = buildCapabilityInventory( @@ -61,28 +48,24 @@ export const registerSessionStatusTool = ( const serverIdentity = createServerIdentity({ startedAt, expected: { - ...(parsed.expected_package_version === undefined + ...(input.expected_package_version === undefined ? {} - : { package_version: parsed.expected_package_version }), - ...(parsed.expected_catalog_digest === undefined + : { package_version: input.expected_package_version }), + ...(input.expected_catalog_digest === undefined ? {} - : { catalog_digest: parsed.expected_catalog_digest }), - ...(parsed.expected_server_path === undefined + : { catalog_digest: input.expected_catalog_digest }), + ...(input.expected_server_path === undefined ? {} - : { server_path: parsed.expected_server_path }), + : { server_path: input.expected_server_path }), }, ...(client === undefined ? {} : { client }), - ...(server.server.getNegotiatedProtocolVersion() === undefined - ? {} - : { - protocolVersion: server.server.getNegotiatedProtocolVersion(), - }), + ...(protocolVersion === undefined ? {} : { protocolVersion }), }); return toCallToolResult( { ok: true, value: projectSessionStatus({ - input: parsed, + input: input, status: statusObject, toolAvailability, serverIdentity, diff --git a/src/server/registerSessionTools.ts b/src/server/registerSessionTools.ts index a82c62e2d..06de6cf7a 100644 --- a/src/server/registerSessionTools.ts +++ b/src/server/registerSessionTools.ts @@ -1,65 +1,58 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { z } from "zod"; -import type { BinarySessionPort } from "../application/BinarySession.js"; +import { isInputRequiredResult } from "@modelcontextprotocol/server"; import { - addressContextInputSchema, - navigationContextInputSchema, - SESSION_TOOL_CONTRACTS, -} from "../contracts/toolContracts.js"; -import { toCallToolResult } from "./toolResult.js"; -import type { Logger } from "../logger.js"; -import { logToolExecution } from "./toolLogging.js"; -import { ok, type Result } from "../domain/result.js"; + getNavigationContext, + inspectAddressContext, +} from "../application/AnalysisContextQueries.js"; +import { readAnalysisSnapshot } from "../application/AnalysisSnapshotFiles.js"; +import type { BinarySessionPort } from "../application/BinarySession.js"; +import type { PermissionAuthority } from "../application/PermissionAuthority.js"; +import { processCapturePermissionRequest } from "../application/ProcessCapturePermission.js"; +import { createProcessCaptureEvidence } from "../application/ProcessEvidence.js"; +import { captureProcessScenario } from "../application/ProcessHarness.js"; +import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js"; +import { UnknownRegistryError, type AnalysisError } from "../domain/errors.js"; +import type { Evidence } from "../domain/evidence.js"; +import type { EvidenceFilePolicy } from "../domain/evidenceBundle.js"; import type { ProcessCapture, ProcessExecutionPolicy, ProcessScenario, } from "../domain/processCapture.js"; -import { processScenarioSchema } from "../domain/processCapture.js"; -import { captureProcessScenario } from "../application/ProcessHarness.js"; -import { processCapturePermissionRequest } from "../application/ProcessCapturePermission.js"; -import type { Evidence } from "../domain/evidence.js"; -import type { AnalysisSnapshot } from "../domain/analysisSnapshot.js"; -import type { EvidenceFilePolicy } from "../domain/evidenceBundle.js"; -import { readAnalysisSnapshot } from "../application/AnalysisSnapshotFiles.js"; -import { UnknownRegistryError, type AnalysisError } from "../domain/errors.js"; -import { - DENY_EVIDENCE_FILE_POLICY, - DENY_PROCESS_POLICY, -} from "./sessionToolPolicies.js"; -import { createProcessCaptureEvidence } from "../application/ProcessEvidence.js"; -import { registerProcessComparisonTool } from "./registerProcessComparisonTool.js"; -import { registerArtifactComparisonTool } from "./registerArtifactComparisonTool.js"; -import { registerFunctionComparisonTool } from "./registerFunctionComparisonTool.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { safeParseToolInput } from "./toolInputValidation.js"; -import { registerBundleComparisonTool } from "./registerBundleComparisonTool.js"; -import { registerInvestigationTools } from "./registerInvestigationTools.js"; -import { openBinaryInputSchema } from "../contracts/sessionLifecycleInputs.js"; -import { registerSessionStatusTool } from "./registerSessionStatusTool.js"; -import type { PermissionAuthority } from "../application/PermissionAuthority.js"; +import { ok, type Result } from "../domain/result.js"; +import type { Logger } from "../logger.js"; import { mcpProgressReporter } from "./mcpProgress.js"; +import { permissionFailure } from "./permissionFailure.js"; import { authorizeProcessCaptureWithElicitation, type ProcessCaptureElicitation, } from "./ProcessCaptureElicitation.js"; -import { isInputRequiredResult } from "@modelcontextprotocol/server"; +import { registerArtifactComparisonTool } from "./registerArtifactComparisonTool.js"; +import { registerBundleComparisonTool } from "./registerBundleComparisonTool.js"; +import { registerCloseLifecycleTool } from "./registerCloseLifecycleTool.js"; +import { registerFunctionComparisonTool } from "./registerFunctionComparisonTool.js"; +import { registerInvestigationTools } from "./registerInvestigationTools.js"; +import { registerProcessComparisonTool } from "./registerProcessComparisonTool.js"; +import { registerReplayMachineTool } from "./registerReplayMachineTool.js"; import { registerEvidenceTools, registerUnknownTools, } from "./registerSessionRecordTools.js"; -import { registerReplayMachineTool } from "./registerReplayMachineTool.js"; +import { registerSessionStatusTool } from "./registerSessionStatusTool.js"; import { sessionAvailabilityPolicy, type SessionAvailability, } from "./sessionAvailabilityPolicy.js"; -import { permissionFailure } from "./permissionFailure.js"; -import { registerCloseLifecycleTool } from "./registerCloseLifecycleTool.js"; import { - getNavigationContext, - inspectAddressContext, -} from "../application/AnalysisContextQueries.js"; + DENY_EVIDENCE_FILE_POLICY, + DENY_PROCESS_POLICY, +} from "./sessionToolPolicies.js"; +import { logToolExecution } from "./toolLogging.js"; +import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; +import { toCallToolResult } from "./toolResult.js"; const recordProcessResidualUnknowns = ( session: BinarySessionPort, @@ -104,7 +97,7 @@ interface ProcessToolRegistration { readonly server: McpServer; readonly session: BinarySessionPort; readonly logger: Logger; - readonly processPolicy: ProcessExecutionPolicy; + readonly processPolicy: () => ProcessExecutionPolicy; readonly captureContract: (typeof SESSION_TOOL_CONTRACTS)[5]; readonly permissionAuthority?: PermissionAuthority; readonly processCaptureElicitation?: ProcessCaptureElicitation; @@ -123,14 +116,7 @@ const registerProcessTools = ({ captureContract.name, toolRegistrationOptions(captureContract), async (input, context) => { - const parsedInput = safeParseToolInput( - processScenarioSchema, - input, - captureContract.name, - ); - if (!parsedInput.ok) - return toCallToolResult(parsedInput, captureContract); - const scenario = parsedInput.value; + const scenario = input; if (permissionAuthority !== undefined) { const request = processCapturePermissionRequest(scenario); const authorized = @@ -162,7 +148,7 @@ const registerProcessTools = ({ () => captureProcessScenario( scenario, - processPolicy, + processPolicy(), context.mcpReq.signal, ), ); @@ -232,25 +218,18 @@ const registerOpenLifecycleTool = ({ openContract.name, toolRegistrationOptions(openContract), async (input, context) => { - const parsedInput = safeParseToolInput( - openBinaryInputSchema, - input, - openContract.name, - ); - if (!parsedInput.ok) return toCallToolResult(parsedInput, openContract); - const parsed = parsedInput.value; let snapshot: AnalysisSnapshot | undefined; - if (parsed.snapshot_path !== undefined) { + if (input.snapshot_path !== undefined) { if (permissionAuthority !== undefined) { const authorized = await permissionAuthority.authorize( { capability: "snapshot_read", - roots: [parsed.snapshot_path], + roots: [input.snapshot_path], executables: [], environment_names: [], network: "none", mount: false, - operation_identity: `open_binary:snapshot:${parsed.snapshot_path}`, + operation_identity: `open_binary:snapshot:${input.snapshot_path}`, }, "read", ); @@ -261,22 +240,21 @@ const registerOpenLifecycleTool = ({ ); } const loaded = await readAnalysisSnapshot( - parsed.snapshot_path, + input.snapshot_path, snapshotFilePolicy, ); if (!loaded.ok) return toCallToolResult(loaded, openContract); snapshot = loaded.value; } const opened = await logToolExecution(logger, openContract.name, () => - session.open(parsed.path, { + session.open(input.path, { signal: context.mcpReq.signal, - ...(parsed.provider_id === undefined + ...(input.provider_id === undefined ? {} - : { providerId: parsed.provider_id }), + : { providerId: input.provider_id }), ...(snapshot === undefined ? {} : { snapshot }), }), ); - if (opened.ok) server.sendToolListChanged(); return opened.ok ? toCallToolResult( { @@ -301,7 +279,7 @@ const registerOpenLifecycleTool = ({ /** Register MCP-only target lifecycle operations on a long-lived session. */ export interface SessionToolOptions { - readonly processPolicy?: ProcessExecutionPolicy; + readonly processPolicy?: () => ProcessExecutionPolicy; readonly evidenceFilePolicy?: EvidenceFilePolicy; readonly investigationInputRoots?: readonly string[]; readonly analysisSnapshotFilePolicy?: EvidenceFilePolicy; @@ -335,18 +313,8 @@ const registerContextTools = ( navigationContract.name, toolRegistrationOptions(navigationContract), async (input, context) => { - const parsed = safeParseToolInput( - navigationContextInputSchema, - input, - navigationContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, navigationContract); return toCallToolResult( - await getNavigationContext( - session, - parsed.value, - context.mcpReq.signal, - ), + await getNavigationContext(session, input, context.mcpReq.signal), navigationContract, ); }, @@ -355,18 +323,8 @@ const registerContextTools = ( addressContract.name, toolRegistrationOptions(addressContract), async (input, context) => { - const parsed = safeParseToolInput( - addressContextInputSchema, - input, - addressContract.name, - ); - if (!parsed.ok) return toCallToolResult(parsed, addressContract); return toCallToolResult( - await inspectAddressContext( - session, - parsed.value, - context.mcpReq.signal, - ), + await inspectAddressContext(session, input, context.mcpReq.signal), addressContract, ); }, @@ -379,7 +337,7 @@ export const registerSessionTools = ( logger: Logger, options: SessionToolOptions = {}, ): void => { - const processPolicy = options.processPolicy ?? DENY_PROCESS_POLICY; + const processPolicy = options.processPolicy ?? (() => DENY_PROCESS_POLICY); const evidenceFilePolicy = options.evidenceFilePolicy ?? DENY_EVIDENCE_FILE_POLICY; const analysisSnapshotFilePolicy = @@ -410,7 +368,7 @@ export const registerSessionTools = ( snapshotFilePolicy: analysisSnapshotFilePolicy, startedAt: options.startedAt ?? new Date().toISOString(), availabilityPolicy: sessionAvailabilityPolicy(options.availabilityPolicy, { - processPolicy, + processPolicy: processPolicy(), evidenceFilePolicy, investigationInputRoots: options.investigationInputRoots ?? [], }), diff --git a/src/server/runDerivedOperation.ts b/src/server/runDerivedOperation.ts index 393b6a530..f2c8ac319 100644 --- a/src/server/runDerivedOperation.ts +++ b/src/server/runDerivedOperation.ts @@ -1,3 +1,4 @@ +import type { ServerContext } from "@modelcontextprotocol/server"; import { setImmediate } from "node:timers/promises"; import { @@ -5,22 +6,11 @@ import { AnalysisInputError, } from "../domain/errors.js"; import { err, ok, type Result } from "../domain/result.js"; -import { mcpProgressReporter } from "./mcpProgress.js"; +import { mcpProgressReporter, type McpProgressContext } from "./mcpProgress.js"; -export interface DerivedOperationContext { - readonly mcpReq: { - readonly signal: AbortSignal; - readonly _meta?: { readonly progressToken?: string | number | undefined }; - notify(notification: { - readonly method: "notifications/progress"; - readonly params: { - readonly progressToken: string | number; - readonly progress: number; - readonly total?: number; - readonly message?: string; - }; - }): Promise; - }; +export interface DerivedOperationContext extends McpProgressContext { + readonly mcpReq: McpProgressContext["mcpReq"] & + Pick; } /** Run synchronous derived work with transport yields and a publication guard. */ diff --git a/src/server/sessionAvailabilityPolicy.ts b/src/server/sessionAvailabilityPolicy.ts index 4c387846a..ed77a947b 100644 --- a/src/server/sessionAvailabilityPolicy.ts +++ b/src/server/sessionAvailabilityPolicy.ts @@ -27,7 +27,7 @@ export const sessionAvailabilityPolicy = ( ): (() => SessionAvailability) => configured ?? (() => ({ - processCaptureEnabled: defaults.processPolicy.enabled, + processCaptureEnabled: defaults.processPolicy.status === "enabled", evidenceFileRoots: defaults.evidenceFilePolicy.roots.length, investigationInputRoots: defaults.investigationInputRoots.length, browserObservationEnabled: diff --git a/src/server/sessionToolPolicies.ts b/src/server/sessionToolPolicies.ts index b595c0db0..08c9c87ef 100644 --- a/src/server/sessionToolPolicies.ts +++ b/src/server/sessionToolPolicies.ts @@ -3,11 +3,7 @@ import type { ProcessExecutionPolicy } from "../domain/processCapture.js"; /** Fail-closed process policy used when operator configuration is absent. */ export const DENY_PROCESS_POLICY: ProcessExecutionPolicy = { - enabled: false, - executableRoots: [], - workingRoots: [], - allowedEnvironment: [], - allowExternalNetwork: false, + status: "disabled", }; /** Fail-closed evidence filesystem policy used without approved roots. */ diff --git a/src/server/toolInputValidation.ts b/src/server/toolInputValidation.ts deleted file mode 100644 index f8973dc62..000000000 --- a/src/server/toolInputValidation.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { z } from "zod"; - -import { - AnalysisInputError, - type AnalysisInputIssue, -} from "../domain/errors.js"; -import { projectInputIssues } from "../domain/inputIssueProjection.js"; -import { err, ok, type Result } from "../domain/result.js"; -import { closeObjectSchemas } from "./toolRegistrationOptions.js"; - -/** Parse one MCP request exactly once and retain only schema-owned correction data. */ -export const safeParseToolInput = ( - schema: Schema, - input: unknown, - operation: string, -): Result, AnalysisInputError> => { - const unknownIssues = unknownArgumentIssues(schema, input); - if (unknownIssues.length > 0) - return err(new AnalysisInputError(operation, undefined, unknownIssues)); - const parsed = schema.safeParse(input); - return parsed.success - ? ok(parsed.data) - : err( - new AnalysisInputError( - operation, - undefined, - projectInputIssues(parsed.error.issues, input), - ), - ); -}; - -const schemaCache = new WeakMap>>(); - -const unknownArgumentIssues = ( - schema: z.ZodType, - input: unknown, -): readonly AnalysisInputIssue[] => { - let jsonSchema = schemaCache.get(schema); - if (jsonSchema === undefined) { - const converter = schema["~standard"].jsonSchema?.input; - if (converter === undefined) - throw new TypeError( - "Tool input schema does not expose Standard JSON Schema", - ); - jsonSchema = closeObjectSchemas(converter({ target: "draft-2020-12" })); - schemaCache.set(schema, jsonSchema); - } - return scanUnknownArguments(input, jsonSchema, jsonSchema, []); -}; - -const scanUnknownArguments = ( - value: unknown, - schema: Readonly>, - root: Readonly>, - path: readonly (string | number)[], -): AnalysisInputIssue[] => { - const resolved = resolveSchema(schema, root); - if (Array.isArray(value)) { - const items = objectValue(resolved.items); - return items === undefined - ? [] - : value.flatMap((item, index) => - scanUnknownArguments(item, items, root, [...path, index]), - ); - } - if (!isObject(value)) return []; - const variants = schemaVariants(resolved, root); - const properties = Object.fromEntries( - variants.flatMap((variant) => - Object.entries(objectValue(variant.properties) ?? {}), - ), - ); - const closed = - variants.length > 0 && - variants.every( - (variant) => - variant.additionalProperties !== true && - !isObject(variant.additionalProperties), - ); - const issues: AnalysisInputIssue[] = []; - for (const [key, child] of Object.entries(value)) { - const propertySchema = objectValue(properties[key]); - if (propertySchema === undefined) { - if (closed) - issues.push({ path: [...path, key], reason: "unknown_argument" }); - continue; - } - issues.push( - ...scanUnknownArguments(child, propertySchema, root, [...path, key]), - ); - } - return issues; -}; - -const schemaVariants = ( - schema: Readonly>, - root: Readonly>, -): readonly Readonly>[] => { - const resolved = resolveSchema(schema, root); - const variants = [resolved.oneOf, resolved.anyOf, resolved.allOf] - .flatMap((value) => (Array.isArray(value) ? value : [])) - .flatMap((value) => { - const object = objectValue(value); - return object === undefined ? [] : schemaVariants(object, root); - }); - if (variants.length > 0) return variants; - return resolved.type === "object" || isObject(resolved.properties) - ? [resolved] - : []; -}; - -const resolveSchema = ( - schema: Readonly>, - root: Readonly>, -): Readonly> => { - const reference = schema.$ref; - if (typeof reference !== "string" || !reference.startsWith("#/$defs/")) - return schema; - const definition = objectValue(objectValue(root.$defs)?.[reference.slice(8)]); - return definition === undefined ? schema : definition; -}; - -const isObject = (value: unknown): value is Readonly> => - typeof value === "object" && value !== null && !Array.isArray(value); - -const objectValue = ( - value: unknown, -): Readonly> | undefined => - isObject(value) ? value : undefined; diff --git a/src/server/toolRegistrationOptions.ts b/src/server/toolRegistrationOptions.ts index 7bd6c6b14..100648d5c 100644 --- a/src/server/toolRegistrationOptions.ts +++ b/src/server/toolRegistrationOptions.ts @@ -1,263 +1,19 @@ -import { z } from "zod"; - import type { ToolContract } from "../contracts/toolContracts.js"; -import { applyToolInputJsonSchemaOverride } from "../contracts/toolSchemaJsonOverrides.js"; +import { toolInputSchemaWithMetadata } from "../contracts/toolSchemaMetadata.js"; -const ADVERTISED_INPUT_SCHEMAS = new WeakMap< - z.ZodObject, - Readonly> ->(); -const ADVERTISED_OUTPUT_SCHEMAS = new WeakMap< - z.ZodObject, - Readonly> ->(); - -/** Project the public contract fields accepted by MCP tool registration. */ -export const toolRegistrationOptions = (contract: ToolContract) => ({ +/** Project the canonical Zod contracts directly into SDK registration. */ +export const toolRegistrationOptions = ( + contract: Contract, +): { + readonly title: Contract["title"]; + readonly description: Contract["description"]; + readonly inputSchema: Contract["inputSchema"]; + readonly outputSchema: Contract["outputSchema"]; + readonly annotations: Contract["annotations"]; +} => ({ title: contract.title, description: contract.description, - inputSchema: advertisedInputSchema(contract), - outputSchema: advertisedOutputSchema(contract.outputSchema), + inputSchema: toolInputSchemaWithMetadata(contract), + outputSchema: contract.outputSchema, annotations: contract.annotations, }); - -/** - * Advertise the exact Zod contract while leaving validation to REA's adapter. - * The SDK otherwise converts validation failures to text-only JSON-RPC errors - * before REA can return its stable structured error envelope. - */ -const advertisedInputSchema = (contract: ToolContract) => ({ - "~standard": { - version: 1 as const, - vendor: "rea", - validate: (input: unknown) => ({ value: input }), - jsonSchema: { - input: () => advertisedInputJsonSchema(contract), - output: () => advertisedInputJsonSchema(contract), - }, - }, -}); - -const advertisedOutputSchema = (schema: z.ZodObject) => { - const standard = schema["~standard"]; - const converter = standard.jsonSchema?.output; - if (converter === undefined) - throw new TypeError( - "Tool output schema does not expose Standard JSON Schema", - ); - return { - "~standard": { - ...standard, - jsonSchema: { - input: () => advertisedOutputJsonSchema(schema, converter), - output: () => advertisedOutputJsonSchema(schema, converter), - }, - }, - }; -}; - -const advertisedInputJsonSchema = ( - contract: ToolContract, -): Readonly> => - cachedJsonSchema(ADVERTISED_INPUT_SCHEMAS, contract.inputSchema, () => ({ - ...describeProperties( - applyToolInputJsonSchemaOverride( - contract.name, - closeObjectSchemas(inputJsonSchema(contract.inputSchema)), - ), - ), - examples: contract.examples.map(({ input }) => input), - })); - -const advertisedOutputJsonSchema = ( - schema: z.ZodObject, - converter: NonNullable["output"], -): Readonly> => - cachedJsonSchema(ADVERTISED_OUTPUT_SCHEMAS, schema, () => - describeRootProperties( - closeObjectSchemas(converter({ target: "draft-2020-12" })), - ), - ); - -const cachedJsonSchema = ( - cache: WeakMap>>, - schema: z.ZodObject, - create: () => Record, -): Readonly> => { - const cached = cache.get(schema); - if (cached !== undefined) return cached; - const created = create(); - cache.set(schema, created); - return created; -}; - -const inputJsonSchema = (schema: z.ZodObject): Record => { - const converter = schema["~standard"].jsonSchema?.input; - if (converter === undefined) - throw new TypeError( - "Tool input schema does not expose Standard JSON Schema", - ); - return converter({ target: "draft-2020-12" }); -}; - -/** Close fixed-shape JSON Schema objects while preserving explicit maps. */ -export const closeObjectSchemas = ( - value: Readonly>, -): Record => { - const closed = Object.fromEntries( - Object.entries(value).map(([key, child]) => [key, closeSchemaValue(child)]), - ); - return value.type === "object" && - isObject(value.properties) && - value.additionalProperties === undefined - ? { ...closed, additionalProperties: false } - : closed; -}; - -const closeSchemaValue = (value: unknown): unknown => { - if (Array.isArray(value)) return value.map(closeSchemaValue); - if (!isObject(value)) return value; - return closeObjectSchemas(value); -}; - -const describeProperties = ( - value: Readonly>, -): Record => - Object.fromEntries( - Object.entries(value).map(([key, child]) => { - if (key !== "properties" || typeof child !== "object" || child === null) - return [key, describeValue(child)]; - return [ - key, - Object.fromEntries( - Object.entries(child).map(([property, schema]) => [ - property, - isObject(schema) && typeof schema.description !== "string" - ? { - ...describeProperties(schema), - description: fallbackPropertyDescription(property), - } - : describeValue(schema), - ]), - ), - ]; - }), - ); - -const describeValue = (value: unknown): unknown => { - if (Array.isArray(value)) return value.map(describeValue); - return isObject(value) ? describeProperties(value) : value; -}; - -const describeRootProperties = ( - value: Readonly>, -): Record => { - const properties = value.properties; - if (!isObject(properties)) return { ...value }; - return { - ...value, - properties: Object.fromEntries( - Object.entries(properties).map(([property, schema]) => [ - property, - isObject(schema) && typeof schema.description !== "string" - ? { - ...schema, - description: fallbackPropertyDescription(property), - } - : schema, - ]), - ), - }; -}; - -const PROPERTY_DESCRIPTIONS: Readonly> = { - addresses: "Ordered provider-normalized procedure addresses to analyze.", - approved: "Explicit operator approval to perform this operation.", - after: "The later or right-hand observation to compare.", - before: "The earlier or left-hand observation to compare.", - boundary_id: "Exact reconstruction boundary identifier to evaluate.", - case_sensitive: - "Whether text matching distinguishes uppercase and lowercase.", - cdp_endpoint: "Approved literal loopback Chrome DevTools Protocol endpoint.", - comment: "Exact analyst comment text to write.", - comparisons: "Validated comparison Evidence records to aggregate.", - coverage: "Exact reconstruction-coverage commitment to verify.", - detail: "Requested response detail level.", - direction: "Direction in which to traverse or compare relationships.", - document: "Exact provider document or program identity.", - error: "Structured, caller-actionable error when the operation fails.", - evidence: "Evidence v2 record produced by this operation.", - evidence_id: "Stable identifier of the recorded Evidence v2 observation.", - evidence_uri: - "Session resource URI for the recorded Evidence v2 observation.", - executable: "Approved absolute path of the executable to run.", - format: "Declared input artifact format.", - name: "Exact name used by this operation.", - pattern: "Text or bounded pattern used to filter matching results.", - phase: "Current plan or execution phase of the operation.", - plan: "Content-bound execution plan and its approval commitment.", - query: "Non-empty feature or text query to investigate.", - question: "Concrete unresolved question to retain for later investigation.", - result: "Primary structured result returned by this operation.", - left: "Left-hand input used for comparison or differential execution.", - limit: "Maximum number of results to return in this page.", - limits: - "Bounded resource-consumption and result-size limits for this operation.", - mode: "Operation mode that selects the requested behavior.", - offset: "Zero-based index of the first result to return.", - overwrite: "Whether an existing destination may be replaced.", - path: "Local filesystem path used by this operation.", - provider_id: - "Exact deep-analysis provider ID, or automatic selection when omitted.", - right: "Right-hand input used for comparison or differential execution.", - schema_version: "Version of this structured result schema.", - source_evidence: - "Evidence records supporting the prepared source transformation.", - status: "Current lifecycle or verification status.", - summary: "Concise evidence-backed summary of the result.", - symbols: "Ordered bounded Swift symbols to demangle.", - target_id: "Exact authorized CDP target identifier.", - unknown_id: "Exact residual-unknown identifier.", - unknown_registry_approved: - "Explicit approval to record bounded residual uncertainty in the session registry.", - workspace_path: - "Approved local path of the persistent investigation workspace.", -}; - -const fallbackPropertyDescription = (property: string): string => { - const explicit = PROPERTY_DESCRIPTIONS[property]; - if (explicit !== undefined) return explicit; - const words = property.replaceAll("_", " "); - if (property.endsWith("_approved")) - return `Explicit operator approval for ${words.slice(0, -9)}.`; - if (property.endsWith("_offset")) - return `Zero-based index of the first ${words.slice(0, -7)} to return.`; - if (property.endsWith("_limit")) - return `Maximum number of ${words.slice(0, -6)} entries to return.`; - if (property.startsWith("max_")) - return `Maximum permitted ${words.slice(4)} for this operation.`; - if (property.startsWith("include_")) - return `Whether to include ${words.slice(8)} in the result.`; - if (property.startsWith("expected_")) - return `Expected ${words.slice(9)} used to reject stale or mismatched input.`; - if (property.endsWith("_sha256")) - return `Exact SHA-256 digest of ${words.slice(0, -7)}.`; - if (property.endsWith("_evidence_id")) - return `Exact Evidence v2 identifier for the ${words.slice(0, -12)} observation.`; - if (property.endsWith("_evidence_ids")) - return `Ordered Evidence v2 identifiers for the ${words.slice(0, -13)} observations.`; - if (property.endsWith("_path")) - return `Local filesystem path for ${words.slice(0, -5)}.`; - if (property.endsWith("_uri")) - return `Canonical URI for ${words.slice(0, -4)}.`; - if (property.endsWith("_bytes")) - return `Bounded byte count for ${words.slice(0, -6)}.`; - if (property.endsWith("_root") || property.endsWith("_roots")) - return `Approved canonical filesystem ${words}.`; - if (property.startsWith("is_") || property.startsWith("has_")) - return `Whether ${words}.`; - return `Value for ${words}.`; -}; - -const isObject = (value: unknown): value is Readonly> => - typeof value === "object" && value !== null && !Array.isArray(value); diff --git a/src/server/toolResult.ts b/src/server/toolResult.ts index 58182a135..b59198051 100644 --- a/src/server/toolResult.ts +++ b/src/server/toolResult.ts @@ -1,13 +1,9 @@ import type { CallToolResult } from "@modelcontextprotocol/server"; -import { - AnalysisOutputError, - projectAnalysisError, - type AnalysisError, -} from "../domain/errors.js"; -import type { Result } from "../domain/result.js"; -import type { JsonValue } from "../domain/jsonValue.js"; import type { ToolContract } from "../contracts/toolContracts.js"; +import { projectAnalysisError, type AnalysisError } from "../domain/errors.js"; +import type { JsonValue } from "../domain/jsonValue.js"; +import type { Result } from "../domain/result.js"; interface ToolResultOptions { readonly evidenceResourcesAvailable?: boolean; @@ -57,34 +53,13 @@ const successResult = ( const candidate = compactEvidence(value, options.evidenceResultProjection) ?? (contract.kind === "session" ? { result: value } : value); - const parsed = contract.outputSchema.safeParse(candidate); - if (!parsed.success) { - const structuredContent = { - error: projectAnalysisError( - new AnalysisOutputError( - contract.name, - "output does not match the tool contract", - ), - ), - }; - return { - content: [ - { - type: "text", - text: JSON.stringify(structuredContent), - }, - ], - structuredContent, - isError: true, - }; - } return { content: [ { type: "text", text: JSON.stringify( options.evidenceTextProjection === undefined - ? parsed.data + ? candidate : (compactEvidence(value, options.evidenceTextProjection) ?? options.evidenceTextProjection), ), diff --git a/tests/acceptance/applications/applicationReplayMcp.test.ts b/tests/acceptance/applications/applicationReplayMcp.test.ts index 03e1e95f6..86e2e10ce 100644 --- a/tests/acceptance/applications/applicationReplayMcp.test.ts +++ b/tests/acceptance/applications/applicationReplayMcp.test.ts @@ -6,6 +6,7 @@ import { describe, expect, it } from "vitest"; import { composeBinarySessionFromFactory } from "../../../src/application/BinarySessionComposition.js"; import type { BinarySession } from "../../../src/application/BinarySession.js"; +import type { EnabledJavaScriptReplayPolicy } from "../../../src/application/JavaScriptReplayPlanning.js"; import { PermissionAuthority } from "../../../src/application/PermissionAuthority.js"; import { controlledReplayOutputSchema } from "../../../src/domain/javascriptReplay.js"; import { nodeCharacterizationPreparationOutputSchema } from "../../../src/domain/nodeRuntimeCharacterization.js"; @@ -13,9 +14,9 @@ import { createPermissionPolicy } from "../../../src/domain/permissionPolicy.js" import { createServer } from "../../../src/server/createServer.js"; import { observed } from "../../fixtures/analysisExecution.js"; -function createReplayPolicy(root: string) { +function createReplayPolicy(root: string): EnabledJavaScriptReplayPolicy { return { - enabled: true, + status: "enabled", roots: [root], nodePath: process.execPath, bubblewrapPath: process.execPath, @@ -64,7 +65,7 @@ function createReplayScenario(root: string) { })); const server = createServer(session, session, { permissionAuthority: createReplayAuthority(policy), - javascriptReplayPolicy: policy, + javascriptReplayPolicy: () => policy, javascriptReplayHost: { readSource: async (path) => ({ canonicalPath: await realpath(path), @@ -134,7 +135,6 @@ function createReplayInput(root: string) { entry_export: "default", }, cases: [{ case_id: "heading", arguments: ["# Title"] }], - approved: false, }; } @@ -210,7 +210,6 @@ async function createCharacterizationInput(root: string) { entry_export: "selected", }, cases: [{ case_id: "heading", arguments: ["# Title"] }], - approved: false, }, }; } diff --git a/tests/acceptance/applications/runtime.test.ts b/tests/acceptance/applications/runtime.test.ts index 0ecde8adc..46d9efbf2 100644 --- a/tests/acceptance/applications/runtime.test.ts +++ b/tests/acceptance/applications/runtime.test.ts @@ -6,6 +6,7 @@ import { describe, expect, it } from "vitest"; import { z } from "zod"; import { CATALOG_IDENTITY } from "../../../src/catalogIdentity.js"; +import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; const mainPath = fileURLToPath( new URL("../../../dist/main.js", import.meta.url), @@ -31,9 +32,7 @@ const expectAvailableToolInventory = async (client: Client): Promise => { .parse(status.structuredContent).result.tool_availability; expect(availability).toHaveLength(CATALOG_IDENTITY.counts.mcp_tools); expect(new Set(listed.tools.map(({ name }) => name))).toEqual( - new Set( - availability.filter(({ available }) => available).map(({ name }) => name), - ), + new Set(TOOL_CONTRACTS.map(({ name }) => name)), ); }; diff --git a/tests/boundary/browser/cdpBrowserProvider.document_script.test.ts b/tests/boundary/browser/cdpBrowserProvider.document_script.test.ts index 803a24da4..0fd9f6225 100644 --- a/tests/boundary/browser/cdpBrowserProvider.document_script.test.ts +++ b/tests/boundary/browser/cdpBrowserProvider.document_script.test.ts @@ -53,6 +53,7 @@ describeBrowser("CdpBrowserProvider: document script 1", () => { approved: true, observation_ms: 0, include_script_sources: true, + source_capture_approved: true, }), ); @@ -355,6 +356,7 @@ describeBrowser("CdpBrowserProvider: document script 3", () => { approved: true, observation_ms: 0, include_script_sources: true, + source_capture_approved: true, limits: { max_frames: 1, max_dom_nodes: 1, diff --git a/tests/boundary/filesystem/safeOutputTree.test.ts b/tests/boundary/filesystem/safeOutputTree.test.ts index 33afa6e2f..91f04ae56 100644 --- a/tests/boundary/filesystem/safeOutputTree.test.ts +++ b/tests/boundary/filesystem/safeOutputTree.test.ts @@ -31,8 +31,7 @@ describe("safe artifact output tree", () => { ), ).rejects.toThrow(/disagrees/u); expect(await tree.rollback()).toMatchObject({ - attempted: true, - verified: true, + status: "complete", residualPaths: [], }); await expect(access(output)).rejects.toThrow(); @@ -52,7 +51,7 @@ describe("safe artifact output tree", () => { ); await tree.commit(); - expect(await tree.rollback()).toMatchObject({ attempted: false }); + expect(await tree.rollback()).toEqual({ status: "not-required" }); expect(await readFile(join(output, "file.txt"), "utf8")).toBe( "visible before seal", ); @@ -62,9 +61,13 @@ describe("safe artifact output tree", () => { const parent = await createTestTempDirectory("rea-safe-output-"); const tree = await SafeOutputTree.create(join(parent, "published"), LIMITS); const cleanup = await tree.rollback(); - (cleanup.residualPaths as string[]).push("/forged/path"); + if (cleanup.status !== "complete") throw new Error("expected cleanup"); + (cleanup.residualPaths as unknown as string[]).push("/forged/path"); - expect(tree.cleanup.residualPaths).toEqual([]); - expect((await tree.rollback()).residualPaths).toEqual([]); + expect(tree.cleanup).toEqual({ status: "complete", residualPaths: [] }); + expect(await tree.rollback()).toEqual({ + status: "complete", + residualPaths: [], + }); }); }); diff --git a/tests/boundary/mcp/browserMcp.test.ts b/tests/boundary/mcp/browserMcp.test.ts index 6d1dfa299..93db45280 100644 --- a/tests/boundary/mcp/browserMcp.test.ts +++ b/tests/boundary/mcp/browserMcp.test.ts @@ -38,7 +38,7 @@ it( const connected = await connectBrowser(browser); const tools = await connected.client.listTools(); - expect(tools.tools.length).toBeLessThan(TOOL_CONTRACTS.length); + expect(tools.tools).toHaveLength(TOOL_CONTRACTS.length); expect(tools.tools.map(({ name }) => name)).toEqual( expect.arrayContaining([ "list_browser_targets", @@ -80,6 +80,17 @@ it( targets: { items: [{ target_id: "allowed-page" }] }, }, }); + const unapprovedSourceCapture = await connected.client.callTool({ + name: "inspect_web_page", + arguments: { + cdp_endpoint: browser.endpoint, + allowed_origins: [browser.allowedOrigin], + target_id: "allowed-page", + approved: true, + include_script_sources: true, + }, + }); + expect(unapprovedSourceCapture.isError).toBe(true); const inspected = await connected.client.callTool({ name: "inspect_web_page", arguments: { @@ -95,6 +106,7 @@ it( include_websocket_shapes: true, websocket_shape_approved: true, include_script_sources: true, + source_capture_approved: true, }, }); expect(inspected.isError).not.toBe(true); @@ -205,6 +217,11 @@ const verifySessionAndComparisonTools = async ( expect(compared.structuredContent).toMatchObject({ result: { overall_status: "unknown" }, }); + const incompleteComparison = await connected.client.callTool({ + name: "compare_web_captures", + arguments: { before: { inspection: capture } }, + }); + expect(incompleteComparison.isError).toBe(true); const screenshot = await connected.client.callTool({ name: "capture_web_screenshot", arguments: { diff --git a/tests/boundary/mcp/electronMcp.test.ts b/tests/boundary/mcp/electronMcp.test.ts index 37bc27e60..72fbadac9 100644 --- a/tests/boundary/mcp/electronMcp.test.ts +++ b/tests/boundary/mcp/electronMcp.test.ts @@ -439,7 +439,7 @@ it("reports an unconfigured investigation ceiling before static analysis", async (await client.listTools()).tools.some( ({ name }) => name === "analyze_javascript_application", ), - ).toBe(false); + ).toBe(true); }); const evidenceFor = (session: BinarySession, value: unknown) => { diff --git a/tests/boundary/mcp/enhancedTools.05-stops-trace-feature-at-its.test.ts b/tests/boundary/mcp/enhancedTools.05-stops-trace-feature-at-its.test.ts index 09986feba..763bfaef3 100644 --- a/tests/boundary/mcp/enhancedTools.05-stops-trace-feature-at-its.test.ts +++ b/tests/boundary/mcp/enhancedTools.05-stops-trace-feature-at-its.test.ts @@ -219,7 +219,7 @@ describe("enhanced MCP tools", () => { expect(JSON.stringify(result)).toContain("operation budget"); }); - it("returns correction-only structured validation issues", async () => { + it("lets the SDK reject misspelled and out-of-range inputs", async () => { const client = await connect(); const valid = await client.callTool({ name: "trace_feature", @@ -230,18 +230,8 @@ describe("enhanced MCP tools", () => { name: "trace_feature", arguments: { query: "needle", max_operatons: 1 }, }); - expect(misspelled).toMatchObject({ - isError: true, - structuredContent: { - error: { - code: "invalid_request", - retryable: true, - details: { - issues: [{ path: ["max_operatons"], reason: "unknown_argument" }], - }, - }, - }, - }); + expect(misspelled.isError).toBe(true); + expect(misspelled.structuredContent).toBeUndefined(); const nestedMisspelled = await client.callTool({ name: "analyze_function", arguments: { @@ -249,42 +239,14 @@ describe("enhanced MCP tools", () => { collection_offset: { commentz: 1 }, }, }); - expect(nestedMisspelled).toMatchObject({ - isError: true, - structuredContent: { - error: { - details: { - issues: [ - { - path: ["collection_offset", "commentz"], - reason: "unknown_argument", - }, - ], - }, - }, - }, - }); + expect(nestedMisspelled.isError).toBe(true); + expect(nestedMisspelled.structuredContent).toBeUndefined(); const bounded = await client.callTool({ name: "trace_feature", arguments: { query: "needle", max_operations: 101 }, }); - expect(bounded.structuredContent).toMatchObject({ - error: { - details: { - issues: [ - { - path: ["max_operations"], - reason: "out_of_range", - maximum: 100, - }, - ], - }, - }, - }); - expect(bounded.content[0]).toEqual({ - type: "text", - text: JSON.stringify(bounded.structuredContent), - }); + expect(bounded.isError).toBe(true); + expect(bounded.structuredContent).toBeUndefined(); }); it("returns a typed tool error for malformed Hopper boundary values", async () => { diff --git a/tests/boundary/mcp/ghidraRoutingMcp.test.ts b/tests/boundary/mcp/ghidraRoutingMcp.test.ts index a71bda29c..4f8b2e8e7 100644 --- a/tests/boundary/mcp/ghidraRoutingMcp.test.ts +++ b/tests/boundary/mcp/ghidraRoutingMcp.test.ts @@ -22,7 +22,7 @@ describe("Ghidra MCP capability routing", () => { const availableNames = (await mcp.listTools()).tools.map( ({ name }) => name, ); - expect(availableNames).not.toContain("set_comment"); + expect(availableNames).toContain("set_comment"); expect(calls).not.toContain("set_comment"); const status = await mcp.callTool({ diff --git a/tests/boundary/mcp/mainErrors.test.ts b/tests/boundary/mcp/mainErrors.test.ts index 574b64e96..5d17f68d6 100644 --- a/tests/boundary/mcp/mainErrors.test.ts +++ b/tests/boundary/mcp/mainErrors.test.ts @@ -14,12 +14,14 @@ const dependencies = ({ shutdown, exitCodes, shutdownUnregistrations = [], + loadOptionalProviders, }: { readonly serve: RuntimeDependencies["serve"]; readonly output: string[]; readonly shutdown: Array<() => void>; readonly exitCodes: number[]; readonly shutdownUnregistrations?: string[]; + readonly loadOptionalProviders?: RuntimeDependencies["loadOptionalProviders"]; }): RuntimeDependencies => ({ env: {}, serve, @@ -29,6 +31,7 @@ const dependencies = ({ shutdown.push(handler); return () => shutdownUnregistrations.push("shutdown"); }, + ...(loadOptionalProviders === undefined ? {} : { loadOptionalProviders }), }); describe("MCP runtime errors", () => { @@ -121,6 +124,28 @@ describe("MCP runtime errors", () => { ]); }); + it("starts the core transport when optional providers fail to load", async () => { + const output: string[] = []; + let serveCalls = 0; + expect( + await run( + dependencies({ + serve: () => { + serveCalls += 1; + return { close: () => Promise.resolve() }; + }, + output, + shutdown: [], + exitCodes: [], + loadOptionalProviders: () => + Promise.reject(new Error("synthetic optional import failure")), + }), + ), + ).toBe(0); + expect(serveCalls).toBe(1); + expect(output).toEqual([]); + }); + it("reports shutdown failure and sets a failing exit code", async () => { const output: string[] = []; const shutdown: Array<() => void> = []; diff --git a/tests/boundary/mcp/mainReload.test.ts b/tests/boundary/mcp/mainReload.test.ts index e624e5b75..fa6cf96a2 100644 --- a/tests/boundary/mcp/mainReload.test.ts +++ b/tests/boundary/mcp/mainReload.test.ts @@ -53,23 +53,29 @@ describe("runtime permission reload", () => { runtime.reload(); await validReadStarted.promise; - expect(runtime.notifications()).toBe(0); - expect(runtime.options.processPolicy?.enabled).toBe(false); + expect(runtime.options.processPolicy?.().status).toBe("disabled"); expect(runtime.options.evidenceFilePolicy?.roots).toEqual([ fixture.oldRoot, ]); expect(runtime.options.artifactIntegrityContinueEnabled?.()).toBe(false); + expectOptionalPolicies(runtime.options, { status: "disabled" }); expect(await canRead(runtime.authority, fixture.oldRoot)).toBe(true); expect(await canRead(runtime.authority, fixture.newRoot)).toBe(false); releaseValidRead.resolve(); - await runtime.notificationCount(1); + await expect + .poll(() => canRead(runtime.authority, fixture.newRoot)) + .toBe(true); - expect(runtime.options.processPolicy?.enabled).toBe(true); + expect(runtime.options.processPolicy?.().status).toBe("enabled"); expect(runtime.options.evidenceFilePolicy?.roots).toEqual([ fixture.newRoot, ]); expect(runtime.options.artifactIntegrityContinueEnabled?.()).toBe(true); + expectOptionalPolicies(runtime.options, { + status: "enabled", + root: fixture.newRoot, + }); expect(await canRead(runtime.authority, fixture.oldRoot)).toBe(false); expect(await canRead(runtime.authority, fixture.newRoot)).toBe(true); }); @@ -102,13 +108,16 @@ describe("runtime permission reload", () => { expect(secondStarted).toBe(false); releaseFirstRead.resolve(); await secondReadStarted.promise; - await runtime.notificationCount(2); + await expect + .poll(() => canRead(runtime.authority, fixture.latestRoot)) + .toBe(true); - expect(runtime.options.processPolicy?.enabled).toBe(false); + expect(runtime.options.processPolicy?.().status).toBe("disabled"); expect(runtime.options.evidenceFilePolicy?.roots).toEqual([ fixture.latestRoot, ]); expect(runtime.options.artifactIntegrityContinueEnabled?.()).toBe(false); + expectOptionalPolicies(runtime.options, { status: "disabled" }); expect(await canRead(runtime.authority, fixture.newRoot)).toBe(false); expect(await canRead(runtime.authority, fixture.latestRoot)).toBe(true); }); @@ -125,19 +134,57 @@ describe("runtime permission reload", () => { configure(fixture.env, fixture.newRoot, true); runtime.reload(); runtime.reload(); - await runtime.notificationCount(1); + await expect.poll(() => reads).toBe(2); + await expect + .poll(() => canRead(runtime.authority, fixture.newRoot)) + .toBe(true); expect(reads).toBe(2); - expect(runtime.options.processPolicy?.enabled).toBe(true); + expect(runtime.options.processPolicy?.().status).toBe("enabled"); expect(runtime.options.evidenceFilePolicy?.roots).toEqual([ fixture.newRoot, ]); expect(runtime.options.artifactIntegrityContinueEnabled?.()).toBe(true); + expectOptionalPolicies(runtime.options, { + status: "enabled", + root: fixture.newRoot, + }); expect(await canRead(runtime.authority, fixture.oldRoot)).toBe(false); expect(await canRead(runtime.authority, fixture.newRoot)).toBe(true); }); }); +type ExpectedOptionalPolicies = + | { readonly status: "disabled" } + | { readonly status: "enabled"; readonly root: string }; + +const expectOptionalPolicies = ( + options: CreateServerOptions, + expected: ExpectedOptionalPolicies, +): void => { + const enabled = expected.status === "enabled"; + expect(options.managedRuntimePolicy?.()).toEqual( + enabled + ? { + status: "enabled", + roots: [expected.root], + executablePath: process.execPath, + } + : { status: "disabled" }, + ); + expect(options.javascriptReplayPolicy?.()).toMatchObject( + enabled + ? { status: "enabled", roots: [expected.root] } + : { status: "disabled" }, + ); + expect(options.availabilityPolicy?.()).toMatchObject({ + browserObservationEnabled: enabled, + electronObservationEnabled: enabled, + v8InspectorObservationEnabled: enabled, + javascriptReplayEnabled: enabled, + }); +}; + const reloadFixture = async () => { const directory = await createTestTempDirectory("rea-main-reload-"); directories.push(directory); @@ -169,6 +216,33 @@ const configure = ( env.REA_PROCESS_EXECUTABLE_ROOTS_JSON = JSON.stringify([root]); env.REA_PROCESS_WORKING_ROOTS_JSON = JSON.stringify([root]); env.REA_ARTIFACT_INTEGRITY_CONTINUE_ENABLED = String(enabled); + env.REA_MANAGED_RUNTIME_ENABLED = String(enabled); + env.REA_MANAGED_RUNTIME_ROOTS_JSON = JSON.stringify([root]); + env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH = process.execPath; + env.REA_JAVASCRIPT_REPLAY_ENABLED = String(enabled); + env.REA_JAVASCRIPT_REPLAY_ROOTS_JSON = JSON.stringify([root]); + env.REA_JAVASCRIPT_REPLAY_NODE_PATH = process.execPath; + env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH = process.execPath; + env.REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH = process.execPath; + env.REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH = process.execPath; + env.REA_JAVASCRIPT_REPLAY_SHELL_PATH = process.execPath; + env.REA_BROWSER_OBSERVE_ENABLED = String(enabled); + env.REA_BROWSER_CDP_ENDPOINTS_JSON = JSON.stringify([ + "http://127.0.0.1:9222", + ]); + env.REA_BROWSER_ALLOWED_ORIGINS_JSON = JSON.stringify([ + "https://example.test", + ]); + env.REA_ELECTRON_OBSERVE_ENABLED = String(enabled); + env.REA_ELECTRON_CDP_ENDPOINTS_JSON = JSON.stringify([ + "http://127.0.0.1:9223", + ]); + env.REA_ELECTRON_FILE_ROOTS_JSON = JSON.stringify([root]); + env.REA_V8_INSPECTOR_OBSERVE_ENABLED = String(enabled); + env.REA_V8_INSPECTOR_ENDPOINTS_JSON = JSON.stringify([ + "http://127.0.0.1:9224", + ]); + env.REA_V8_INSPECTOR_FILE_ROOTS_JSON = JSON.stringify([root]); }; const startRuntime = async ( @@ -177,9 +251,6 @@ const startRuntime = async ( ) => { let reload: (() => void) | undefined; let options: CreateServerOptions | undefined; - let notificationCount = 0; - let notification = deferred(); - const waiters = new Map>>(); const result = await run({ env, serve: (factory) => { @@ -196,14 +267,7 @@ const startRuntime = async ( readProjectPermissionStore: readStore, createServer: (analysis, session, received) => { options = received; - const server = createServer(analysis, session, received); - server.sendToolListChanged = () => { - notificationCount += 1; - notification.resolve(undefined); - notification = deferred(); - waiters.get(notificationCount)?.resolve(undefined); - }; - return server; + return createServer(analysis, session, received); }, }); expect(result).toBe(0); @@ -215,13 +279,6 @@ const startRuntime = async ( reload, options: capturedOptions, authority, - notifications: () => notificationCount, - notificationCount: (count: number) => { - if (notificationCount >= count) return Promise.resolve(); - const waiter = deferred(); - waiters.set(count, waiter); - return waiter.promise; - }, }; }; diff --git a/tests/boundary/mcp/managedMcp.test.ts b/tests/boundary/mcp/managedMcp.test.ts index 9c0846157..724627199 100644 --- a/tests/boundary/mcp/managedMcp.test.ts +++ b/tests/boundary/mcp/managedMcp.test.ts @@ -55,11 +55,11 @@ it("opens a managed PE and executes the managed static provider through MCP", as if (!authority.ok) throw authority.error; const server = createServer(session, session, { permissionAuthority: authority.value, - managedRuntimePolicy: { - enabled: true, + managedRuntimePolicy: () => ({ + status: "enabled", roots: [directory], executablePath: runtimePath, - }, + }), availabilityPolicy: () => ({ processCaptureEnabled: false, evidenceFileRoots: 0, diff --git a/tests/boundary/mcp/mcpDoctor.test.ts b/tests/boundary/mcp/mcpDoctor.test.ts index 6af366f8f..4d725c6ab 100644 --- a/tests/boundary/mcp/mcpDoctor.test.ts +++ b/tests/boundary/mcp/mcpDoctor.test.ts @@ -46,7 +46,7 @@ describe("production MCP doctor", () => { expect(result.inventory?.tools.expected).toBe( result.inventory?.tools.observed, ); - expect(result.inventory?.tools.expected).toBeLessThan( + expect(result.inventory?.tools.expected).toBe( CATALOG_IDENTITY.counts.mcp_tools, ); }, 30_000); diff --git a/tests/boundary/mcp/processCaptureElicitation.test.ts b/tests/boundary/mcp/processCaptureElicitation.test.ts index bdcae68e7..25a4c3674 100644 --- a/tests/boundary/mcp/processCaptureElicitation.test.ts +++ b/tests/boundary/mcp/processCaptureElicitation.test.ts @@ -34,13 +34,13 @@ describe("process-capture MCP elicitation handshake", () => { createServer(session, session, { logger: silentLogger, permissionAuthority: authority, - processPolicy: { - enabled: true, + processPolicy: () => ({ + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [root], allowedEnvironment: [], - allowExternalNetwork: true, - }, + networkAccess: "external", + }), }); const client = new Client( { name: "process-elicit", version: "1" }, @@ -70,6 +70,29 @@ describe("process-capture MCP elicitation handshake", () => { }); try { await client.connect(clientTransport); + const identity = await client.readResource({ + uri: "rea://server/identity", + }); + const identityContent = identity.contents[0]; + if (identityContent === undefined || !("text" in identityContent)) + throw new Error("missing modern server identity resource"); + expect(JSON.parse(identityContent.text)).toMatchObject({ + client: { name: "process-elicit", version: "1" }, + }); + const status = await client.callTool({ + name: "binary_session", + arguments: { detail: "full" }, + }); + expect(status.structuredContent).toMatchObject({ + result: { + client_features: { + elicitation_form: true, + elicitation_url: false, + roots: false, + sampling: false, + }, + }, + }); const captured = await client.callTool({ name: "capture_process_scenario", arguments: { diff --git a/tests/boundary/mcp/processCaptureElicitationPart2.test.ts b/tests/boundary/mcp/processCaptureElicitationPart2.test.ts index 989051ee3..9b0d8da39 100644 --- a/tests/boundary/mcp/processCaptureElicitationPart2.test.ts +++ b/tests/boundary/mcp/processCaptureElicitationPart2.test.ts @@ -56,13 +56,13 @@ describe("process-capture MCP elicitation handshake", () => { createServer(session, session, { logger: silentLogger, permissionAuthority: authority, - processPolicy: { - enabled: true, + processPolicy: () => ({ + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [root], allowedEnvironment: [], - allowExternalNetwork: true, - }, + networkAccess: "external", + }), }), { transport: serverTransport, legacy: "reject" }, ); diff --git a/tests/boundary/mcp/replayMachineMcp.test.ts b/tests/boundary/mcp/replayMachineMcp.test.ts index b6f13ca47..20ca10797 100644 --- a/tests/boundary/mcp/replayMachineMcp.test.ts +++ b/tests/boundary/mcp/replayMachineMcp.test.ts @@ -59,10 +59,8 @@ describe("direct replay machine MCP parity", () => { ], }, }); - expect(invalid).toMatchObject({ - isError: true, - structuredContent: { error: { code: "invalid_request" } }, - }); + expect(invalid.isError).toBe(true); + expect(invalid.structuredContent).toBeUndefined(); expect(JSON.stringify(invalid)).not.toContain("private-request-body"); } finally { await client.close(); diff --git a/tests/boundary/mcp/serverIdentity.test.ts b/tests/boundary/mcp/serverIdentity.test.ts index 2e4c21af5..773fcecd6 100644 --- a/tests/boundary/mcp/serverIdentity.test.ts +++ b/tests/boundary/mcp/serverIdentity.test.ts @@ -59,6 +59,41 @@ const availabilityProvider = (): AnalysisProvider => { }; }; +const statusCapability = ( + operation: string, + availability: + | { readonly available: true } + | { + readonly available: false; + readonly availability_code: "unsupported_host"; + readonly reason: string; + } = { available: true }, +) => ({ + operation, + input_contract_version: 1, + output_contract_version: 1, + pagination: "none" as const, + exhaustive: true, + effects: { + mutates_artifact: false, + launches_process: false, + may_show_ui: false, + may_access_network: false, + may_write_filesystem: false, + changes_permissions: false, + requires_root: false, + }, + limits: { + max_results: null, + max_payload_bytes: null, + timeout_ms: null, + }, + limitations: [], + ...(availability.available + ? { available: true as const, reason: null, availability_code: null } + : availability), +}); + describe("server and catalog identity", () => { it("derives package and SDK versions from canonical package metadata", async () => { const packageJson = JSON.parse(await readFile("package.json", "utf8")); @@ -132,7 +167,7 @@ describe("server and catalog identity", () => { "list_documents", "list_procedures", "list_strings", - ].map((operation) => ({ operation, available: true, reason: null })), + ].map((operation) => statusCapability(operation)), }, policy, ); @@ -144,9 +179,7 @@ describe("server and catalog identity", () => { open: true, kind: "artifact", format: "javascript", - capabilities: [ - { operation: "current_address", available: true, reason: null }, - ], + capabilities: [statusCapability("current_address")], }, policy, ); @@ -163,12 +196,11 @@ describe("server and catalog identity", () => { kind: "executable", format: "elf", capabilities: [ - { - operation: "inspect_macho", + statusCapability("inspect_macho", { available: false, availability_code: "unsupported_host", reason: "Native macOS utilities require macOS.", - }, + }), ], }, policy, @@ -184,7 +216,7 @@ describe("server and catalog identity", () => { }); describe("live server identity over MCP", () => { - it("exposes live identity, labeled inventories, availability, and list changes", async () => { + it("exposes live identity, a stable catalog, and changing availability", async () => { const session = composeBinarySessionFromProvider(availabilityProvider()); const server = createServer(session, session); const client = new Client( @@ -209,12 +241,12 @@ describe("live server identity over MCP", () => { await assertCapabilityViews(client); expect( (await client.listTools()).tools.map(({ name }) => name), - ).not.toContain("current_address"); + ).toContain("current_address"); await client.callTool({ name: "open_binary", arguments: { path: process.execPath }, }); - await expect.poll(() => toolListChanges).toBeGreaterThan(0); + expect(toolListChanges).toBe(0); expect( (await client.listTools()).tools.map(({ name }) => name), ).toContain("current_address"); @@ -251,7 +283,7 @@ const assertLiveIdentity = async (client: Client): Promise => { server: SDK_IDENTITY.server, client_test: PACKAGE_METADATA.clientSdkVersion, }, - client: { name: "identity-test", version: "9" }, + client: null, alignment: { state: "unknown" }, }); }; @@ -286,7 +318,7 @@ const assertSessionIdentity = async (client: Client): Promise => { required: [], optional: ["elicitation_form"], missing_required: [], - missing_optional: [], + missing_optional: ["elicitation_form"], }, }), expect.objectContaining({ @@ -304,7 +336,7 @@ const assertSessionIdentity = async (client: Client): Promise => { }), ]), client_features: { - elicitation_form: true, + elicitation_form: false, elicitation_url: false, roots: false, sampling: false, @@ -354,7 +386,7 @@ const assertCapabilityViews = async (client: Client): Promise => { has_more: true, }, client_features: { - elicitation_form: true, + elicitation_form: false, elicitation_url: false, roots: false, sampling: false, diff --git a/tests/boundary/mcp/serverLifecycleMcp.test.ts b/tests/boundary/mcp/serverLifecycleMcp.test.ts index fc4633be2..ddd10652d 100644 --- a/tests/boundary/mcp/serverLifecycleMcp.test.ts +++ b/tests/boundary/mcp/serverLifecycleMcp.test.ts @@ -85,6 +85,31 @@ it("projects remote failures without provider or bridge details", async () => { expect(text(result)).toBe(JSON.stringify(result.structuredContent)); }); +it("lets the SDK validate a tool call before invoking its handler", async () => { + let invocations = 0; + const client = await connect({ + execute: () => { + invocations += 1; + return Promise.resolve(ok([])); + }, + }); + + const malformed = await client.callTool({ + name: "procedure_info", + arguments: {}, + }); + + expect(malformed.isError).toBe(true); + expect(invocations).toBe(0); + + const valid = await client.callTool({ + name: "list_documents", + arguments: {}, + }); + expect(valid.isError).not.toBe(true); + expect(invocations).toBe(1); +}); + it("handles concurrent tool calls without corruption", async () => { const invocations: string[] = []; const client = await connect({ diff --git a/tests/boundary/mcp/serverWorkflowMcp.test.ts b/tests/boundary/mcp/serverWorkflowMcp.test.ts index 6b599647c..52ba3ea90 100644 --- a/tests/boundary/mcp/serverWorkflowMcp.test.ts +++ b/tests/boundary/mcp/serverWorkflowMcp.test.ts @@ -43,86 +43,6 @@ const structured = (result: CallToolResult): Record => { return Object.fromEntries(Object.entries(result.structuredContent)); }; -const objectEntries = (value: unknown): readonly [string, unknown][] => - typeof value === "object" && value !== null && !Array.isArray(value) - ? Object.entries(value) - : []; - -const referencedSchema = (schema: unknown, root: unknown): unknown => { - const object = Object.fromEntries(objectEntries(schema)); - const reference = object.$ref; - if (typeof reference !== "string" || !reference.startsWith("#/$defs/")) - return schema; - return Object.fromEntries(objectEntries(root)).$defs instanceof Object - ? Object.fromEntries( - objectEntries(Object.fromEntries(objectEntries(root)).$defs), - )[reference.slice(8)] - : schema; -}; - -const assertDescribedStrictObjects = ( - schema: unknown, - root = schema, - path = "$", - strictObject = true, -): void => { - for (const [key, value] of objectEntries(schema)) { - if (key === "examples") continue; - if (key === "properties") { - const properties = objectEntries(value); - for (const [property, propertySchema] of properties) { - const resolved = referencedSchema(propertySchema, root); - const propertyObject = Object.fromEntries( - objectEntries(propertySchema), - ); - expect( - propertyObject.description ?? - Object.fromEntries(objectEntries(resolved)).description, - `${path}.properties.${property}`, - ).toEqual(expect.any(String)); - assertDescribedStrictObjects( - propertySchema, - root, - `${path}.properties.${property}`, - ); - } - if (strictObject) - expect( - Object.fromEntries(objectEntries(schema)).additionalProperties, - ).toBe(false); - continue; - } - assertDescribedStrictObjects( - value, - root, - `${path}.${key}`, - strictObject && - key !== "allOf" && - key !== "contains" && - key !== "if" && - key !== "then", - ); - } - if (Array.isArray(schema)) - for (const [index, value] of schema.entries()) - assertDescribedStrictObjects( - value, - root, - `${path}[${String(index)}]`, - strictObject, - ); -}; - -const assertDescribedRootObject = (schema: unknown, path: string): void => { - const object = Object.fromEntries(objectEntries(schema)); - expect(object.additionalProperties, path).toBe(false); - for (const [property, propertySchema] of objectEntries(object.properties)) - expect( - Object.fromEntries(objectEntries(propertySchema)).description, - `${path}.properties.${property}`, - ).toEqual(expect.any(String)); -}; - it("executes a realistic workflow: list methods, decompile selected, get xrefs", async () => { const client = await connect({ execute: (name, args) => { @@ -213,8 +133,8 @@ it("advertises the complete currently available inventory with a session", async expect(names).toContain("open_binary"); expect(names).toContain("close_binary"); expect(names).toContain("binary_session"); - expect(names).not.toContain("binary_overview"); - expect(names).not.toContain("batch_decompile"); + expect(names).toContain("binary_overview"); + expect(names).toContain("batch_decompile"); const status = structured( await client.callTool({ name: "binary_session", @@ -234,7 +154,11 @@ it("advertises the complete currently available inventory with a session", async .result.tool_availability.filter((item) => item.available) .map(({ name }) => name), ); - expect(new Set(names)).toEqual(available); + expect(new Set(names)).toEqual( + new Set(TOOL_CONTRACTS.map(({ name }) => name)), + ); + expect(available).not.toContain("binary_overview"); + expect(available).not.toContain("batch_decompile"); const contracts = new Map( TOOL_CONTRACTS.map((contract) => [contract.name, contract]), @@ -245,8 +169,7 @@ it("advertises the complete currently available inventory with a session", async expect(tool.title, tool.name).toBe(contract?.title); expect(tool.description, tool.name).toBe(contract?.description); expect(tool.annotations, tool.name).toEqual(contract?.annotations); + expect(tool.inputSchema, tool.name).toBeDefined(); expect(tool.outputSchema, tool.name).toBeDefined(); - assertDescribedStrictObjects(tool.inputSchema, tool.inputSchema, tool.name); - assertDescribedRootObject(tool.outputSchema, `${tool.name}.output`); } }, 10_000); diff --git a/tests/boundary/mcp/sessionMcp.test.ts b/tests/boundary/mcp/sessionMcp.test.ts index e8fbf96e9..a7761a268 100644 --- a/tests/boundary/mcp/sessionMcp.test.ts +++ b/tests/boundary/mcp/sessionMcp.test.ts @@ -130,8 +130,8 @@ describe("target-free MCP workflow", () => { ); expect(beforeNames).toContain("open_binary"); expect(beforeNames).toContain("binary_session"); - expect(beforeNames).not.toContain("current_document"); - expect(beforeNames).not.toContain("capture_process_scenario"); + expect(beforeNames).toContain("current_document"); + expect(beforeNames).toContain("capture_process_scenario"); expect( (await mcp.callTool({ name: "open_binary", arguments: { path: first } })) .isError, @@ -235,13 +235,13 @@ describe("process residuals over MCP", () => { ); const server = createServer(session, session, { logger: silentLogger, - processPolicy: { - enabled: true, + processPolicy: () => ({ + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [dirname(processFixture)], allowedEnvironment: [], - allowExternalNetwork: true, - }, + networkAccess: "external", + }), }); const mcp = new Client({ name: "process-unknown", version: "1.0.0" }); const [clientTransport, serverTransport] = diff --git a/tests/boundary/mcp/toolRegistrationOptions.test.ts b/tests/boundary/mcp/toolRegistrationOptions.test.ts index 5426c32a2..6dc084ae4 100644 --- a/tests/boundary/mcp/toolRegistrationOptions.test.ts +++ b/tests/boundary/mcp/toolRegistrationOptions.test.ts @@ -1,68 +1,164 @@ import { describe, expect, it } from "vitest"; +import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; +import { McpServer } from "@modelcontextprotocol/server"; +import { z } from "zod"; import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; +import { GENERATED_MCP_TOOL_CATALOG } from "../../../src/generatedMcpToolCatalog.js"; import { toolRegistrationOptions } from "../../../src/server/toolRegistrationOptions.js"; describe("tool registration options", () => { - it("reuses finalized advertised schemas", () => { - const contract = TOOL_CONTRACTS[0]; - expect(contract).toBeDefined(); - if (contract === undefined) return; - - const first = toolRegistrationOptions(contract); - const second = toolRegistrationOptions(contract); - expect(first.inputSchema["~standard"].jsonSchema.input()).toBe( - second.inputSchema["~standard"].jsonSchema.output(), - ); - expect(first.outputSchema["~standard"].jsonSchema.input()).toBe( - second.outputSchema["~standard"].jsonSchema.output(), - ); + it("preserves canonical Zod parsers in the SDK schemas", () => { + for (const contract of TOOL_CONTRACTS) { + const options = toolRegistrationOptions(contract); + expect(options.inputSchema).not.toBe(contract.inputSchema); + expect( + options.inputSchema.safeParse(contract.examples[0]?.input ?? {}), + ).toEqual( + contract.inputSchema.safeParse(contract.examples[0]?.input ?? {}), + ); + expect(options.outputSchema).toBe(contract.outputSchema); + } }); - it("gives fallback parameter guidance operational meaning", () => { + it("retains the canonical parser as the SDK validation boundary", async () => { const contract = TOOL_CONTRACTS.find( ({ name }) => name === "analyze_function", ); expect(contract).toBeDefined(); if (contract === undefined) return; - const advertisedSchema = - toolRegistrationOptions(contract).inputSchema[ - "~standard" - ].jsonSchema.input(); - const properties = Object.fromEntries( - Object.entries(advertisedSchema.properties ?? {}), - ); - expect(properties.include_assembly).toMatchObject({ - description: "Whether to include assembly in the result.", - }); - expect(properties.max_instructions).toMatchObject({ - description: "Maximum permitted instructions for this operation.", - }); - expect(properties.pseudocode_offset).toMatchObject({ - description: "Zero-based index of the first pseudocode to return.", - }); + const result = await contract.inputSchema["~standard"].validate({}); + expect("issues" in result).toBe(true); }); - it("advertises validated contract examples on the MCP input schema", () => { - for (const name of [ - "record_unknown", - "run_replay_machine", - "build_reconstruction_obligation_ledger", - ]) { - const contract = TOOL_CONTRACTS.find( - (candidate) => candidate.name === name, + it("generates the checked-in catalog from the SDK wire projection", async () => { + const server = new McpServer({ name: "catalog-test", version: "0" }); + for (const contract of TOOL_CONTRACTS) + server.registerTool( + contract.name, + toolRegistrationOptions(contract), + async () => ({ + content: [{ type: "text" as const, text: "catalog-only" }], + isError: true as const, + }), ); - expect(contract).toBeDefined(); - if (contract === undefined) continue; + const client = new Client({ name: "catalog-test", version: "0" }); + const [clientTransport, serverTransport] = + InMemoryTransport.createLinkedPair(); + try { + await server.connect(serverTransport); + await client.connect(clientTransport); + const advertised = (await client.listTools()).tools.map((tool) => ({ + name: tool.name, + title: tool.title, + description: tool.description, + inputSchema: tool.inputSchema, + outputSchema: tool.outputSchema, + annotations: tool.annotations, + })); + for (const contract of TOOL_CONTRACTS) { + const tool = advertised.find(({ name }) => name === contract.name); + expect(tool?.inputSchema.examples, contract.name).toEqual( + contract.examples.map(({ input }) => input), + ); + expect( + missingPropertyDescriptions(tool?.inputSchema), + contract.name, + ).toEqual([]); + } + const analyzeFunction = advertised.find( + ({ name }) => name === "analyze_function", + ); + expect(analyzeFunction?.inputSchema.properties).toMatchObject({ + include_assembly: { + description: "Whether to include assembly in the result.", + }, + max_instructions: { + description: "Maximum permitted instructions for this operation.", + }, + pseudocode_offset: { + description: "Zero-based index of the first pseudocode to return.", + }, + }); + expect(advertised).toEqual( + GENERATED_MCP_TOOL_CATALOG.map((tool) => ({ + name: tool.name, + title: tool.title, + description: tool.description, + inputSchema: tool.inputSchema, + outputSchema: tool.outputSchema, + annotations: tool.annotations, + })), + ); + } finally { + await Promise.allSettled([client.close(), server.close()]); + } + }); - const schema = - toolRegistrationOptions(contract).inputSchema[ - "~standard" - ].jsonSchema.input(); - expect(schema.examples).toEqual( - contract.examples.map(({ input }) => input), + it("delegates output validation to the SDK boundary", async () => { + const server = new McpServer({ name: "output-test", version: "0" }); + server.registerTool( + "invalid_output", + { + inputSchema: z.object({}), + outputSchema: z.object({ value: z.string() }), + }, + async () => ({ + content: [{ type: "text", text: "invalid" }], + structuredContent: { value: 42 }, + }), + ); + const client = new Client({ name: "output-test", version: "0" }); + const [clientTransport, serverTransport] = + InMemoryTransport.createLinkedPair(); + try { + await server.connect(serverTransport); + await client.connect(clientTransport); + const result = await client.callTool({ name: "invalid_output" }); + expect(result.isError).toBe(true); + expect(result.content).toContainEqual( + expect.objectContaining({ + type: "text", + text: expect.stringContaining("Output validation error"), + }), ); + expect(result.structuredContent).toBeUndefined(); + } finally { + await Promise.allSettled([client.close(), server.close()]); } }); }); + +const missingPropertyDescriptions = ( + value: unknown, + path = "inputSchema", +): string[] => { + if (Array.isArray(value)) + return value.flatMap((child, index) => + missingPropertyDescriptions(child, `${path}[${index}]`), + ); + if (!isObject(value)) return []; + + const missing: string[] = []; + if (isObject(value.properties)) + for (const [property, schema] of Object.entries(value.properties)) { + const propertyPath = `${path}.properties.${property}`; + if (!isObject(schema) || typeof schema.description !== "string") + missing.push(propertyPath); + missing.push(...missingPropertyDescriptions(schema, propertyPath)); + } + for (const [key, child] of Object.entries(value)) + if ( + key !== "properties" && + key !== "examples" && + key !== "default" && + key !== "const" && + key !== "enum" + ) + missing.push(...missingPropertyDescriptions(child, `${path}.${key}`)); + return missing; +}; + +const isObject = (value: unknown): value is Readonly> => + typeof value === "object" && value !== null && !Array.isArray(value); diff --git a/tests/boundary/mcp/toolResult.test.ts b/tests/boundary/mcp/toolResult.test.ts index f3d43d287..1b2d39ff6 100644 --- a/tests/boundary/mcp/toolResult.test.ts +++ b/tests/boundary/mcp/toolResult.test.ts @@ -87,31 +87,6 @@ describe("tool result projection", () => { }); expect(JSON.stringify(result)).not.toContain("cookie"); }); - it("classifies output contract failures without naming a provider", () => { - const result = toCallToolResult(ok({ value: 42 }), contract); - expect(result).toMatchObject({ - structuredContent: { - error: { - code: "unreadable_output", - category: "execution_failure", - message: - "Analysis returned an unreadable result. Retry once; if it continues, run `rea doctor`.", - retryable: false, - remediation: { - action: - "Analysis returned an unreadable result. Retry once; if it continues, run `rea doctor`.", - restart_required: false, - }, - }, - }, - isError: true, - }); - expect(result.content[0]).toEqual({ - type: "text", - text: JSON.stringify(result.structuredContent), - }); - }); - it("links successful evidence only when its session resource exists", () => { const evidence = createEvidence( undefined, diff --git a/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts b/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts index aee3edb84..571bba442 100644 --- a/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts +++ b/tests/boundary/process/javascriptRuntimeReconciliationAmbiguity.test.ts @@ -10,6 +10,7 @@ import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { createElectronEvidence } from "../../../src/application/ElectronEvidence.js"; import { analyzeJavaScriptApplication } from "../../../src/application/JavaScriptApplicationService.js"; import { reconcileJavaScriptRuntime } from "../../../src/domain/javascriptRuntimeReconciliation.js"; +import { inspectElectronPageInputSchema } from "../../../src/domain/electronObservation.js"; import { createWebTextArtifact } from "../../../src/domain/webContentArtifact.js"; import { permissionAuthorityForRoot } from "../../fixtures/permissionAuthority.js"; @@ -233,7 +234,7 @@ const electronRuntimeEvidence = ( const includeWorker = options.includeWorker ?? true; const targetId = options.targetId ?? "target-main"; const sourceCaptureApproved = options.sourceCaptureApproved ?? true; - const input = { + const input = inspectElectronPageInputSchema.parse({ cdp_endpoint: "http://127.0.0.1:9223", allowed_file_roots: [root], target_id: targetId, @@ -250,7 +251,7 @@ const electronRuntimeEvidence = ( max_script_source_bytes: 1_048_576, max_total_script_source_bytes: 4_194_304, }, - }; + }); return createElectronEvidence( "inspect_electron_page", input, diff --git a/tests/boundary/process/processCaptureLifecycle.test.ts b/tests/boundary/process/processCaptureLifecycle.test.ts index b7bc500b2..5f2554bba 100644 --- a/tests/boundary/process/processCaptureLifecycle.test.ts +++ b/tests/boundary/process/processCaptureLifecycle.test.ts @@ -35,11 +35,11 @@ it("does not follow or disclose symlink targets outside declared roots", async ( filesystem_roots: [root], }), { - enabled: true, + status: "enabled", executableRoots: ["/usr/bin"], workingRoots: [root], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }, ); expect(result.ok).toBe(true); @@ -65,11 +65,7 @@ it("does not launch when policy denies capture", async () => { working_directory: "/tmp", }); const result = await captureProcessScenario(scenario, { - enabled: false, - executableRoots: [], - workingRoots: [], - allowedEnvironment: [], - allowExternalNetwork: true, + status: "disabled", }); expect(result.ok).toBe(false); if (result.ok) throw new Error("expected policy refusal"); @@ -80,11 +76,11 @@ it("distinguishes timeout from cancellation and cleans both runs", async () => { const capability = await probeProcessCaptureCapability(); if (!capability.available) return; const policy: ProcessExecutionPolicy = { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [dirname(processFixture)], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }; const timedOut = await captureProcessScenario( parseProcessScenario({ @@ -143,11 +139,11 @@ it("captures source-owned interactive, resize, Unicode, and signal behavior", as idle_timeout_ms: 2_000, }), { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [dirname(processFixture)], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }, ); if (!result.ok) throw result.error; @@ -177,7 +173,7 @@ it("dispatches scheduled events before a silent PTY produces output", async () = idle_timeout_ms: 2_000, }), { - enabled: true, + status: "enabled", executableRoots: [ join(dirname(process.execPath), "missing"), dirname(process.execPath), @@ -187,7 +183,7 @@ it("dispatches scheduled events before a silent PTY produces output", async () = dirname(processFixture), ], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }, ); expect(result.ok).toBe(true); @@ -214,11 +210,11 @@ it("samples and cleans a source-owned child and grandchild process tree", async idle_timeout_ms: 2_000, }), { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [dirname(processFixture)], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }, ); expect(result.ok).toBe(true); diff --git a/tests/boundary/process/processCaptureMultisource.test.ts b/tests/boundary/process/processCaptureMultisource.test.ts index d78d30c6c..35a3b336f 100644 --- a/tests/boundary/process/processCaptureMultisource.test.ts +++ b/tests/boundary/process/processCaptureMultisource.test.ts @@ -196,11 +196,11 @@ it("runs the committed multi-source reactive fixture deterministically", async ( ); const run = () => captureProcessScenario(createMultiSourceScenario(root, script), { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [root], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }); try { const capability = await probeProcessCaptureCapability(); diff --git a/tests/boundary/process/processCaptureObservation.test.ts b/tests/boundary/process/processCaptureObservation.test.ts index a794b5830..498c71751 100644 --- a/tests/boundary/process/processCaptureObservation.test.ts +++ b/tests/boundary/process/processCaptureObservation.test.ts @@ -207,11 +207,11 @@ it("cleans the temporary root when capture home creation fails", async () => { prepareProcessCapture( parseProcessScenario(base), { - enabled: true, + status: "enabled", executableRoots: ["/bin"], workingRoots: ["/tmp"], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }, undefined, host, @@ -375,11 +375,11 @@ it("parses bounded scenarios and rejects unordered events", () => { it("requires explicit operator approval for host network access", () => { expect( authorizeProcessScenario(parseProcessScenario(base), { - enabled: true, + status: "enabled", executableRoots: ["/bin"], workingRoots: ["/tmp"], allowedEnvironment: [], - allowExternalNetwork: false, + networkAccess: "none", }), ).toEqual({ allowed: false, @@ -394,11 +394,11 @@ it("refuses paths and environment outside operator policy", () => { }); expect( authorizeProcessScenario(scenario, { - enabled: true, + status: "enabled", executableRoots: ["/bin"], workingRoots: ["/tmp"], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }), ).toEqual({ allowed: false, diff --git a/tests/boundary/process/processCaptureReactive.test.ts b/tests/boundary/process/processCaptureReactive.test.ts index ad136caa1..142d9fe68 100644 --- a/tests/boundary/process/processCaptureReactive.test.ts +++ b/tests/boundary/process/processCaptureReactive.test.ts @@ -287,11 +287,11 @@ it("drives a process from terminal observations and retains the reactive transit const capability = await probeProcessCaptureCapability(); if (!capability.available) return; const result = await captureProcessScenario(scenario, { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [root], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }); if (!result.ok) throw result.error; assertCompletedCapture(result.value); @@ -351,11 +351,11 @@ it("records target loss before post-exit settlement can win the deadline race", const capability = await probeProcessCaptureCapability(); if (!capability.available) return; const result = await captureProcessScenario(scenario, { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [root], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }); expect(result.ok).toBe(true); if (!result.ok) throw result.error; diff --git a/tests/boundary/process/processCaptureReplayMachine.test.ts b/tests/boundary/process/processCaptureReplayMachine.test.ts index 93554f55e..8268ff282 100644 --- a/tests/boundary/process/processCaptureReplayMachine.test.ts +++ b/tests/boundary/process/processCaptureReplayMachine.test.ts @@ -119,11 +119,11 @@ it("runs a login and reconnect replay machine inside process capture", async () const capability = await probeProcessCaptureCapability(); if (!capability.available) return; const capture = await captureProcessScenario(scenario, { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [root], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }); expect(capture.ok).toBe(true); if (!capture.ok) throw capture.error; @@ -172,11 +172,11 @@ it("captures PTY, filesystem, descendants, HTTP replay, and redacts environment" ].join("\n"), ); const policy: ProcessExecutionPolicy = { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [root], allowedEnvironment: ["SECRET"], - allowExternalNetwork: true, + networkAccess: "external", }; const scenario = parseProcessScenario({ approved: true, diff --git a/tests/boundary/process/processCaptureTerminal.test.ts b/tests/boundary/process/processCaptureTerminal.test.ts index 9a73ecd69..9c8a4bedb 100644 --- a/tests/boundary/process/processCaptureTerminal.test.ts +++ b/tests/boundary/process/processCaptureTerminal.test.ts @@ -132,11 +132,11 @@ it("renders terminal state, records shim invocations, and captures literal check const result = await captureProcessScenario( buildTerminalScenario(root, script), { - enabled: true, + status: "enabled", executableRoots: [dirname(process.execPath)], workingRoots: [root], allowedEnvironment: [], - allowExternalNetwork: true, + networkAccess: "external", }, ); expect(result.ok).toBe(true); diff --git a/tests/boundary/process/providerProcess.test.ts b/tests/boundary/process/providerProcess.test.ts index 4953538ee..28d71ad97 100644 --- a/tests/boundary/process/providerProcess.test.ts +++ b/tests/boundary/process/providerProcess.test.ts @@ -85,7 +85,7 @@ describe("provider process runtime and wait primitives", () => { const waiting = deadline.wait(1_000); controller.abort(); await expect(waiting).resolves.toBe("aborted"); - expect(deadline.cancelled).toBe(true); + expect(deadline.interruption).toBe("cancelled"); expect(getEventListeners(controller.signal, "abort")).toHaveLength(0); expect(vi.getTimerCount()).toBe(0); deadline.dispose(); @@ -99,7 +99,7 @@ describe("provider process runtime and wait primitives", () => { await vi.advanceTimersByTimeAsync(100); await expect(waiting).resolves.toBe("aborted"); - expect(deadline.timedOut).toBe(true); + expect(deadline.interruption).toBe("timeout"); expect(deadline.remainingMs()).toBe(0); deadline.dispose(); expect(vi.getTimerCount()).toBe(0); @@ -114,8 +114,7 @@ describe("provider process runtime and wait primitives", () => { controller.abort(); expect(deadline.signal.reason).toMatchObject({ name: "TimeoutError" }); - expect(deadline.timedOut).toBe(true); - expect(deadline.cancelled).toBe(false); + expect(deadline.interruption).toBe("timeout"); expect(getEventListeners(controller.signal, "abort")).toHaveLength(0); expect(vi.getTimerCount()).toBe(0); deadline.dispose(); diff --git a/tests/boundary/providers/ghidra/ghidraProvider.test.ts b/tests/boundary/providers/ghidra/ghidraProvider.test.ts index f7c68aef3..1a6d9d5a3 100644 --- a/tests/boundary/providers/ghidra/ghidraProvider.test.ts +++ b/tests/boundary/providers/ghidra/ghidraProvider.test.ts @@ -120,7 +120,8 @@ describe("Ghidra provider", () => { }); expect( ghidra.inspectTargetSupport({ - ...executableTarget("elf", "x86_64"), + path: "/tmp/fixture.asar", + sha256: "a".repeat(64), kind: "archive", format: "asar", }), @@ -129,14 +130,15 @@ describe("Ghidra provider", () => { code: "target_kind_unsupported", }); expect( - ghidra.inspectTargetSupport(executableTarget("javascript", "x86_64")), + ghidra.inspectTargetSupport({ + path: "/tmp/fixture.js", + sha256: "a".repeat(64), + kind: "artifact", + format: "javascript", + }), ).toMatchObject({ status: "unsupported", - code: "target_format_unsupported", - }); - expect(ghidra.inspectTargetSupport(executableTarget("elf"))).toMatchObject({ - status: "unsupported", - code: "architecture_unsupported", + code: "target_kind_unsupported", }); }); }); @@ -144,11 +146,7 @@ describe("Ghidra provider", () => { describe("Ghidra platform support", () => { it("keeps Windows P0 unavailable until native isolation authority exists", () => { const ghidra = provider({ ...installationHost(), platform: "win32" }); - const nativeApplication: BinaryTarget = { - ...executableTarget("pe", "x86_64"), - executableRole: "application", - managed: false, - }; + const nativeApplication = peTarget("x86_64"); expect(ghidra.inspectTargetSupport(nativeApplication)).toMatchObject({ status: "supported", @@ -208,16 +206,13 @@ describe("Ghidra platform support", () => { code: "managed_target_unsupported", }); expect( - ghidra.inspectTargetSupport({ ...nativeApplication, format: "elf" }), + ghidra.inspectTargetSupport(executableTarget("elf", "x86_64")), ).toMatchObject({ status: "unsupported", code: "target_format_unsupported", }); expect( - ghidra.inspectTargetSupport({ - ...nativeApplication, - architecture: "arm64", - }), + ghidra.inspectTargetSupport(executableTarget("pe", "arm64")), ).toMatchObject({ status: "unsupported", code: "architecture_unsupported", @@ -470,14 +465,29 @@ const sessionInfo = () => ({ }); const executableTarget = ( - format: BinaryTarget["format"], - architecture?: NonNullable, -): BinaryTarget => ({ + format: "mach-o" | "elf" | "pe", + architecture: NonNullable, +): BinaryTarget => + format === "pe" + ? peTarget(architecture) + : { + path: "/tmp/fixture", + sha256: "a".repeat(64), + kind: "executable", + format, + architecture, + availableArchitectures: [architecture], + }; + +const peTarget = ( + architecture: NonNullable, +): Extract => ({ path: "/tmp/fixture", sha256: "a".repeat(64), kind: "executable", - format, - ...(architecture === undefined - ? {} - : { architecture, availableArchitectures: [architecture] }), + format: "pe", + architecture, + availableArchitectures: [architecture], + executableRole: "application", + managed: false, }); diff --git a/tests/boundary/providers/hopper/hopperAnalysisProfile.test.ts b/tests/boundary/providers/hopper/hopperAnalysisProfile.test.ts index 48c8c456c..81917a66e 100644 --- a/tests/boundary/providers/hopper/hopperAnalysisProfile.test.ts +++ b/tests/boundary/providers/hopper/hopperAnalysisProfile.test.ts @@ -27,8 +27,12 @@ describe("Hopper analysis profiles", () => { [target("pe", "x86"), ["-l", "WinPE", "--intel-32"]], [ { - ...target("mach-o", "arm64"), - availableArchitectures: ["x86_64", "arm64"], + path: "/tmp/fixture", + sha256: "a".repeat(64), + kind: "executable", + format: "mach-o", + architecture: "arm64", + availableArchitectures: ["x86_64", "arm64"] as const, } satisfies BinaryTarget, ["-l", "FAT", "--aarch64", "-l", "Mach-O"], ], @@ -141,11 +145,23 @@ describe("Hopper analysis profiles", () => { const target = ( format: "mach-o" | "elf" | "pe", architecture: "x86" | "x86_64" | "arm" | "arm64", -): BinaryTarget => ({ - path: "/tmp/fixture", - sha256: "a".repeat(64), - kind: "executable", - format, - architecture, - availableArchitectures: [architecture], -}); +): BinaryTarget => + format === "pe" + ? { + path: "/tmp/fixture", + sha256: "a".repeat(64), + kind: "executable", + format, + architecture, + availableArchitectures: [architecture], + executableRole: "application", + managed: false, + } + : { + path: "/tmp/fixture", + sha256: "a".repeat(64), + kind: "executable", + format, + architecture, + availableArchitectures: [architecture], + }; diff --git a/tests/boundary/providers/hopper/hopperClient.cleanup.test.ts b/tests/boundary/providers/hopper/hopperClient.cleanup.test.ts index 5039d1edb..41ea16118 100644 --- a/tests/boundary/providers/hopper/hopperClient.cleanup.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.cleanup.test.ts @@ -48,6 +48,7 @@ class FixtureLauncher implements BridgeLauncher { ok({ process: child, ownsProcessLifetime: true, + shutdownMode: "bridge-request" as const, }), ); } @@ -78,9 +79,9 @@ class OwnedFixtureLauncher implements BridgeLauncher { this.ownership = started.ownership; return ok({ process: started.process, - ownsProcessLifetime: true, + ownsProcessLifetime: true as const, ownership: started.ownership, - shutdownByCleanup: true, + shutdownMode: "process-cleanup" as const, cleanup: () => cleanupOwnedProcessGroup(started.ownership), }); } @@ -102,6 +103,29 @@ class UnconfirmedFixtureLauncher implements BridgeLauncher { { stdio: ["ignore", "ignore", "pipe"] }, ), ownsProcessLifetime: false, + shutdownMode: "bridge-request" as const, + }), + ); + } +} + +class UnconfirmedOwnedFixtureLauncher implements BridgeLauncher { + launch(session: BridgeSession) { + return Promise.resolve( + ok({ + process: spawn( + process.execPath, + [ + fixturePath, + session.socketPath, + session.token, + session.runId, + "unconfirmed", + ], + { stdio: ["ignore", "ignore", "pipe"] }, + ), + ownsProcessLifetime: true as const, + shutdownMode: "bridge-request" as const, }), ); } @@ -183,6 +207,26 @@ describe("HopperClient cleanup", () => { }); }); + it("does not treat an owned launcher exit as bridge document shutdown", async () => { + const client = new HopperClient({ + launcher: new UnconfirmedOwnedFixtureLauncher(), + startupTimeoutMs: 1_000, + }); + clients.push(client); + expect((await client.start()).ok).toBe(true); + + const closed = await client.closeWithOutcome(); + + expect(closed).toMatchObject({ + ok: false, + error: { + _tag: "ProviderAdapterError", + cleanupIncomplete: true, + cleanupResources: ["hopper-document"], + }, + }); + }); + it("kills only its owned Hopper group and emits sanitized shutdown coordinates", async () => { const unrelated = spawn( process.execPath, diff --git a/tests/boundary/providers/hopper/hopperClient.progress.test.ts b/tests/boundary/providers/hopper/hopperClient.progress.test.ts index b3cc682d5..ce3036a1d 100644 --- a/tests/boundary/providers/hopper/hopperClient.progress.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.progress.test.ts @@ -42,7 +42,8 @@ class FixtureLauncher implements BridgeLauncher { return Promise.resolve( ok({ process: child, - ownsProcessLifetime: true, + ownsProcessLifetime: true as const, + shutdownMode: "bridge-request" as const, }), ); } diff --git a/tests/boundary/providers/hopper/hopperClient.protocol.test.ts b/tests/boundary/providers/hopper/hopperClient.protocol.test.ts index 0e03f8431..2ab7c9772 100644 --- a/tests/boundary/providers/hopper/hopperClient.protocol.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.protocol.test.ts @@ -45,7 +45,8 @@ class FixtureLauncher implements BridgeLauncher { return Promise.resolve( ok({ process: child, - ownsProcessLifetime: true, + ownsProcessLifetime: true as const, + shutdownMode: "bridge-request" as const, }), ); } diff --git a/tests/boundary/providers/hopper/hopperClient.restart.test.ts b/tests/boundary/providers/hopper/hopperClient.restart.test.ts index 177fb32e9..1e422c5ee 100644 --- a/tests/boundary/providers/hopper/hopperClient.restart.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.restart.test.ts @@ -42,7 +42,8 @@ class FixtureLauncher implements BridgeLauncher { return Promise.resolve( ok({ process: child, - ownsProcessLifetime: true, + ownsProcessLifetime: true as const, + shutdownMode: "bridge-request" as const, }), ); } diff --git a/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts b/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts index 3ec839aea..8a475098b 100644 --- a/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts +++ b/tests/boundary/providers/hopper/hopperClient.startupFailures.test.ts @@ -46,7 +46,8 @@ class FixtureLauncher implements BridgeLauncher { return Promise.resolve( ok({ process: child, - ownsProcessLifetime: true, + ownsProcessLifetime: true as const, + shutdownMode: "bridge-request" as const, }), ); } @@ -63,7 +64,8 @@ class SilentLauncher implements BridgeLauncher { stdio: ["ignore", "ignore", "pipe"], }, ), - ownsProcessLifetime: true, + ownsProcessLifetime: true as const, + shutdownMode: "bridge-request" as const, }), ); } @@ -89,7 +91,8 @@ class ExitingLauncher implements BridgeLauncher { process: spawn(process.execPath, ["-e", `process.exit(${this.code})`], { stdio: ["ignore", "ignore", "pipe"], }), - ownsProcessLifetime: true, + ownsProcessLifetime: true as const, + shutdownMode: "bridge-request" as const, }), ); } @@ -126,7 +129,8 @@ class DiagnosticExitingLauncher implements BridgeLauncher { ], { stdio: ["ignore", "ignore", "pipe"] }, ), - ownsProcessLifetime: true, + ownsProcessLifetime: true as const, + shutdownMode: "bridge-request" as const, }), ); } diff --git a/tests/boundary/providers/hopper/linuxPrivateDisplay.test.ts b/tests/boundary/providers/hopper/linuxPrivateDisplay.test.ts index ea56002a1..38a784d4f 100644 --- a/tests/boundary/providers/hopper/linuxPrivateDisplay.test.ts +++ b/tests/boundary/providers/hopper/linuxPrivateDisplay.test.ts @@ -49,12 +49,11 @@ const processResult = ( value: HopperStartupDiagnostic, overrides: Partial = {}, ): LinuxPrivateDisplayProbeProcessResult => ({ + outcome: "exited", exitCode: value.status === "ready" ? 0 : failureExit(value.failure_code), stderr: `${LINUX_PRIVATE_DISPLAY_DIAGNOSTIC_PREFIX}${JSON.stringify(value)}\n`, stderrBytes: 0, stderrTruncated: false, - timedOut: false, - cancelled: false, cleanupIncomplete: false, ...overrides, }); diff --git a/tests/boundary/providers/managed/managedApplicationGraph.test.ts b/tests/boundary/providers/managed/managedApplicationGraph.test.ts index bd5942f18..daffb3e15 100644 --- a/tests/boundary/providers/managed/managedApplicationGraph.test.ts +++ b/tests/boundary/providers/managed/managedApplicationGraph.test.ts @@ -345,4 +345,6 @@ const target = (bytes: Buffer): BinaryTarget => ({ format: "pe", architecture: "x86", availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }); diff --git a/tests/boundary/providers/managed/managedArtifactProvider.cilDecoding.test.ts b/tests/boundary/providers/managed/managedArtifactProvider.cilDecoding.test.ts index bb859c4c1..6d233664c 100644 --- a/tests/boundary/providers/managed/managedArtifactProvider.cilDecoding.test.ts +++ b/tests/boundary/providers/managed/managedArtifactProvider.cilDecoding.test.ts @@ -135,4 +135,6 @@ const target = (bytes: Buffer): BinaryTarget => ({ format: "pe", architecture: "x86", availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }); diff --git a/tests/boundary/providers/managed/managedArtifactProvider.cilLimits.test.ts b/tests/boundary/providers/managed/managedArtifactProvider.cilLimits.test.ts index ca83e9d5c..e67e7c01f 100644 --- a/tests/boundary/providers/managed/managedArtifactProvider.cilLimits.test.ts +++ b/tests/boundary/providers/managed/managedArtifactProvider.cilLimits.test.ts @@ -70,4 +70,6 @@ const target = (bytes: Buffer): BinaryTarget => ({ format: "pe", architecture: "x86", availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }); diff --git a/tests/boundary/providers/managed/managedArtifactProvider.failures.test.ts b/tests/boundary/providers/managed/managedArtifactProvider.failures.test.ts index 450d16203..c29018cac 100644 --- a/tests/boundary/providers/managed/managedArtifactProvider.failures.test.ts +++ b/tests/boundary/providers/managed/managedArtifactProvider.failures.test.ts @@ -146,8 +146,12 @@ describe("managed artifact failures", () => { await client.close(); const nativeClient = new ManagedStaticProvider().createClient({ - ...parsed.value, + path: parsed.value.path, + sha256: parsed.value.sha256, + kind: "executable", format: "elf", + architecture: "x86", + availableArchitectures: ["x86"], }); await expect( nativeClient.execute("inspect_managed_artifact", {}), @@ -164,6 +168,8 @@ const target = (bytes: Buffer): BinaryTarget => ({ format: "pe", architecture: "x86", availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }); const asManagedResult = (execution: AnalysisExecution) => diff --git a/tests/boundary/providers/managed/managedArtifactProvider.inventory.test.ts b/tests/boundary/providers/managed/managedArtifactProvider.inventory.test.ts index 3522601c7..7b574d024 100644 --- a/tests/boundary/providers/managed/managedArtifactProvider.inventory.test.ts +++ b/tests/boundary/providers/managed/managedArtifactProvider.inventory.test.ts @@ -168,4 +168,6 @@ const target = (bytes: Buffer): BinaryTarget => ({ format: "pe", architecture: "x86", availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }); diff --git a/tests/boundary/providers/managed/managedArtifactProvider.members.test.ts b/tests/boundary/providers/managed/managedArtifactProvider.members.test.ts index ac81483f5..8ef73935f 100644 --- a/tests/boundary/providers/managed/managedArtifactProvider.members.test.ts +++ b/tests/boundary/providers/managed/managedArtifactProvider.members.test.ts @@ -137,4 +137,6 @@ const target = (bytes: Buffer): BinaryTarget => ({ format: "pe", architecture: "x86", availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }); diff --git a/tests/boundary/providers/managed/managedArtifactProvider.nativeBoundaries.test.ts b/tests/boundary/providers/managed/managedArtifactProvider.nativeBoundaries.test.ts index 0353b29ac..db914b6d2 100644 --- a/tests/boundary/providers/managed/managedArtifactProvider.nativeBoundaries.test.ts +++ b/tests/boundary/providers/managed/managedArtifactProvider.nativeBoundaries.test.ts @@ -151,4 +151,6 @@ const target = (bytes: Buffer): BinaryTarget => ({ format: "pe", architecture: "x86", availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }); diff --git a/tests/boundary/providers/managed/managedMemberComparison.test.ts b/tests/boundary/providers/managed/managedMemberComparison.test.ts index d9dd904e2..b2cdb6757 100644 --- a/tests/boundary/providers/managed/managedMemberComparison.test.ts +++ b/tests/boundary/providers/managed/managedMemberComparison.test.ts @@ -300,6 +300,9 @@ const inspect = ( kind: "executable", format: "pe", architecture: "x86", + availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }; const result = inspectManagedMembersBytes(bytes, target, limits); return { diff --git a/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts b/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts index b883fd892..e329799ef 100644 --- a/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts +++ b/tests/boundary/providers/native/artifactProvider.archiveInventory.test.ts @@ -151,11 +151,11 @@ const inventory = async (targetValue: BinaryTarget) => { const target = ( path: string, - format: BinaryTarget["format"] | "directory", + format: Extract["format"] | "directory", ): BinaryTarget => ({ path, sourcePath: path, sha256: "0".repeat(64), - kind: format === "directory" ? "executable" : "archive", - format: format === "directory" ? "mach-o" : format, + kind: "archive", + format: format === "directory" ? "asar" : format, }); diff --git a/tests/boundary/providers/native/artifactProvider.archiveSafety.test.ts b/tests/boundary/providers/native/artifactProvider.archiveSafety.test.ts index 7970868cd..4f9426489 100644 --- a/tests/boundary/providers/native/artifactProvider.archiveSafety.test.ts +++ b/tests/boundary/providers/native/artifactProvider.archiveSafety.test.ts @@ -126,13 +126,13 @@ const inventory = async (targetValue: BinaryTarget) => { const target = ( path: string, - format: BinaryTarget["format"] | "directory", + format: Extract["format"] | "directory", ): BinaryTarget => ({ path, sourcePath: path, sha256: "0".repeat(64), - kind: format === "directory" ? "executable" : "archive", - format: format === "directory" ? "mach-o" : format, + kind: "archive", + format: format === "directory" ? "asar" : format, }); const limits = () => ({ maxDepth: 20, maxPathBytes: 4_096 }); diff --git a/tests/boundary/providers/native/artifactProvider.directoryInventory.test.ts b/tests/boundary/providers/native/artifactProvider.directoryInventory.test.ts index be7c94ef5..e328f94da 100644 --- a/tests/boundary/providers/native/artifactProvider.directoryInventory.test.ts +++ b/tests/boundary/providers/native/artifactProvider.directoryInventory.test.ts @@ -79,11 +79,11 @@ describe("artifact directory inventory", () => { const target = ( path: string, - format: BinaryTarget["format"] | "directory", + format: Extract["format"] | "directory", ): BinaryTarget => ({ path, sourcePath: path, sha256: "0".repeat(64), - kind: format === "directory" ? "executable" : "archive", - format: format === "directory" ? "mach-o" : format, + kind: "archive", + format: format === "directory" ? "asar" : format, }); diff --git a/tests/boundary/providers/native/artifactProvider.extraction.test.ts b/tests/boundary/providers/native/artifactProvider.extraction.test.ts index 0bea824c0..e59f28a11 100644 --- a/tests/boundary/providers/native/artifactProvider.extraction.test.ts +++ b/tests/boundary/providers/native/artifactProvider.extraction.test.ts @@ -130,11 +130,11 @@ const inventory = async (targetValue: BinaryTarget) => { const target = ( path: string, - format: BinaryTarget["format"] | "directory", + format: Extract["format"] | "directory", ): BinaryTarget => ({ path, sourcePath: path, sha256: "0".repeat(64), - kind: format === "directory" ? "executable" : "archive", - format: format === "directory" ? "mach-o" : format, + kind: "archive", + format: format === "directory" ? "asar" : format, }); diff --git a/tests/boundary/providers/native/artifactProvider.paginationAndSlices.test.ts b/tests/boundary/providers/native/artifactProvider.paginationAndSlices.test.ts index 273953d87..0981d97e0 100644 --- a/tests/boundary/providers/native/artifactProvider.paginationAndSlices.test.ts +++ b/tests/boundary/providers/native/artifactProvider.paginationAndSlices.test.ts @@ -106,11 +106,11 @@ describe("artifact pagination and slices", () => { const target = ( path: string, - format: BinaryTarget["format"] | "directory", + format: Extract["format"] | "directory", ): BinaryTarget => ({ path, sourcePath: path, sha256: "0".repeat(64), - kind: format === "directory" ? "executable" : "archive", - format: format === "directory" ? "mach-o" : format, + kind: "archive", + format: format === "directory" ? "asar" : format, }); diff --git a/tests/boundary/providers/native/nativeApiInspection.test.ts b/tests/boundary/providers/native/nativeApiInspection.test.ts index 08d9791a6..3e5862e2b 100644 --- a/tests/boundary/providers/native/nativeApiInspection.test.ts +++ b/tests/boundary/providers/native/nativeApiInspection.test.ts @@ -2,6 +2,7 @@ import { describe, expect, it } from "vitest"; import { projectNativeApiInspection } from "../../../../src/application/NativeApiInspection.js"; import { functionDossierSchema } from "../../../../src/domain/hopperValues.js"; +import { nativeApiBoundarySchema } from "../../../../src/domain/nativeApiBoundary.js"; import { ghidraFunctionDossier } from "../../../fixtures/ghidraFunction.js"; describe("native API inspection", () => { @@ -59,4 +60,30 @@ describe("native API inspection", () => { ], }); }); + + it("rejects boundary types placed in the wrong ABI role", () => { + const boundary = functionDossierSchema.parse( + ghidraFunctionDossier(), + ).native_api; + if (boundary === null || boundary.available !== true) + throw new TypeError("Ghidra native API fixture is unavailable"); + + expect( + nativeApiBoundarySchema.safeParse({ + ...boundary, + return_type: { ...boundary.return_type, role: "parameter" }, + }).success, + ).toBe(false); + expect( + nativeApiBoundarySchema.safeParse({ + ...boundary, + parameters: [ + { + ...boundary.return_type, + role: "return", + }, + ], + }).success, + ).toBe(false); + }); }); diff --git a/tests/boundary/providers/replay/javascriptReplay.test.ts b/tests/boundary/providers/replay/javascriptReplay.test.ts index eb288448b..e64e67094 100644 --- a/tests/boundary/providers/replay/javascriptReplay.test.ts +++ b/tests/boundary/providers/replay/javascriptReplay.test.ts @@ -7,6 +7,7 @@ import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js import { runControlledReplay } from "../../../../src/application/JavaScriptReplayService.js"; import type { + EnabledJavaScriptReplayPolicy, JavaScriptReplayHost, JavaScriptReplayPolicy, JavaScriptReplayRunner, @@ -19,8 +20,8 @@ import { } from "../../../../src/domain/javascriptReplay.js"; const root = resolve("tests/fixtures/replay"); -const policy: JavaScriptReplayPolicy = { - enabled: true, +const policy: EnabledJavaScriptReplayPolicy = { + status: "enabled", roots: [root], nodePath: process.execPath, bubblewrapPath: process.execPath, @@ -127,7 +128,7 @@ const input = ( entry_export: "default", }, cases: [{ case_id: "heading", arguments: ["# Title"] }], - approved: mode === "execute", + ...(mode === "execute" ? { approved: true as const } : {}), }); const completedRunner = (): JavaScriptReplayRunner => ({ @@ -153,6 +154,45 @@ const completedRunner = (): JavaScriptReplayRunner => ({ }); describe("controlled JavaScript replay planning", () => { + it("parses planning and execution as disjoint legal states", () => { + expect( + controlledReplayInputSchema.safeParse({ + ...input("execute"), + approved: false, + plan_digest: "0".repeat(64), + }).success, + ).toBe(false); + expect( + controlledReplayInputSchema.safeParse({ + ...input("execute"), + approved: true, + }).success, + ).toBe(false); + expect( + controlledReplayInputSchema.safeParse({ + ...input("plan"), + plan_digest: "0".repeat(64), + }).success, + ).toBe(false); + expect( + controlledReplayInputSchema.safeParse({ + ...input("plan"), + approved: true, + }).success, + ).toBe(false); + expect( + controlledReplayInputSchema.safeParse({ + ...input("execute"), + approved: true, + plan_digest: "0".repeat(64), + reproducer_export: { + path: "/tmp/reproducer", + approved: false, + }, + }).success, + ).toBe(false); + }); + it("rejects relative paths and more than 128 combined cases", () => { expect( controlledReplayInputSchema.safeParse({ @@ -180,7 +220,7 @@ describe("controlled JavaScript replay planning", () => { const readSource = vi.fn(host.readSource); const result = await runControlledReplay( { - policy, + policy: () => policy, host: { ...host, probe, readSource }, runner: completedRunner(), authority: authority(), @@ -199,11 +239,21 @@ describe("controlled JavaScript replay planning", () => { it("returns a deterministic plan without admitting application code", async () => { const execute = vi.fn(completedRunner().execute); const first = await runControlledReplay( - { policy, host, runner: { execute }, authority: authority() }, + { + policy: () => policy, + host, + runner: { execute }, + authority: authority(), + }, input("plan"), ); const second = await runControlledReplay( - { policy, host, runner: { execute }, authority: authority() }, + { + policy: () => policy, + host, + runner: { execute }, + authority: authority(), + }, input("plan"), ); expect(first).toEqual(second); @@ -213,12 +263,26 @@ describe("controlled JavaScript replay planning", () => { plan: { network: "none", filesystem: { host_writes: false } }, evidence: null, }); + if (!first.ok) throw first.error; + const output = controlledReplayOutputSchema.parse(first.value); + expect( + controlledReplayOutputSchema.safeParse({ ...output, plan: null }).success, + ).toBe(false); + expect( + controlledReplayOutputSchema.safeParse({ ...output, phase: "execute" }) + .success, + ).toBe(false); }); it("rejects a stale digest before worker admission", async () => { const execute = vi.fn(completedRunner().execute); const result = await runControlledReplay( - { policy, host, runner: { execute }, authority: authority() }, + { + policy: () => policy, + host, + runner: { execute }, + authority: authority(), + }, { ...input("execute"), plan_digest: "0".repeat(64) }, ); expect(result.ok).toBe(false); @@ -227,10 +291,30 @@ describe("controlled JavaScript replay planning", () => { }); }); +describe("controlled JavaScript replay policy snapshots", () => { + it("uses one enabled policy snapshot for the complete planning operation", async () => { + let reads = 0; + const configuredPolicy = (): JavaScriptReplayPolicy => { + reads += 1; + return reads === 1 ? policy : { status: "disabled" }; + }; + const result = await runControlledReplay( + { + policy: configuredPolicy, + host, + runner: completedRunner(), + authority: authority(), + }, + input("plan"), + ); + expect([result.ok, reads]).toEqual([true, 1]); + }); +}); + describe("controlled JavaScript replay evidence and authorization", () => { it("creates controlled-replay Evidence after an approved exact plan", async () => { const dependencies = { - policy, + policy: () => policy, host, runner: completedRunner(), authority: authority(), @@ -272,6 +356,12 @@ describe("controlled JavaScript replay evidence and authorization", () => { expect(output.evidence?.evidence_links).toEqual([ output.source_evidence[0]?.evidence_id, ]); + expect( + controlledReplayOutputSchema.safeParse({ + ...output, + source_evidence: [], + }).success, + ).toBe(false); }); it("cannot read or execute when replay is disabled", async () => { @@ -279,7 +369,7 @@ describe("controlled JavaScript replay evidence and authorization", () => { const execute = vi.fn(completedRunner().execute); const result = await runControlledReplay( { - policy: { ...policy, enabled: false }, + policy: () => ({ status: "disabled" }), host: { ...host, readSource }, runner: { execute }, authority: authority(), @@ -293,7 +383,7 @@ describe("controlled JavaScript replay evidence and authorization", () => { it("changes the commitment when selected module bytes change", async () => { const dependencies = { - policy, + policy: () => policy, host, runner: completedRunner(), authority: authority(), @@ -333,7 +423,7 @@ describe("controlled JavaScript replay cancellation and export", () => { }), ); const dependencies = { - policy, + policy: () => policy, host, runner: { execute }, authority: authority(), @@ -365,7 +455,7 @@ describe("controlled JavaScript replay cancellation and export", () => { const execute = vi.fn(completedRunner().execute); const result = await runControlledReplay( { - policy, + policy: () => policy, host: { ...host, probe: async () => { @@ -387,7 +477,7 @@ describe("controlled JavaScript replay cancellation and export", () => { const directory = await createTestTempDirectory("rea-reproducer-test-"); const path = join(directory, "reproducer.json"); const dependencies = { - policy, + policy: () => policy, host, runner: completedRunner(), authority: authority(directory), diff --git a/tests/boundary/providers/replay/javascriptReplayWorker.test.ts b/tests/boundary/providers/replay/javascriptReplayWorker.test.ts index f6e4363b0..c0dca1367 100644 --- a/tests/boundary/providers/replay/javascriptReplayWorker.test.ts +++ b/tests/boundary/providers/replay/javascriptReplayWorker.test.ts @@ -66,6 +66,20 @@ const request = async ( }); describe("disposable JavaScript replay worker", () => { + it("rejects malformed runtime-hop requests before loading modules", async () => { + const result = await runWorker({ + schemaVersion: 1, + left: { modules: "not-an-array", entryAlias: "entry", entryExport: "x" }, + cases: [], + determinism: { clockIso: "2000-01-01T00:00:00.000Z", randomSeed: 7 }, + limits: { resultDepth: 16, resultNodes: 10_000, exceptionBytes: 4096 }, + }); + + expect(result.code).toBe(70); + expect(result.stdout).toBe(""); + expect(result.stderr).toContain("Invalid replay worker modules"); + }); + it("runs an ESM parser with projected plain data", async () => { const result = await runWorker( await request("parser.mjs", "esm", "default", ["# Title"]), diff --git a/tests/boundary/providers/replay/replayWorkerProtocol.test.ts b/tests/boundary/providers/replay/replayWorkerProtocol.test.ts index b2b73edbc..ae8306509 100644 --- a/tests/boundary/providers/replay/replayWorkerProtocol.test.ts +++ b/tests/boundary/providers/replay/replayWorkerProtocol.test.ts @@ -19,14 +19,14 @@ describe("replay worker protocol", () => { parseReplayWorkerResponse( { schema_version: 1, left: [outcome] }, cases, - false, + "single", ), ).toMatchObject({ left: [outcome] }); expect(() => parseReplayWorkerResponse( { schema_version: 1, left: [{ ...outcome, case_id: "forged" }] }, cases, - false, + "single", ), ).toThrow("case identity changed"); expect(() => @@ -36,7 +36,7 @@ describe("replay worker protocol", () => { left: [{ ...outcome, input_sha256: "2".repeat(64) }], }, cases, - false, + "single", ), ).toThrow("case identity changed"); }); @@ -46,9 +46,9 @@ describe("replay worker protocol", () => { parseReplayWorkerResponse( { schema_version: 1, left: [outcome] }, cases, - true, + "differential", ), - ).toThrow("differential response is incomplete"); + ).toThrow(); expect(() => parseReplayWorkerResponse( { @@ -56,7 +56,7 @@ describe("replay worker protocol", () => { left: [{ ...outcome, unexpected: true }], }, cases, - false, + "single", ), ).toThrow(); expect(() => @@ -66,8 +66,8 @@ describe("replay worker protocol", () => { left: [{ ...outcome, outcome: "exception", value: undefined }], }, cases, - false, + "single", ), - ).toThrow("Exception is missing"); + ).toThrow(); }); }); diff --git a/tests/composition/analysis-sessions/artifactInventoryPolicy.test.ts b/tests/composition/analysis-sessions/artifactInventoryPolicy.test.ts new file mode 100644 index 000000000..f3f198696 --- /dev/null +++ b/tests/composition/analysis-sessions/artifactInventoryPolicy.test.ts @@ -0,0 +1,41 @@ +import { describe, expect, it } from "vitest"; + +import { + resolveArtifactIntegrityPolicy, + resolveNativeMountPolicy, +} from "../../../src/application/ArtifactInventory/policy.js"; + +describe("artifact inventory policy resolution", () => { + it("admits native mounting only when caller and operator both allow it", () => { + expect(resolveNativeMountPolicy(false, true)).toEqual({ + status: "disabled", + }); + expect(() => resolveNativeMountPolicy(true, false)).toThrow( + "disabled by operator policy", + ); + expect(resolveNativeMountPolicy(true, true)).toEqual({ + status: "approved", + }); + }); + + it("projects strict integrity without dormant continuation state", () => { + expect(resolveArtifactIntegrityPolicy({ mode: "fail" }, true)).toEqual({ + mode: "fail", + }); + }); + + it("admits parsed continuation intent only under operator policy", () => { + expect(() => + resolveArtifactIntegrityPolicy( + { mode: "record-and-continue", maxMismatches: 10 }, + false, + ), + ).toThrow("requires explicit approval and operator policy"); + expect( + resolveArtifactIntegrityPolicy( + { mode: "record-and-continue", maxMismatches: 10 }, + true, + ), + ).toEqual({ mode: "record-and-continue", maxMismatches: 10 }); + }); +}); diff --git a/tests/composition/analysis-sessions/capabilityInventory.test.ts b/tests/composition/analysis-sessions/capabilityInventory.test.ts index d9270fb00..3801cec5d 100644 --- a/tests/composition/analysis-sessions/capabilityInventory.test.ts +++ b/tests/composition/analysis-sessions/capabilityInventory.test.ts @@ -22,13 +22,37 @@ const status = ( readonly operation: string; readonly available: boolean; readonly reason: string | null; - readonly availability_code?: string; + readonly availability_code?: "unsupported_host"; }[]; } = {}, ) => ({ open: options.open ?? false, ...(options.kind === undefined ? {} : { kind: options.kind }), - capabilities: [...(options.capabilities ?? [])], + capabilities: (options.capabilities ?? []).map((capability) => ({ + ...capability, + availability_code: capability.available + ? null + : (capability.availability_code ?? null), + input_contract_version: 1, + output_contract_version: 1, + pagination: "none" as const, + exhaustive: true, + effects: { + mutates_artifact: false, + launches_process: false, + may_show_ui: false, + may_access_network: false, + may_write_filesystem: false, + changes_permissions: false, + requires_root: false, + }, + limits: { + max_results: null, + max_payload_bytes: null, + timeout_ms: null, + }, + limitations: [], + })), }); const entry = ( diff --git a/tests/composition/analysis-sessions/contractSnapshot.test.ts b/tests/composition/analysis-sessions/contractSnapshot.test.ts index 9fcd88316..23fa7c683 100644 --- a/tests/composition/analysis-sessions/contractSnapshot.test.ts +++ b/tests/composition/analysis-sessions/contractSnapshot.test.ts @@ -47,6 +47,20 @@ const contractJsonSchema = (schema: z.ZodType) => { return converted; }; +const describesObject = (schema: ReturnType) => + schema.type === "object" || + [schema.oneOf, schema.anyOf].some( + (variants) => + Array.isArray(variants) && + variants.every( + (variant) => + typeof variant === "object" && + variant !== null && + "type" in variant && + variant.type === "object", + ), + ); + const emptySchemaPaths = (value: unknown, path = "$"): string[] => { if (Array.isArray(value)) return value.flatMap((item, index) => @@ -66,8 +80,8 @@ describe("tool contract surface", () => { for (const contract of contracts) { const inputSchema = contractJsonSchema(contract.inputSchema); const outputSchema = contractJsonSchema(contract.outputSchema); - expect(inputSchema.type).toBe("object"); - expect(outputSchema.type).toBe("object"); + expect(describesObject(inputSchema)).toBe(true); + expect(describesObject(outputSchema)).toBe(true); expect(contract.title.length).toBeGreaterThan(2); expect(contract.annotations).toEqual( annotationsFromEffects(contract.effects), diff --git a/tests/composition/analysis-sessions/contractValidation.test.ts b/tests/composition/analysis-sessions/contractValidation.test.ts index b75c0fac7..1488855e4 100644 --- a/tests/composition/analysis-sessions/contractValidation.test.ts +++ b/tests/composition/analysis-sessions/contractValidation.test.ts @@ -1,6 +1,7 @@ import { describe, expect, it } from "vitest"; import { traceJavaScriptSemanticsRequestSchema } from "../../../src/contracts/applicationWorkflowInputContracts.js"; +import { buildCapabilityInventory } from "../../../src/application/CapabilityInventory.js"; import { artifactInspectionInputSchema, artifactInventoryInputSchema, @@ -19,7 +20,10 @@ import { annotationsFromEffects, toolContractMetadata, } from "../../../src/contracts/toolEffects.js"; -import { requireOutputSchema } from "../../../src/contracts/toolOutputSchemaPrimitives.js"; +import { + requireOutputSchema, + toolAvailability, +} from "../../../src/contracts/toolOutputSchemaPrimitives.js"; import { JAVASCRIPT_FEATURE_TRACE_FULL_EVIDENCE_EXAMPLE } from "../../../src/contracts/javascriptApplicationWorkflowExamples.js"; const EVIDENCE_ID = `ev_${"a".repeat(64)}`; @@ -80,6 +84,17 @@ describe("contract validation boundaries", () => { ).toBe(false); }); + it("accepts each complete managed application Evidence source", () => { + for (const input of [ + { managed_artifact_evidence_id: EVIDENCE_ID }, + { managed_members_evidence_id: EVIDENCE_ID }, + { managed_native_boundaries_evidence_id: EVIDENCE_ID }, + ]) + expect( + managedApplicationGraphReferenceInputSchema.safeParse(input).success, + ).toBe(true); + }); + it("requires explicit approval for record-and-continue artifact inspection", () => { const input = { integrity_policy: "record-and-continue" as const, @@ -89,6 +104,30 @@ describe("contract validation boundaries", () => { expect(artifactInspectionInputSchema.safeParse(input).success).toBe(false); }); + it("rejects contradictory tool availability states", () => { + const inventory = buildCapabilityInventory( + { open: false, capabilities: [] }, + { + processCaptureEnabled: false, + evidenceFileRoots: 0, + investigationInputRoots: 0, + }, + ); + const unavailable = inventory.find(({ available }) => !available); + expect(unavailable).toBeDefined(); + expect(toolAvailability.safeParse(unavailable).success).toBe(true); + expect( + toolAvailability.safeParse({ ...unavailable, available: true }).success, + ).toBe(false); + expect( + toolAvailability.safeParse({ + ...unavailable, + available: false, + reason: "available", + }).success, + ).toBe(false); + }); + it("covers deterministic contract rendering and defensive helper errors", () => { const rendered = renderGuidedPrompt(PROMPT_CONTRACTS[0], { zulu: "last", diff --git a/tests/composition/analysis-sessions/crossVersionInventory.test.ts b/tests/composition/analysis-sessions/crossVersionInventory.test.ts index 9c28f2f36..99754f4b8 100644 --- a/tests/composition/analysis-sessions/crossVersionInventory.test.ts +++ b/tests/composition/analysis-sessions/crossVersionInventory.test.ts @@ -22,9 +22,6 @@ const LIMITS = { const INTEGRITY = { mode: "fail", - approved: false, - enabled: false, - maxMismatches: 1, } as const; const deferred = () => { diff --git a/tests/composition/analysis-sessions/hopperProviderSelection.test.ts b/tests/composition/analysis-sessions/hopperProviderSelection.test.ts index ae1b40573..5afcc23a5 100644 --- a/tests/composition/analysis-sessions/hopperProviderSelection.test.ts +++ b/tests/composition/analysis-sessions/hopperProviderSelection.test.ts @@ -43,12 +43,6 @@ describe("Hopper provider discovery", () => { code: "target_kind_unsupported", diagnostics: { target_kind: "archive", target_format: "asar" }, }); - expect( - hopper.inspectTargetSupport(executableTargetWithoutArchitecture()), - ).toMatchObject({ - status: "unsupported", - code: "architecture_unsupported", - }); }); it("advertises the exact bounded byte-read limit", () => { @@ -88,21 +82,26 @@ const databaseTarget = (): BinaryTarget => ({ const executableTarget = ( format: "mach-o" | "elf" | "pe", architecture: "x86" | "x86_64" | "arm" | "arm64", -): BinaryTarget => ({ - path: "/tmp/fixture", - sha256: "b".repeat(64), - kind: "executable", - format, - architecture, - availableArchitectures: [architecture], -}); - -const executableTargetWithoutArchitecture = (): BinaryTarget => ({ - path: "/tmp/fixture", - sha256: "b".repeat(64), - kind: "executable", - format: "elf", -}); +): BinaryTarget => + format === "pe" + ? { + path: "/tmp/fixture", + sha256: "b".repeat(64), + kind: "executable", + format, + architecture, + availableArchitectures: [architecture], + executableRole: "application", + managed: false, + } + : { + path: "/tmp/fixture", + sha256: "b".repeat(64), + kind: "executable", + format, + architecture, + availableArchitectures: [architecture], + }; const artifactTarget = (): BinaryTarget => ({ path: "/tmp/app.asar", diff --git a/tests/composition/analysis-sessions/identity.test.ts b/tests/composition/analysis-sessions/identity.test.ts index 63136a992..7d07a6eb7 100644 --- a/tests/composition/analysis-sessions/identity.test.ts +++ b/tests/composition/analysis-sessions/identity.test.ts @@ -48,7 +48,7 @@ describe("package identity", () => { "node scripts/generate-package-metadata.mjs --check", ); expect(packageJson.scripts.prebuild).toBe( - "npm run deps:check && npm run metadata:check", + "npm run deps:check && npm run metadata:check && node scripts/clean-build-output.mjs", ); expect(packageJson.scripts["precheck:fast"]).toBe("npm run deps:check"); expect(packageJson.scripts["check:fast"]).toBe("turbo run typecheck lint"); diff --git a/tests/composition/analysis-sessions/toolSchemaJsonOverrides.test.ts b/tests/composition/analysis-sessions/toolSchemaJsonOverrides.test.ts deleted file mode 100644 index 4f6392b78..000000000 --- a/tests/composition/analysis-sessions/toolSchemaJsonOverrides.test.ts +++ /dev/null @@ -1,103 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { TOOL_CONTRACTS } from "../../../src/contracts/toolContracts.js"; -import { applyToolInputJsonSchemaOverride } from "../../../src/contracts/toolSchemaJsonOverrides.js"; -import { z } from "zod"; - -const publicInputSchema = (name: string) => { - const contract = TOOL_CONTRACTS.find((item) => item.name === name); - if (contract === undefined) throw new Error(`Missing contract: ${name}`); - return applyToolInputJsonSchemaOverride( - name, - z.toJSONSchema(contract.inputSchema, { - target: "draft-07", - unrepresentable: "any", - }), - ); -}; - -describe("public tool schema refinements", () => { - it("requires complete web capture pairs and Evidence sources", () => { - expect(publicInputSchema("compare_web_captures")).toMatchObject({ - oneOf: [ - { - required: ["before", "after"], - not: { - anyOf: [ - { required: ["before_scenario"] }, - { required: ["after_scenario"] }, - ], - }, - }, - { - required: ["before_scenario", "after_scenario"], - not: { - anyOf: [{ required: ["before"] }, { required: ["after"] }], - }, - }, - ], - }); - expect(publicInputSchema("trace_application_feature")).toMatchObject({ - oneOf: [ - { required: ["application"] }, - { required: ["application_evidence_id"] }, - ], - }); - }); - - it("publishes sensitive approval dependencies and exact readiness stages", () => { - expect( - JSON.stringify(publicInputSchema("inspect_electron_page")), - ).toContain('"source_capture_approved"'); - const readiness = publicInputSchema("evaluate_reconstruction_readiness"); - expect(readiness).toMatchObject({ - allOf: [ - { - properties: { - stages: { - allOf: expect.arrayContaining([ - expect.objectContaining({ minContains: 1, maxContains: 1 }), - ]), - }, - }, - }, - ], - }); - expect(JSON.stringify(readiness)).toContain('"minContains":1'); - - const bundleSchema = JSON.stringify( - publicInputSchema("analyze_web_bundle"), - ); - expect(bundleSchema).toContain('"include_console_text"'); - expect(bundleSchema).toContain('"console_text_approved"'); - expect(bundleSchema).toContain('"include_json_body_shapes"'); - expect(bundleSchema).toContain('"json_body_schema_approved"'); - expect(bundleSchema).toContain('"include_websocket_shapes"'); - expect(bundleSchema).toContain('"websocket_shape_approved"'); - }); - - it("requires exactly two export-shape Evidence links", () => { - const contract = TOOL_CONTRACTS.find( - ({ name }) => name === "compare_javascript_export_shapes", - ); - if (contract === undefined) - throw new Error("Missing export comparison contract"); - expect( - JSON.stringify( - z.toJSONSchema(contract.outputSchema, { - target: "draft-07", - unrepresentable: "any", - }), - ), - ).toContain('"minItems":2'); - }); - - it("requires exactly one source for source-to-bundle comparison", () => { - expect(publicInputSchema("compare_source_to_bundle")).toMatchObject({ - oneOf: [ - { required: ["application"] }, - { required: ["application_evidence_id"] }, - ], - }); - }); -}); diff --git a/tests/composition/evidence-investigations/investigationWorkspaceMigration.test.ts b/tests/composition/evidence-investigations/investigationWorkspaceMigration.test.ts index 0ea354172..f0915ed69 100644 --- a/tests/composition/evidence-investigations/investigationWorkspaceMigration.test.ts +++ b/tests/composition/evidence-investigations/investigationWorkspaceMigration.test.ts @@ -173,7 +173,13 @@ describe("persistent cross-version investigation workspace", () => { ).resolves.toMatchObject({ ok: true, value: { reused: true } }); await expect( runCrossVersionInvestigation( - { ...input, integrity_continue_approved: true }, + { + ...input, + options: { + ...input.options, + change_limit: input.options.change_limit + 1, + }, + }, policy(directory), { inputRoots: [directory] }, ), diff --git a/tests/composition/javascript-applications/webBundleAnalyzer.test.ts b/tests/composition/javascript-applications/webBundleAnalyzer.test.ts index 605f1b68c..324f73149 100644 --- a/tests/composition/javascript-applications/webBundleAnalyzer.test.ts +++ b/tests/composition/javascript-applications/webBundleAnalyzer.test.ts @@ -151,8 +151,8 @@ const input = (overrides: Record = {}) => target_id: "page-1", approved: true, include_script_sources: true, + source_capture_approved: true, }), - source_capture_approved: true, ...overrides, }); diff --git a/tests/composition/process-capture/processPairedExperiment.test.ts b/tests/composition/process-capture/processPairedExperiment.test.ts index 9a692a206..1a97bcb42 100644 --- a/tests/composition/process-capture/processPairedExperiment.test.ts +++ b/tests/composition/process-capture/processPairedExperiment.test.ts @@ -5,7 +5,10 @@ import { type ProcessCapturePort, } from "../../../src/application/ProcessPairedExperiment.js"; import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../../../src/contracts/processCaptureExample.js"; -import { parseProcessCapture } from "../../../src/domain/processCapture.js"; +import { + parseProcessCapture, + type EnabledProcessExecutionPolicy, +} from "../../../src/domain/processCapture.js"; import { analyzeProcessRepeatability, bindProcessScenario, @@ -47,12 +50,12 @@ const experiment = () => ], }); -const policy = { - enabled: true, +const policy: EnabledProcessExecutionPolicy = { + status: "enabled", executableRoots: ["/bin"], workingRoots: ["/tmp"], allowedEnvironment: ["SHARED", "SIDE"], - allowExternalNetwork: false, + networkAccess: "none", }; describe("paired process experiments", () => { diff --git a/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts b/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts index afc1f1f0c..eaa5246c9 100644 --- a/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts +++ b/tests/composition/runtime-observation/javascriptRuntimeReconciliation.test.ts @@ -11,6 +11,7 @@ import { analyzeJavaScriptApplication } from "../../../src/application/JavaScrip import { reconcileJavaScriptRuntime } from "../../../src/domain/javascriptRuntimeReconciliation.js"; import { javascriptRuntimeReconciliationResultSchema } from "../../../src/domain/javascriptRuntimeReconciliationSchemas.js"; import { electronActiveObservationInputSchema } from "../../../src/domain/electronActiveObservation.js"; +import { inspectElectronPageInputSchema } from "../../../src/domain/electronObservation.js"; import { createWebTextArtifact } from "../../../src/domain/webContentArtifact.js"; import { permissionAuthorityForRoot } from "../../fixtures/permissionAuthority.js"; import { createElectronActiveObservationFixtureResult } from "../../fixtures/electronActiveObservationResult.js"; @@ -337,7 +338,7 @@ const electronRuntimeEvidence = ( const includeWorker = options.includeWorker ?? true; const targetId = options.targetId ?? "target-main"; const sourceCaptureApproved = options.sourceCaptureApproved ?? true; - const input = { + const input = inspectElectronPageInputSchema.parse({ cdp_endpoint: "http://127.0.0.1:9223", allowed_file_roots: [root], target_id: targetId, @@ -354,7 +355,7 @@ const electronRuntimeEvidence = ( max_script_source_bytes: 1_048_576, max_total_script_source_bytes: 4_194_304, }, - }; + }); return createElectronEvidence( "inspect_electron_page", input, diff --git a/tests/composition/runtime-observation/managedRuntimeCorrelation.test.ts b/tests/composition/runtime-observation/managedRuntimeCorrelation.test.ts index cd5949444..1858944a2 100644 --- a/tests/composition/runtime-observation/managedRuntimeCorrelation.test.ts +++ b/tests/composition/runtime-observation/managedRuntimeCorrelation.test.ts @@ -7,6 +7,7 @@ import { describe, expect, it } from "vitest"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { + MANAGED_RUNTIME_DISABLED, planManagedRuntimeCorrelationEvidence, type ManagedRuntimePolicy, } from "../../../src/application/ManagedRuntimeCorrelationService.js"; @@ -43,7 +44,7 @@ describe("managed runtime correlation planning", () => { const fixture = inspect(buildManagedPeFixture(), "/tmp/disabled.dll"); const result = await planManagedRuntimeCorrelationEvidence( { - policy: disabledPolicy, + policy: () => MANAGED_RUNTIME_DISABLED, authority: undefined, }, inputFor(fixture.evidence, fixture.method), @@ -64,7 +65,7 @@ describe("managed runtime correlation planning", () => { const authority = await authorityFor(directory, executablePath, false); const result = await planManagedRuntimeCorrelationEvidence( { - policy: { enabled: true, roots: [directory], executablePath }, + policy: () => enabledPolicy(directory, executablePath), authority, }, inputFor(fixture.evidence, fixture.method), @@ -82,10 +83,10 @@ describe("managed runtime correlation planning", () => { await writeFile(artifactPath, buildManagedPeFixture()); await writeFile(executablePath, "#!/bin/sh\n"); const fixture = inspect(buildManagedPeFixture(), artifactPath); - const policy = { enabled: true, roots: [directory], executablePath }; + const policy = enabledPolicy(directory, executablePath); const authority = await authorityFor(directory, executablePath, true); const result = await planManagedRuntimeCorrelationEvidence( - { policy, authority }, + { policy: () => policy, authority }, inputFor(fixture.evidence, fixture.method), ); @@ -131,7 +132,7 @@ describe("managed runtime correlation planning", () => { const authority = await authorityFor(directory, executablePath, true); const result = await planManagedRuntimeCorrelationEvidence( { - policy: { enabled: true, roots: [directory], executablePath }, + policy: () => enabledPolicy(directory, executablePath), authority, }, { @@ -162,7 +163,7 @@ describe("managed runtime correlation planning", () => { const authority = await authorityFor(directory, executablePath, true); const result = await planManagedRuntimeCorrelationEvidence( { - policy: { enabled: true, roots: [directory], executablePath }, + policy: () => enabledPolicy(directory, executablePath), authority, }, inputFor(fixture.evidence, fixture.method), @@ -178,11 +179,14 @@ describe("managed runtime correlation planning", () => { }); }); -const disabledPolicy: ManagedRuntimePolicy = { - enabled: false, - roots: [], - executablePath: "/usr/bin/dotnet", -}; +const enabledPolicy = ( + root: string, + executablePath: string, +): ManagedRuntimePolicy => ({ + status: "enabled", + roots: [root], + executablePath, +}); const authorityFor = async ( root: string, @@ -251,6 +255,9 @@ const inspect = ( kind: "executable", format: "pe", architecture: "x86", + availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }; const result = inspectManagedMembersBytes(bytes, target, limits); const method = result.methods.items[0]; diff --git a/tests/composition/runtime-observation/nodeRuntimeCharacterization.test.ts b/tests/composition/runtime-observation/nodeRuntimeCharacterization.test.ts index 36c7cdc3c..0382b704a 100644 --- a/tests/composition/runtime-observation/nodeRuntimeCharacterization.test.ts +++ b/tests/composition/runtime-observation/nodeRuntimeCharacterization.test.ts @@ -11,8 +11,8 @@ import { prepareNodeCharacterization, } from "../../../src/application/NodeRuntimeCharacterizationService.js"; import type { + EnabledJavaScriptReplayPolicy, JavaScriptReplayHost, - JavaScriptReplayPolicy, JavaScriptReplayRunner, } from "../../../src/application/JavaScriptReplayPlanning.js"; import { PermissionAuthority } from "../../../src/application/PermissionAuthority.js"; @@ -68,6 +68,12 @@ describe("Node runtime characterization", () => { }, replay: { phase: "plan" }, }); + expect(() => + nodeCharacterizationPreparationOutputSchema.parse({ + ...output, + plan: { ...output.plan, expected_effect: "bounded-effects" }, + }), + ).toThrow(); const stale = await executeNodeCharacterization(dependencies, { execution_approved: true, @@ -192,13 +198,12 @@ const preparationInput = ( entry_export: "selected", }, cases: [{ case_id: "trim", arguments: [" value "] }], - approved: false, }, }); const dependenciesFor = (root: string, onExecute: () => void) => { - const policy: JavaScriptReplayPolicy = { - enabled: true, + const policy: EnabledJavaScriptReplayPolicy = { + status: "enabled", roots: [root], nodePath: process.execPath, bubblewrapPath: process.execPath, @@ -287,5 +292,5 @@ const dependenciesFor = (root: string, onExecute: () => void) => { ], ), ); - return { policy, host, runner, authority }; + return { policy: () => policy, host, runner, authority }; }; diff --git a/tests/composition/setup-lifecycle/browserConfig.test.ts b/tests/composition/setup-lifecycle/browserConfig.test.ts index c500bcdc2..ac969e6ea 100644 --- a/tests/composition/setup-lifecycle/browserConfig.test.ts +++ b/tests/composition/setup-lifecycle/browserConfig.test.ts @@ -59,9 +59,12 @@ describe("browser runtime configuration", () => { const result = parseConfig(environment); if (!result.ok) throw result.error; expect(result.value.browserScenarioPolicy).toEqual({ - enabled: true, - executableRoots: ["/opt/chromium"], - cdpEndpoints: ["http://127.0.0.1:9222"], + status: "enabled", + target: { + access: "launch-or-attach", + executableRoots: ["/opt/chromium"], + cdpEndpoints: ["http://127.0.0.1:9222"], + }, allowedOrigins: ["https://app.example.test"], allowedEnvironment: ["REA_TEST_PASSWORD"], }); @@ -89,7 +92,74 @@ describe("browser runtime configuration", () => { }), ); }); +}); +describe("browser scenario policy states", () => { + it("parses each legal browser-scenario access state", () => { + const launch = parseConfig({ + REA_BROWSER_SCENARIO_ENABLED: "true", + REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON: '["/opt/chromium"]', + REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON: '["https://app.example.test"]', + }); + expect(launch).toMatchObject({ + ok: true, + value: { + browserScenarioPolicy: { + status: "enabled", + target: { access: "launch" }, + }, + }, + }); + + const attach = parseConfig({ + REA_BROWSER_SCENARIO_ENABLED: "true", + REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON: '["http://127.0.0.1:9222"]', + REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON: '["https://app.example.test"]', + }); + expect(attach).toMatchObject({ + ok: true, + value: { + browserScenarioPolicy: { + status: "enabled", + target: { access: "attach" }, + }, + }, + }); + }); + + it("rejects enabled browser scenarios without an origin or access path", () => { + expect( + parseConfig({ + REA_BROWSER_SCENARIO_ENABLED: "true", + REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON: '["/opt/chromium"]', + }).ok, + ).toBe(false); + expect( + parseConfig({ + REA_BROWSER_SCENARIO_ENABLED: "true", + REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON: + '["https://app.example.test"]', + }).ok, + ).toBe(false); + }); + + it("drops inactive browser-scenario settings from the parsed policy", () => { + expect( + parseConfig({ + REA_BROWSER_SCENARIO_EXECUTABLE_ROOTS_JSON: '["/ignored/chromium"]', + REA_BROWSER_SCENARIO_CDP_ENDPOINTS_JSON: '["http://127.0.0.1:9222"]', + REA_BROWSER_SCENARIO_ALLOWED_ORIGINS_JSON: + '["https://ignored.example.test"]', + REA_BROWSER_SCENARIO_ALLOWED_ENV_JSON: '["IGNORED_SECRET"]', + }), + ).toMatchObject({ + ok: true, + value: { browserScenarioPolicy: { status: "disabled" } }, + }); + }); +}); + +describe("browser runtime input scopes", () => { it.each([ '["http://localhost:9222"]', '["http://192.168.1.5:9222"]', diff --git a/tests/composition/setup-lifecycle/capabilityFlags.test.ts b/tests/composition/setup-lifecycle/capabilityFlags.test.ts new file mode 100644 index 000000000..7a82387e7 --- /dev/null +++ b/tests/composition/setup-lifecycle/capabilityFlags.test.ts @@ -0,0 +1,20 @@ +import { describe, expect, it } from "vitest"; + +import { parseConfig } from "../../../src/config.js"; + +describe("capability flags", () => { + it("rejects values outside the exact true/false boundary", () => { + const result = parseConfig({ + REA_PROCESS_CAPTURE_ENABLED: "typo", + REA_BROWSER_OBSERVE_ENABLED: "typo", + REA_BROWSER_SCENARIO_ENABLED: "typo", + REA_ELECTRON_OBSERVE_ENABLED: "typo", + REA_ELECTRON_AUTOMATE_ENABLED: "typo", + REA_V8_INSPECTOR_OBSERVE_ENABLED: "typo", + REA_JAVASCRIPT_REPLAY_ENABLED: "typo", + REA_MANAGED_RUNTIME_ENABLED: "typo", + }); + + expect(result.ok).toBe(false); + }); +}); diff --git a/tests/composition/setup-lifecycle/config.test.ts b/tests/composition/setup-lifecycle/config.test.ts index 028e9b08c..640ee5067 100644 --- a/tests/composition/setup-lifecycle/config.test.ts +++ b/tests/composition/setup-lifecycle/config.test.ts @@ -29,36 +29,26 @@ describe("runtime configuration", () => { maxDepth: 32, maxPathBytes: 4_096, }); - expect(result.value.browserObservationEnabled).toBe(false); - expect(result.value.browserCdpEndpoints).toEqual([]); - expect(result.value.browserAllowedOrigins).toEqual([]); + expect(result.value.browserObservationPolicy).toEqual({ + status: "disabled", + }); expect(result.value.browserScenarioPolicy).toEqual({ - enabled: false, - executableRoots: [], - cdpEndpoints: [], - allowedOrigins: [], - allowedEnvironment: [], + status: "disabled", + }); + expect(result.value.electronObservationPolicy).toEqual({ + status: "disabled", }); - expect(result.value.electronObservationEnabled).toBe(false); - expect(result.value.electronCdpEndpoints).toEqual([]); - expect(result.value.electronFileRoots).toEqual([]); expect(result.value.electronAutomationPolicy).toEqual({ - enabled: false, - executableRoots: [], - applicationRoots: [], + status: "disabled", }); - expect(result.value.v8InspectorObservationEnabled).toBe(false); - expect(result.value.v8InspectorEndpoints).toEqual([]); - expect(result.value.v8InspectorFileRoots).toEqual([]); - expect(result.value.v8InspectorAllowedOrigins).toEqual([]); - expect(result.value.javascriptReplayPolicy).toMatchObject({ - enabled: false, - roots: [], + expect(result.value.v8InspectorObservationPolicy).toEqual({ + status: "disabled", }); - expect(result.value.managedRuntimePolicy).toMatchObject({ - enabled: false, - roots: [], - executablePath: "/usr/bin/dotnet", + expect(result.value.javascriptReplayPolicy).toEqual({ + status: "disabled", + }); + expect(result.value.managedRuntimePolicy).toEqual({ + status: "disabled", }); } }); @@ -161,7 +151,7 @@ describe("active Electron permission configuration", () => { }); if (!result.ok) throw result.error; expect(result.value.electronAutomationPolicy).toEqual({ - enabled: true, + status: "enabled", executableRoots: ["/opt/electron"], applicationRoots: ["/tmp/apps"], }); @@ -204,6 +194,30 @@ describe("active Electron permission configuration", () => { }).ok, ).toBe(false); }); + + it("requires both root sets only for enabled Electron automation", () => { + expect( + parseConfig({ + REA_ELECTRON_AUTOMATE_ENABLED: "true", + REA_ELECTRON_AUTOMATE_APPLICATION_ROOTS_JSON: '["/tmp/apps"]', + }).ok, + ).toBe(false); + expect( + parseConfig({ + REA_ELECTRON_AUTOMATE_ENABLED: "true", + REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON: '["/opt/electron"]', + }).ok, + ).toBe(false); + expect( + parseConfig({ + REA_ELECTRON_AUTOMATE_EXECUTABLE_ROOTS_JSON: '["/ignored/bin"]', + REA_ELECTRON_AUTOMATE_APPLICATION_ROOTS_JSON: '["/ignored/app"]', + }), + ).toMatchObject({ + ok: true, + value: { electronAutomationPolicy: { status: "disabled" } }, + }); + }); }); describe("runtime permission configuration", () => { @@ -245,6 +259,11 @@ describe("runtime permission configuration", () => { REA_JAVASCRIPT_REPLAY_NODE_PATH: "/opt/node/bin/node", }); if (!result.ok) throw result.error; + expect(result.value.javascriptReplayPolicy).toMatchObject({ + status: "enabled", + roots: ["/tmp/extracted-modules"], + nodePath: "/opt/node/bin/node", + }); expect(result.value.permissionCeilings).toContainEqual({ capability: "javascript_replay", roots: ["/tmp/extracted-modules"], @@ -267,6 +286,24 @@ describe("runtime permission configuration", () => { ); }); + it("requires a source root when JavaScript replay is enabled", () => { + expect( + parseConfig({ REA_JAVASCRIPT_REPLAY_ENABLED: "true" }), + ).toMatchObject({ ok: false }); + }); + + it("does not retain dormant JavaScript replay authority", () => { + const result = parseConfig({ + REA_JAVASCRIPT_REPLAY_ENABLED: "false", + REA_JAVASCRIPT_REPLAY_ROOTS_JSON: '["/tmp/extracted-modules"]', + REA_JAVASCRIPT_REPLAY_NODE_PATH: "/opt/node/bin/node", + }); + if (!result.ok) throw result.error; + expect(result.value.javascriptReplayPolicy).toEqual({ + status: "disabled", + }); + }); + it("rejects relative JavaScript replay roots and executables", () => { expect( parseConfig({ REA_JAVASCRIPT_REPLAY_ROOTS_JSON: '["relative/module"]' }) @@ -287,7 +324,7 @@ describe("runtime target configuration", () => { }); if (!result.ok) throw result.error; expect(result.value.managedRuntimePolicy).toEqual({ - enabled: true, + status: "enabled", roots: ["/tmp/managed-targets"], executablePath: "/opt/dotnet/dotnet", }); @@ -318,6 +355,23 @@ describe("runtime target configuration", () => { ).toBe(false); }); + it("requires a non-empty root set only for enabled managed runtime correlation", () => { + const enabled = parseConfig({ REA_MANAGED_RUNTIME_ENABLED: "true" }); + expect(enabled.ok).toBe(false); + if (!enabled.ok) + expect(enabled.error.message).toContain("at least one absolute root"); + + expect( + parseConfig({ + REA_MANAGED_RUNTIME_ROOTS_JSON: '["/ignored/while-disabled"]', + REA_MANAGED_RUNTIME_EXECUTABLE_PATH: "/ignored/dotnet", + }), + ).toMatchObject({ + ok: true, + value: { managedRuntimePolicy: { status: "disabled" } }, + }); + }); + it("rejects relative Electron file roots", () => { expect( parseConfig({ REA_ELECTRON_FILE_ROOTS_JSON: '["relative/app"]' }).ok, @@ -344,11 +398,7 @@ describe("runtime target configuration", () => { logLevel: "info", artifactNativeMountEnabled: false, processExecutionPolicy: { - enabled: false, - executableRoots: [], - workingRoots: [], - allowedEnvironment: [], - allowExternalNetwork: false, + status: "disabled", }, evidenceFilePolicy: { roots: [], diff --git a/tests/composition/setup-lifecycle/passiveObservationConfig.test.ts b/tests/composition/setup-lifecycle/passiveObservationConfig.test.ts new file mode 100644 index 000000000..d64c0e8c1 --- /dev/null +++ b/tests/composition/setup-lifecycle/passiveObservationConfig.test.ts @@ -0,0 +1,153 @@ +import { describe, expect, it } from "vitest"; + +import { parseConfig } from "../../../src/config.js"; + +describe("passive browser observation policy", () => { + it("requires both endpoint and origin scopes when enabled", () => { + expect( + parseConfig({ + REA_BROWSER_OBSERVE_ENABLED: "true", + REA_BROWSER_ALLOWED_ORIGINS_JSON: '["https://app.example.test"]', + }).ok, + ).toBe(false); + expect( + parseConfig({ + REA_BROWSER_OBSERVE_ENABLED: "true", + REA_BROWSER_CDP_ENDPOINTS_JSON: '["http://127.0.0.1:9222"]', + }).ok, + ).toBe(false); + }); + + it("parses one enabled policy and drops inactive settings", () => { + expect( + parseConfig({ + REA_BROWSER_OBSERVE_ENABLED: "true", + REA_BROWSER_CDP_ENDPOINTS_JSON: '["http://127.0.0.1:9222"]', + REA_BROWSER_ALLOWED_ORIGINS_JSON: '["https://app.example.test"]', + }), + ).toMatchObject({ + ok: true, + value: { + browserObservationPolicy: { + status: "enabled", + cdpEndpoints: ["http://127.0.0.1:9222"], + allowedOrigins: ["https://app.example.test"], + }, + }, + }); + expect( + parseConfig({ + REA_BROWSER_CDP_ENDPOINTS_JSON: '["http://127.0.0.1:9222"]', + REA_BROWSER_ALLOWED_ORIGINS_JSON: '["https://ignored.example.test"]', + }), + ).toMatchObject({ + ok: true, + value: { browserObservationPolicy: { status: "disabled" } }, + }); + }); +}); + +describe("passive Electron observation policy", () => { + it("requires both endpoint and file-root scopes when enabled", () => { + expect( + parseConfig({ + REA_ELECTRON_OBSERVE_ENABLED: "true", + REA_ELECTRON_FILE_ROOTS_JSON: '["/tmp/electron-app"]', + }).ok, + ).toBe(false); + expect( + parseConfig({ + REA_ELECTRON_OBSERVE_ENABLED: "true", + REA_ELECTRON_CDP_ENDPOINTS_JSON: '["http://127.0.0.1:9223"]', + }).ok, + ).toBe(false); + }); + + it("parses one enabled policy and drops inactive settings", () => { + expect( + parseConfig({ + REA_ELECTRON_OBSERVE_ENABLED: "true", + REA_ELECTRON_CDP_ENDPOINTS_JSON: '["http://127.0.0.1:9223"]', + REA_ELECTRON_FILE_ROOTS_JSON: '["/tmp/electron-app"]', + }), + ).toMatchObject({ + ok: true, + value: { + electronObservationPolicy: { + status: "enabled", + cdpEndpoints: ["http://127.0.0.1:9223"], + fileRoots: ["/tmp/electron-app"], + }, + }, + }); + expect( + parseConfig({ + REA_ELECTRON_CDP_ENDPOINTS_JSON: '["http://127.0.0.1:9223"]', + REA_ELECTRON_FILE_ROOTS_JSON: '["/ignored/electron-app"]', + }), + ).toMatchObject({ + ok: true, + value: { electronObservationPolicy: { status: "disabled" } }, + }); + }); +}); + +describe("passive V8 Inspector observation policy", () => { + const endpoint = { + REA_V8_INSPECTOR_OBSERVE_ENABLED: "true", + REA_V8_INSPECTOR_ENDPOINTS_JSON: '["http://127.0.0.1:9229"]', + } as const; + + it("requires an endpoint and at least one target-location scope", () => { + expect( + parseConfig({ + REA_V8_INSPECTOR_OBSERVE_ENABLED: "true", + REA_V8_INSPECTOR_FILE_ROOTS_JSON: '["/tmp/node-app"]', + }).ok, + ).toBe(false); + expect(parseConfig(endpoint).ok).toBe(false); + }); + + it.each([ + ["files", { REA_V8_INSPECTOR_FILE_ROOTS_JSON: '["/tmp/node-app"]' }], + [ + "origins", + { + REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON: + '["https://renderer.example.test"]', + }, + ], + [ + "files-and-origins", + { + REA_V8_INSPECTOR_FILE_ROOTS_JSON: '["/tmp/node-app"]', + REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON: + '["https://renderer.example.test"]', + }, + ], + ] as const)("parses the %s location variant", (scope, environment) => { + expect(parseConfig({ ...endpoint, ...environment })).toMatchObject({ + ok: true, + value: { + v8InspectorObservationPolicy: { + status: "enabled", + locations: { scope }, + }, + }, + }); + }); + + it("drops inactive endpoint and location settings", () => { + expect( + parseConfig({ + REA_V8_INSPECTOR_ENDPOINTS_JSON: '["http://127.0.0.1:9229"]', + REA_V8_INSPECTOR_FILE_ROOTS_JSON: '["/ignored/node-app"]', + REA_V8_INSPECTOR_ALLOWED_ORIGINS_JSON: + '["https://ignored.example.test"]', + }), + ).toMatchObject({ + ok: true, + value: { v8InspectorObservationPolicy: { status: "disabled" } }, + }); + }); +}); diff --git a/tests/composition/setup-lifecycle/processCaptureConfig.test.ts b/tests/composition/setup-lifecycle/processCaptureConfig.test.ts new file mode 100644 index 000000000..f4e0142d1 --- /dev/null +++ b/tests/composition/setup-lifecycle/processCaptureConfig.test.ts @@ -0,0 +1,43 @@ +import { describe, expect, it } from "vitest"; + +import { parseConfig } from "../../../src/config.js"; + +describe("process capture configuration", () => { + it("parses all authority required by enabled capture", () => { + const result = parseConfig({ + REA_PROCESS_CAPTURE_ENABLED: "true", + REA_PROCESS_EXECUTABLE_ROOTS_JSON: '["/opt/tools"]', + REA_PROCESS_WORKING_ROOTS_JSON: '["/tmp/work"]', + REA_PROCESS_ALLOWED_ENV_JSON: '["TOKEN"]', + REA_PROCESS_ALLOW_EXTERNAL_NETWORK: "true", + }); + if (!result.ok) throw result.error; + expect(result.value.processExecutionPolicy).toEqual({ + status: "enabled", + executableRoots: ["/opt/tools"], + workingRoots: ["/tmp/work"], + allowedEnvironment: ["TOKEN"], + networkAccess: "external", + }); + }); + + it("requires both authority roots when capture is enabled", () => { + expect(parseConfig({ REA_PROCESS_CAPTURE_ENABLED: "true" })).toMatchObject({ + ok: false, + }); + }); + + it("does not retain dormant process-capture authority", () => { + const result = parseConfig({ + REA_PROCESS_CAPTURE_ENABLED: "false", + REA_PROCESS_EXECUTABLE_ROOTS_JSON: '["/opt/tools"]', + REA_PROCESS_WORKING_ROOTS_JSON: '["/tmp/work"]', + REA_PROCESS_ALLOWED_ENV_JSON: '["TOKEN"]', + REA_PROCESS_ALLOW_EXTERNAL_NETWORK: "true", + }); + if (!result.ok) throw result.error; + expect(result.value.processExecutionPolicy).toEqual({ + status: "disabled", + }); + }); +}); diff --git a/tests/conformance/providers/coverageMonotonicity.test.ts b/tests/conformance/providers/coverageMonotonicity.test.ts index 7d712ccd4..4978d8897 100644 --- a/tests/conformance/providers/coverageMonotonicity.test.ts +++ b/tests/conformance/providers/coverageMonotonicity.test.ts @@ -189,6 +189,8 @@ const fixtureTarget: BinaryTarget = { format: "pe", architecture: "x86", availableArchitectures: ["x86"], + executableRole: "application", + managed: true, }; const fixtureMembers = inspectManagedMembersBytes( fixtureBytes, diff --git a/turbo.json b/turbo.json index 55ce436b0..8293b2a30 100644 --- a/turbo.json +++ b/turbo.json @@ -7,6 +7,7 @@ "package.json", "package-lock.json", "scripts/check-dependency-install.mjs", + "scripts/clean-build-output.mjs", "scripts/generate-package-metadata.mjs", "scripts/lib/generated-file.mjs", "skills/reverse-engineer-anything/SKILL.md",