From e07b81649e96668e5ce166cfc6db3b59a7777697 Mon Sep 17 00:00:00 2001 From: morluto <76467478+morluto@users.noreply.github.com> Date: Mon, 5 Oct 2026 21:15:04 +0800 Subject: [PATCH] refactor!: simplify runtime tools and remove replay engines (#572) * fix(hopper): report unavailable procedure body coverage * refactor!: simplify runtime tools and remove replay engines Keep direct inspection, capture, and comparison tools. Bind handlers to named contracts and let agents compose experiments with commands and local fixture servers. BREAKING CHANGE: Remove controlled replay, Node characterization, finite replay-machine, managed runtime planning, and redundant string-tracing tools. Retire process replay, shims, reactive scenarios, custom checkpoints, and active browser replay and origin-scope inputs. --- .github/workflows/real-javascript-replay.yml | 40 -- AGENTS.md | 10 +- README.md | 44 +- README_ar.md | 24 +- README_ja.md | 10 +- README_ko.md | 10 +- README_zh.md | 10 +- bridge/hopper_bridge.py | 21 +- ...controlled-replay-authority-and-sandbox.md | 15 +- ...ged-code-evidence-and-provider-boundary.md | 43 +- docs/adr/README.md | 10 +- docs/architecture.mermaid | 1 - docs/browser-scenario-contract.md | 43 +- docs/controlled-javascript-replay.md | 97 --- docs/error-contract.schema.json | 34 - docs/javascript-application-graph.md | 2 +- docs/javascript-application-workflows.md | 30 +- docs/javascript-runtime-observation.md | 2 +- docs/managed-code-analysis.md | 58 +- docs/mcp-contracts.md | 8 +- docs/process-capture.md | 278 ++------ docs/product-catalog.json | 37 +- docs/roadmap.md | 4 +- docs/testing.md | 11 +- docs/tool-design.md | 16 +- .../managed-conformance-ledger.json | 13 +- .../managed-conformance-manifest.json | 18 +- docs/windows-ghidra-p0.md | 6 +- package.json | 1 - scripts/lib/browser-scenario-verifier.mjs | 2 - scripts/lib/browser-screenshot-e2e.mjs | 1 - scripts/lib/managed-completion-report.mjs | 5 - scripts/verify-agent-experience.mjs | 10 +- scripts/verify-managed-conformance.mjs | 57 +- scripts/verify-package-managed.mjs | 70 -- scripts/verify-package.mjs | 2 +- scripts/verify-real-browser.mjs | 7 +- scripts/verify-real-javascript-replay.mjs | 314 --------- skills/reverse-engineer-anything/SKILL.md | 14 +- .../references/controlled-replay.md | 12 - .../references/javascript-applications.md | 5 +- src/application/BrowserScenarioEvidence.ts | 5 +- src/application/CapabilityInventory.test.ts | 21 - src/application/CapabilityInventory.ts | 12 - src/application/CommandShimReplay.ts | 202 ------ .../ControlledReplayHostSupport.test.ts | 12 - .../ControlledReplayHostSupport.ts | 5 - .../Doctor.runtimeExecutables.test.ts | 66 -- src/application/Doctor.test.ts | 27 - src/application/Doctor.ts | 35 +- src/application/DoctorDiagnostics.ts | 44 +- src/application/DoctorScope.ts | 3 +- src/application/ElectronActiveEvidence.ts | 4 +- .../EnhancedLiteralTracing.test.ts | 24 - src/application/EnhancedLiteralTracing.ts | 17 +- src/application/EnhancedTools.ts | 24 +- .../InstrumentedJavaScriptReplayHost.ts | 63 -- .../JavaScriptReplayPlanning.test.ts | 107 --- src/application/JavaScriptReplayPlanning.ts | 325 --------- src/application/JavaScriptReplayService.ts | 430 ------------ src/application/LoopbackReplay.ts | 531 --------------- src/application/LoopbackReplayRecorder.ts | 180 ----- .../ManagedRuntimeCorrelationService.ts | 95 --- .../NodeRuntimeCharacterizationService.ts | 342 ---------- src/application/ProcessCaptureEnvironment.ts | 40 +- src/application/ProcessCaptureJournal.test.ts | 29 +- src/application/ProcessCaptureJournal.ts | 51 +- src/application/ProcessCaptureLifecycle.ts | 74 +- .../ProcessCaptureObservation.test.ts | 50 +- src/application/ProcessCheckpoints.ts | 216 ------ src/application/ProcessEvidence.test.ts | 41 +- src/application/ProcessEvidence.ts | 4 +- src/application/ProcessFilesystemEffects.ts | 45 ++ src/application/ProcessHarness.test.ts | 37 + src/application/ProcessHarness.ts | 181 +---- src/application/ProcessNormalization.ts | 30 - .../ProcessReactiveCoordinator.test.ts | 301 -------- src/application/ProcessReactiveCoordinator.ts | 300 -------- ...cessReactiveCoordinatorFailures.fixture.ts | 77 --- ...ProcessReactiveCoordinatorFailures.test.ts | 198 ------ src/application/ProcessReactiveEffects.ts | 254 ------- src/application/ProcessReactiveHarness.ts | 185 ----- .../ProcessReactiveObservations.ts | 164 ----- src/application/ProcessTimer.test.ts | 12 - .../RuntimeExecutableDiagnostics.ts | 390 ----------- ...RuntimeExecutableDiagnostics.win32.test.ts | 80 --- src/application/SetupSkill.ts | 1 - src/browser/BrowserScenario.test.ts | 123 +--- .../PlaywrightBrowserScenarioProvider.test.ts | 2 - .../PlaywrightBrowserScenarioProvider.ts | 1 - .../PlaywrightScenarioArtifacts.test.ts | 3 - src/browser/PlaywrightScenarioArtifacts.ts | 34 +- src/browser/PlaywrightScenarioBrowser.ts | 18 - src/browser/PlaywrightScenarioEvents.test.ts | 5 - src/browser/PlaywrightScenarioEvents.ts | 117 +--- src/browser/PlaywrightScenarioSession.ts | 164 +---- src/cli.ts | 4 +- src/cli/managedCommands.ts | 35 - src/cliApplicationCommands.ts | 120 ---- src/cliCommandNames.ts | 5 - src/cliEnvironmentSeam.test.ts | 4 - src/cliProcessCommands.ts | 46 +- src/config.test.ts | 28 - src/config/environment.ts | 34 - src/config/parseConfig.ts | 10 - src/config/runtimeConfiguration.ts | 11 - src/config/types.ts | 4 - src/contracts/applicationToolContracts.ts | 142 +--- src/contracts/browserScenarioToolContracts.ts | 2 +- src/contracts/browserToolContracts.ts | 1 - src/contracts/enhancedInputs.ts | 1 - src/contracts/errorSchemas.ts | 1 - src/contracts/managedWorkflowExamples.ts | 23 - src/contracts/managedWorkflowToolContracts.ts | 34 - src/contracts/replayMachineExample.ts | 38 -- src/contracts/sessionToolSchemas.ts | 2 - src/contracts/toolContractExamples.ts | 3 - src/contracts/toolContracts.test.ts | 6 - src/contracts/toolContracts.ts | 29 +- src/contracts/toolEffects.ts | 17 - src/contracts/toolOutputSchemaGroups.ts | 7 - src/doctorRuntime.ts | 44 +- src/domain/analysisErrorPresentation.ts | 7 - src/domain/analysisErrorProjection.test.ts | 13 +- src/domain/analysisErrorProjection.ts | 10 - src/domain/browserScenario.test.ts | 78 +-- src/domain/browserScenario.ts | 162 +---- src/domain/browserScenarioCapture.test.ts | 8 +- src/domain/browserScenarioCapture.ts | 1 - src/domain/browserScenarioDiff.test.ts | 1 - src/domain/browserScenarioDiff.ts | 4 +- src/domain/browserScenarioValues.ts | 55 -- src/domain/changedBehavior.test.ts | 12 +- src/domain/changedBehavior.ts | 2 - src/domain/errors.ts | 16 +- .../javascriptExportInstrumentation.test.ts | 99 --- src/domain/javascriptExportInstrumentation.ts | 129 ---- src/domain/javascriptExportShapeComparison.ts | 7 +- ...scriptExportShapeComparisonSchemas.test.ts | 5 - .../javascriptExportShapeComparisonSchemas.ts | 5 - src/domain/javascriptReplay.ts | 420 ------------ src/domain/managedRuntimeCorrelation.ts | 207 ------ src/domain/nodeRuntimeCharacterization.ts | 90 --- src/domain/processCapture.comparison.test.ts | 56 +- .../processCapture.traceProjection.test.ts | 62 -- src/domain/processCapture.ts | 142 +--- src/domain/processCapture.validation.test.ts | 75 -- src/domain/processCaptureExample.ts | 9 - .../processCaptureReactiveSchema.test.ts | 34 - src/domain/processCaptureReactiveSchema.ts | 77 --- .../processCaptureReactiveValidation.ts | 275 -------- src/domain/processCaptureValidation.ts | 227 +----- src/domain/processComparison.ts | 40 +- src/domain/processObservation.test.ts | 46 +- src/domain/processObservation.ts | 33 +- .../processReactiveCheckpointDataflow.ts | 41 -- src/domain/processReactiveMatching.ts | 275 -------- src/domain/processReactiveRuntime.fixture.ts | 144 ---- src/domain/processReactiveRuntime.test.ts | 531 --------------- src/domain/processReactiveRuntime.ts | 287 -------- src/domain/processReactiveScenario.test.ts | 504 -------------- src/domain/processReactiveScenario.ts | 426 ------------ .../processReactiveScenarioPreflight.ts | 133 ---- src/domain/processReactiveTransition.ts | 310 --------- src/domain/processScenario.test.ts | 319 ++------- src/domain/processScenario.ts | 174 +---- src/domain/processTraceAdapters.test.ts | 165 ----- src/domain/processTraceComparison.fixture.ts | 110 +-- src/domain/processTraceComparison.test.ts | 229 +++---- src/domain/processTraceDimensionProjection.ts | 26 +- src/domain/processTraceEvaluation.ts | 7 - src/domain/processTraceSpecification.test.ts | 163 +---- src/domain/reconstructionVerification.test.ts | 29 +- .../reconstructionVerificationSchemas.ts | 12 +- src/domain/replayMachine.test.ts | 332 --------- src/domain/replayMachine.ts | 383 ----------- src/domain/replayMachineRun.test.ts | 503 -------------- src/domain/replayMachineRun.ts | 206 ------ .../replayMachineRuntime.captures.test.ts | 308 --------- src/domain/replayMachineRuntime.test.ts | 333 --------- src/domain/replayMachineRuntime.ts | 462 ------------- src/domain/replayMachineUncapped.test.ts | 129 ---- src/domain/replayMachineValues.ts | 93 --- src/domain/runtimeCharacterization.test.ts | 63 -- src/domain/runtimeCharacterization.ts | 95 --- src/domain/staticRuntimeCorrelation.test.ts | 16 +- src/domain/staticRuntimeCorrelation.ts | 11 +- src/generatedMcpToolCatalog.ts | 2 +- src/main.ts | 1 - src/main/transport.ts | 8 - src/replay/JavaScriptReplayWorker.ts | 560 --------------- src/replay/JavaScriptReplayWorkerTypes.ts | 49 -- src/replay/LinuxJavaScriptReplayRunner.ts | 313 --------- src/replay/LinuxJavaScriptReplaySandbox.ts | 152 ----- src/replay/LinuxRuntimeClosure.ts | 61 -- src/replay/LinuxSeccompPolicy.ts | 58 -- src/replay/ReplayOutcome.ts | 141 ---- src/replay/ReplayProcessLifecycle.ts | 121 ---- src/replay/ReplaySeccompFile.ts | 29 - src/replay/ReplayWorkerProtocol.test.ts | 62 -- src/replay/ReplayWorkerProtocol.ts | 90 --- src/replay/SystemJavaScriptReplayHost.ts | 220 ------ src/replay/seededRandom.test.ts | 43 -- src/replay/seededRandom.ts | 53 -- src/server/createServer.ts | 27 - src/server/registerApplicationTools.ts | 4 - .../characterization.ts | 89 --- .../controlledReplay.ts | 53 -- .../registerApplicationTools/helpers.ts | 12 +- src/server/registerApplicationTools/types.ts | 2 - src/server/registerArtifactComparisonTool.ts | 4 +- src/server/registerBundleComparisonTool.ts | 4 +- src/server/registerCloseLifecycleTool.ts | 2 +- src/server/registerEnhancedTools.ts | 56 +- src/server/registerFunctionComparisonTool.ts | 4 +- src/server/registerInvestigationTools.ts | 36 +- src/server/registerManagedWorkflowTools.ts | 2 - .../registerManagedWorkflowTools/contract.ts | 5 +- .../planManagedRuntimeCorrelation.ts | 51 -- .../registerManagedWorkflowTools/types.ts | 2 - src/server/registerProcessComparisonTool.ts | 6 +- src/server/registerReplayMachineTool.ts | 28 - src/server/registerSessionRecordTools.ts | 27 +- src/server/registerSessionStatusTool.ts | 4 +- src/server/registerSessionTools.ts | 87 +-- src/server/sessionAvailabilityPolicy.ts | 4 +- .../applications/applicationReplayMcp.test.ts | 240 ------- .../applicationWorkflowCli.test.ts | 61 +- .../applicationWorkflowVerifier.test.ts | 4 - tests/boundary/cli/browserCli.test.ts | 1 - tests/boundary/cli/productCatalog.test.ts | 4 - .../boundary/cli/projectedErrorStatus.test.ts | 16 - .../javascriptExportShapeComparison.test.ts | 8 +- .../managedRuntimeCorrelation.test.ts | 178 ----- .../nodeRuntimeCharacterization.test.ts | 282 -------- .../filesystem/replaySeccompFile.test.ts | 44 -- .../filesystem/replaySourceRead.test.ts | 79 --- tests/boundary/mcp/browserScenarioMcp.test.ts | 3 - tests/boundary/mcp/createServer.test.ts | 1 - ....01-lists-the-complete-target-open.test.ts | 12 +- tests/boundary/mcp/mainReload.test.ts | 85 +-- tests/boundary/mcp/managedMcp.test.ts | 49 -- tests/boundary/mcp/replayMachineMcp.test.ts | 70 -- tests/boundary/mcp/serverUnknownsMcp.test.ts | 15 +- tests/boundary/mcp/toolSchemaValidity.test.ts | 18 - .../process/processCaptureLifecycle.test.ts | 100 +-- .../process/processCaptureMultisource.test.ts | 253 ------- .../process/processCaptureReactive.test.ts | 399 ----------- .../processCaptureReplayMachine.test.ts | 215 ------ .../processCaptureReplayTransport.test.ts | 380 ----------- .../process/processCaptureTerminal.test.ts | 175 +---- .../runtimeExecutableDiagnostics.test.ts | 202 ------ .../hopper/hopperBridgeFacade.test.ts | 77 +++ .../providers/replay/javascriptReplay.test.ts | 435 ------------ .../replay/javascriptReplayWorker.test.ts | 644 ------------------ tests/fixtures/golden/README.md | 2 +- tests/fixtures/hopperBridgeFacadeProbe.py | 32 + typedoc.json | 8 +- 258 files changed, 1193 insertions(+), 22444 deletions(-) delete mode 100644 .github/workflows/real-javascript-replay.yml delete mode 100644 docs/controlled-javascript-replay.md delete mode 100644 scripts/verify-real-javascript-replay.mjs delete mode 100644 skills/reverse-engineer-anything/references/controlled-replay.md delete mode 100644 src/application/CommandShimReplay.ts delete mode 100644 src/application/ControlledReplayHostSupport.test.ts delete mode 100644 src/application/ControlledReplayHostSupport.ts delete mode 100644 src/application/Doctor.runtimeExecutables.test.ts delete mode 100644 src/application/InstrumentedJavaScriptReplayHost.ts delete mode 100644 src/application/JavaScriptReplayPlanning.test.ts delete mode 100644 src/application/JavaScriptReplayPlanning.ts delete mode 100644 src/application/JavaScriptReplayService.ts delete mode 100644 src/application/LoopbackReplay.ts delete mode 100644 src/application/LoopbackReplayRecorder.ts delete mode 100644 src/application/ManagedRuntimeCorrelationService.ts delete mode 100644 src/application/NodeRuntimeCharacterizationService.ts delete mode 100644 src/application/ProcessCheckpoints.ts create mode 100644 src/application/ProcessFilesystemEffects.ts delete mode 100644 src/application/ProcessReactiveCoordinator.test.ts delete mode 100644 src/application/ProcessReactiveCoordinator.ts delete mode 100644 src/application/ProcessReactiveCoordinatorFailures.fixture.ts delete mode 100644 src/application/ProcessReactiveCoordinatorFailures.test.ts delete mode 100644 src/application/ProcessReactiveEffects.ts delete mode 100644 src/application/ProcessReactiveHarness.ts delete mode 100644 src/application/ProcessReactiveObservations.ts delete mode 100644 src/application/RuntimeExecutableDiagnostics.ts delete mode 100644 src/application/RuntimeExecutableDiagnostics.win32.test.ts delete mode 100644 src/config/runtimeConfiguration.ts delete mode 100644 src/contracts/replayMachineExample.ts delete mode 100644 src/domain/javascriptExportInstrumentation.test.ts delete mode 100644 src/domain/javascriptExportInstrumentation.ts delete mode 100644 src/domain/javascriptReplay.ts delete mode 100644 src/domain/managedRuntimeCorrelation.ts delete mode 100644 src/domain/nodeRuntimeCharacterization.ts delete mode 100644 src/domain/processCaptureReactiveSchema.test.ts delete mode 100644 src/domain/processCaptureReactiveSchema.ts delete mode 100644 src/domain/processCaptureReactiveValidation.ts delete mode 100644 src/domain/processReactiveCheckpointDataflow.ts delete mode 100644 src/domain/processReactiveMatching.ts delete mode 100644 src/domain/processReactiveRuntime.fixture.ts delete mode 100644 src/domain/processReactiveRuntime.test.ts delete mode 100644 src/domain/processReactiveRuntime.ts delete mode 100644 src/domain/processReactiveScenario.test.ts delete mode 100644 src/domain/processReactiveScenario.ts delete mode 100644 src/domain/processReactiveScenarioPreflight.ts delete mode 100644 src/domain/processReactiveTransition.ts delete mode 100644 src/domain/replayMachine.test.ts delete mode 100644 src/domain/replayMachine.ts delete mode 100644 src/domain/replayMachineRun.test.ts delete mode 100644 src/domain/replayMachineRun.ts delete mode 100644 src/domain/replayMachineRuntime.captures.test.ts delete mode 100644 src/domain/replayMachineRuntime.test.ts delete mode 100644 src/domain/replayMachineRuntime.ts delete mode 100644 src/domain/replayMachineUncapped.test.ts delete mode 100644 src/domain/replayMachineValues.ts delete mode 100644 src/domain/runtimeCharacterization.test.ts delete mode 100644 src/domain/runtimeCharacterization.ts delete mode 100644 src/replay/JavaScriptReplayWorker.ts delete mode 100644 src/replay/JavaScriptReplayWorkerTypes.ts delete mode 100644 src/replay/LinuxJavaScriptReplayRunner.ts delete mode 100644 src/replay/LinuxJavaScriptReplaySandbox.ts delete mode 100644 src/replay/LinuxRuntimeClosure.ts delete mode 100644 src/replay/LinuxSeccompPolicy.ts delete mode 100644 src/replay/ReplayOutcome.ts delete mode 100644 src/replay/ReplayProcessLifecycle.ts delete mode 100644 src/replay/ReplaySeccompFile.ts delete mode 100644 src/replay/ReplayWorkerProtocol.test.ts delete mode 100644 src/replay/ReplayWorkerProtocol.ts delete mode 100644 src/replay/SystemJavaScriptReplayHost.ts delete mode 100644 src/replay/seededRandom.test.ts delete mode 100644 src/replay/seededRandom.ts delete mode 100644 src/server/registerApplicationTools/characterization.ts delete mode 100644 src/server/registerApplicationTools/controlledReplay.ts delete mode 100644 src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts delete mode 100644 src/server/registerReplayMachineTool.ts delete mode 100644 tests/acceptance/applications/applicationReplayMcp.test.ts delete mode 100644 tests/boundary/filesystem/managedRuntimeCorrelation.test.ts delete mode 100644 tests/boundary/filesystem/nodeRuntimeCharacterization.test.ts delete mode 100644 tests/boundary/filesystem/replaySeccompFile.test.ts delete mode 100644 tests/boundary/filesystem/replaySourceRead.test.ts delete mode 100644 tests/boundary/mcp/replayMachineMcp.test.ts delete mode 100644 tests/boundary/process/processCaptureMultisource.test.ts delete mode 100644 tests/boundary/process/processCaptureReactive.test.ts delete mode 100644 tests/boundary/process/processCaptureReplayMachine.test.ts delete mode 100644 tests/boundary/process/processCaptureReplayTransport.test.ts delete mode 100644 tests/boundary/process/runtimeExecutableDiagnostics.test.ts delete mode 100644 tests/boundary/providers/replay/javascriptReplay.test.ts delete mode 100644 tests/boundary/providers/replay/javascriptReplayWorker.test.ts diff --git a/.github/workflows/real-javascript-replay.yml b/.github/workflows/real-javascript-replay.yml deleted file mode 100644 index 9181555f4..000000000 --- a/.github/workflows/real-javascript-replay.yml +++ /dev/null @@ -1,40 +0,0 @@ -name: Real JavaScript replay verification - -on: - pull_request: - paths: - - ".github/workflows/real-javascript-replay.yml" - - "scripts/verify-real-javascript-replay.mjs" - - "src/replay/**" - - "src/application/JavaScriptReplay*" - - "src/domain/javascriptReplay.ts" - - "tests/fixtures/replay/**" - - "package.json" - - "package-lock.json" - workflow_dispatch: - -concurrency: - group: real-replay-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: ${{ github.event_name == 'pull_request' }} - -env: - HUSKY: "0" - -permissions: - contents: read - -jobs: - real-replay: - runs-on: ubuntu-latest - timeout-minutes: 10 - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 - with: - node-version-file: .nvmrc - cache: npm - - run: npm ci - - run: sudo apt-get update && sudo apt-get install -y bubblewrap - - run: npm run verify:replay - env: - REA_REPLAY_ALLOW_UNAVAILABLE: "true" diff --git a/AGENTS.md b/AGENTS.md index 9d765539d..03dacd951 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -20,7 +20,7 @@ REA is a local-only tool. Preserve caller-selected inputs, captured output, URLs REA is a layered ESM TypeScript application. Dependencies flow inward from pure domain logic through contracts, providers, application workflows, and CLI/MCP adapters. See [docs/architecture.mermaid](docs/architecture.mermaid) for the component map. - `src/domain/` owns pure provider-neutral semantics; `src/contracts/` owns caller-visible schemas and the canonical tool inventory. -- `src/hopper/`, `src/ghidra/`, `src/browser/`, `src/replay/`, `src/native/`, `src/artifacts/`, and `src/dotnet/` own provider-specific boundaries. Keep provider protocols out of domain and application code. +- `src/hopper/`, `src/ghidra/`, `src/browser/`, `src/native/`, `src/artifacts/`, and `src/dotnet/` own provider-specific boundaries. Keep provider protocols out of domain and application code. - `src/application/` composes shared CLI/MCP workflows; `src/server/` translates MCP requests; `src/cli.ts` and `src/main.ts` are the CLI and MCP entry points. - `src/process/` owns shared process lifecycle primitives, not provider wire protocols. `bridge/` contains provider-side adapters. - `tests/` contains unit, composition, boundary, acceptance, and conformance tests. `scripts/verify-*` contains real-toolchain checks. @@ -58,10 +58,14 @@ Leave meaningful target, action, capture, and output choices to the agent. A sel Verify the representation consumed at the next boundary. Internal validator success does not establish JSON Schema validity or client compatibility: validate advertised input and output schemas against their declared dialect after SDK conversion, and keep generated contracts aligned. Use representative producer data and regressions that exercise the failed behavior. Platform and provider support claims require the corresponding real workflow; package startup, capability probes, and mock transport tests establish only their narrower claims. Report unverified coverage explicitly. +Bind tool handlers to named contracts, preserving their exact input and output types. Catalog ordering is presentation metadata; changing that order must not select a different schema or operation for an existing handler. + ## Designing MCP Tools Start from the analyst question and desired result, not a provider API. Before adding a tool, inspect the existing contract and its nearest alternative. +Let agents compose experiments with ordinary commands, scripts, and local fixture servers. REA tools should perform the requested inspection or capture and return evidence. A custom orchestration language, replay engine, or separate prepare/execute plan needs an observed requirement that those primitives cannot satisfy. A plan-only tool without an executor does not establish runtime behavior; expose the useful inspection directly. + - Prefer reusable, composable primitives: inspect one explicit object or relationship and return evidence that can support different analyst questions. Compose primitives into a workflow only for a recurring outcome @@ -69,7 +73,7 @@ Start from the analyst question and desired result, not a provider API. Before a business-domain interpretations out of general tool contracts. - Use **inspect/search** tools for facts about a target or candidate set; use **trace** tools for relationships; use **compare** tools for explicitly paired inputs. - Add a **workflow** when observed agent use shows a repeated sequence that REA can compose without losing analyst control. Return useful results inline so callers can choose their next action. -- Use **observe/capture/replay** only when runtime activity is required, and declare authority and lifecycle effects in the contract. +- Use **observe/capture** only when runtime activity is required, and declare authority and lifecycle effects in the contract. - Extend an existing tool when intent and result contract are unchanged. Add a tool for a distinct analyst outcome or materially different authority. - Keep caller-facing names and results provider-neutral. Put engine-specific behavior in provider adapters and report each provider's exact coverage. - Keep results complete by default. Add a limit only when it follows from a real format, protocol, authority, or resource-safety constraint; explain truncation and unsupported facets. Keep observed, derived, inferred, and unknown results distinct. @@ -80,7 +84,7 @@ See [docs/tool-design.md](docs/tool-design.md) for the design checklist. When us ## Testing Guidelines -Name tests `*.test.ts`. Use Vitest and production seams (`tests/fixtures/`) rather than module mocks. Domain tests assert pure behavior; adapter tests use fake launcher/socket seams; MCP tests connect with the client SDK version pinned in `package.json`. Preserve the canonical tool inventory defined by `TOOL_CONTRACTS` and verified through `CATALOG_IDENTITY` and generated product metadata. Cover malformed input, cancellation, lifecycle cleanup, and actual format, protocol, host-permission, and target-identity boundaries. Do not add tests that merely freeze arbitrary caps or prescribed call sequences. Real Hopper, Ghidra, browser, JavaScript replay, managed conformance, and any real managed-tool claims cannot be replaced by mocks; use the corresponding `verify:*` command. +Name tests `*.test.ts`. Use Vitest and production seams (`tests/fixtures/`) rather than module mocks. Domain tests assert pure behavior; adapter tests use fake launcher/socket seams; MCP tests connect with the client SDK version pinned in `package.json`. Preserve the canonical tool inventory defined by `TOOL_CONTRACTS` and verified through `CATALOG_IDENTITY` and generated product metadata. Cover malformed input, cancellation, lifecycle cleanup, and actual format, protocol, host-permission, and target-identity boundaries. Do not add tests that merely freeze arbitrary caps or prescribed call sequences. Real Hopper, Ghidra, browser, managed conformance, and any real managed-tool claims cannot be replaced by mocks; use the corresponding `verify:*` command. Keep tool catalogs complete and self-describing; prefer capability- and session-scoped availability over schema truncation. Serialized bytes alone do not measure agent usability or model context cost. diff --git a/README.md b/README.md index 941a3bdd5..13413c78f 100644 --- a/README.md +++ b/README.md @@ -261,10 +261,10 @@ rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json ``` -Exact CLI evidence replays happen before any provider process starts. In MCP sessions, +Exact CLI cached-evidence reads happen before any provider process starts. In MCP sessions, pass `snapshot_path` to `open_binary` to import a snapshot atomically while opening its matching target; MCP providers may still start before a cached call -is replayed. Pass `snapshot_path` and, when required, `overwrite: true` to +result is returned. Pass `snapshot_path` and, when required, `overwrite: true` to `close_binary` to save atomically before Hopper resources are released. If the save fails, REA deliberately leaves the session open. @@ -306,17 +306,17 @@ See [native investigation](docs/native-investigation.md) for keyed archives, ins | Tool family | Count | Examples | | ------------------------- | ----: | --------------------------------------------------------------------------------------------------------------------------------------------------------- | | Native inspection | 39 | functions, pseudocode, assembly, strings, symbols, calls, references, annotations, byte reads, and file offsets | -| Investigation workflows | 15 | app overviews, function dossiers, native APIs and dispatch, batch decompilation, feature traces, call paths, call graphs, Swift and Objective-C discovery | +| Investigation workflows | 14 | app overviews, function dossiers, native APIs and dispatch, batch decompilation, feature traces, call paths, call graphs, Swift and Objective-C discovery | | Native macOS utilities | 7 | Mach-O metadata, code signatures, plists, architectures, and Swift demangling without launching Hopper | | Artifact graph | 5 | directory and package inventories, compiled Interface Builder files, Apple asset catalogs, and extraction | -| Managed PE/CLI | 8 | .NET identity, metadata, CIL instructions, native dependencies, reconstruction imports, runtime-correlation plans, and build comparisons | -| Browser observation | 9 | page structure, network metadata, scripts, source maps, WebMCP discovery, screenshots, capture comparisons, and browser scenarios | -| Electron analysis | 5 | renderer observation, static app mapping, static/runtime reconciliation, and click/wait scenarios | +| Managed PE/CLI | 7 | .NET identity, metadata, CIL instructions, native dependencies, reconstruction imports, and build comparisons | +| Browser observation | 9 | page structure, network metadata, scripts, source maps, WebMCP discovery, screenshots, and capture comparisons | +| Electron analysis | 5 | renderer observation, static app mapping, and static/runtime reconciliation | | JavaScript runtime | 2 | Node/Electron Inspector target discovery, script locations, and execution-context events | -| Application workflows | 10 | cross-layer feature traces, build comparisons, historical source mapping, return-shape comparison, Linux replay, and reconstruction checks | -| Workspace and observation | 22 | sessions, evidence bundles, navigation context, finite replay machines, process/artifact/function comparisons, and open-question tracking | +| Application workflows | 7 | cross-layer feature traces, build comparisons, historical source mapping, static return-shape comparison, and reconstruction checks | +| Workspace and observation | 21 | sessions, evidence bundles, navigation context, process/artifact/function comparisons, and open-question tracking | -The public interface describes what the agent is trying to learn. Providers decide how to answer. macOS utilities handle common semantic inspection without launching Hopper; Hopper handles deeper native analysis; the process harness implements controlled behavioral capture. +The public interface describes what the agent is trying to learn. Providers decide how to answer. macOS utilities handle common semantic inspection without launching Hopper; Hopper handles deeper native analysis; the process harness records direct behavioral captures. ## Current status @@ -327,9 +327,8 @@ REA supports native application, JavaScript, Electron, .NET, and browser investi - **JavaScript and Electron:** Map modules, imports, source maps, routes, IPC channels, storage, and native add-ons without running the app. Compare builds and trace a feature across the recovered graph. Dynamic and ambiguous relationships remain unresolved. See [JavaScript application workflows](docs/javascript-application-workflows.md). - **Websites:** Inspect a selected page in an existing Chrome-family browser. Capture page structure, network metadata, script evidence, and screenshots requested by the call. Passive observation does not navigate or execute page JavaScript. See [browser observation](docs/browser-observation.md). - **Electron and Node runtime observation:** Inspect selected Electron pages or attach to a Node/Electron V8 Inspector target. Inspector observation records script locations and execution-context events; it does not infer imports, IPC activity, or which modules executed. See [runtime observation](docs/javascript-runtime-observation.md). -- **.NET assemblies:** Inspect metadata and CIL instructions, compare builds, and check declared native dependencies without loading or running the assembly. Imported decompiler output is labeled as analyst inference. Runtime-correlation plans are supported, but an executor is not implemented. See [managed-code analysis](docs/managed-code-analysis.md). +- **.NET assemblies:** Inspect metadata and CIL instructions, compare builds, and check declared native dependencies without loading or running the assembly. Imported decompiler output is labeled as analyst inference. See [managed-code analysis](docs/managed-code-analysis.md). - **Controlled behavior capture:** Run process, browser, or Electron scenarios with the target, actions, and lifecycle declared in each request, then compare the resulting evidence. Missing observations cannot establish that two runs behaved the same way. -- **JavaScript replay:** Run selected extracted modules in the Linux sandbox. Each execution request is bound to the exact plan digest; replay also requires the isolation controls described in [controlled JavaScript replay](docs/controlled-javascript-replay.md). - **Evidence and comparison:** Save results with artifact identity, provider, locations, confidence, and limitations. Export or import bundles, compare artifacts and functions, and connect static findings to runtime observations without claiming causality from correlation. - **Open questions:** Track unresolved findings, contradictions, and follow-up probes. Reconstruction checks report pass, fail, or unknown rather than treating missing evidence as a pass. - **Guided workflows:** Start six [MCP investigation workflows](docs/mcp-prompts.md) with suggestions based on your current session. @@ -396,10 +395,9 @@ The [current status](#current-status) section describes shipped capabilities. Th ### Next -1. **Test replay isolation:** add hostile fixtures and test the Linux replay sandbox across more kernels. -2. **Connect more application layers:** add static extractors and runtime observations to feature traces. -3. **Extend .NET analysis:** improve comparisons of obfuscated assemblies and connect managed findings to verified native analysis. See the [managed-code guide](docs/managed-code-analysis.md). -4. **Compare more runtime behavior:** expand process, protocol, filesystem, reconnect, and version-comparison coverage. +1. **Connect more application layers:** add static extractors and runtime observations to feature traces. +2. **Extend .NET analysis:** improve comparisons of obfuscated assemblies and connect managed findings to verified native analysis. See the [managed-code guide](docs/managed-code-analysis.md). +3. **Compare more runtime behavior:** expand process, protocol, filesystem, reconnect, and version-comparison coverage. ### Later @@ -537,7 +535,7 @@ The session also reports active work and cleanup status. If a caller times out, `setup` returns `1` for `planned`, `needs_confirmation`, or `needs_human` because configuration is not ready; rerun it after approval or remediation. `doctor` returns `1` when required checks for its readiness scope are unhealthy. -Unavailable optional replay prerequisites remain visible as informational +Unavailable optional provider prerequisites remain visible as informational diagnostics and do not block setup or unrelated providers. Output format, full envelopes, filters, and token controls never change the operation status. @@ -562,9 +560,9 @@ Closing a session shuts down REA's bridge and removes its temporary socket direc ## Process capture Process capture runs the exact executable and scenario declared in the request, -with the requested working directory, filesystem roots, environment, and -network behavior. The process runs with your user permissions; Process Capture -records behavior and is not a security sandbox. +with the requested working directory and environment. Filesystem observation +paths select what to snapshot. The process runs with your user permissions; +Process Capture records behavior and is not a security sandbox. Capture a scenario or compare two saved Process Capture Evidence records: @@ -575,9 +573,9 @@ rea compare-process-captures authority.json reconstruction.json ``` The comparison reports each observed dimension separately and identifies the -first terminal, interaction, exit, filesystem, protocol, process, or shim -divergence. See [Process Capture](docs/process-capture.md) for scenario -fields, command-shim replay, checkpoint triggers, limits, and safety behavior. +first terminal, interaction, exit, filesystem, or process divergence. +See [Process Capture](docs/process-capture.md) for scenario fields, limits, and +evidence boundaries. REA installs a prebuilt PTY backend for supported macOS, Linux, and Windows architectures. If the capability check reports that the backend is unavailable, @@ -596,7 +594,7 @@ verified or absent. Analysis runs locally. REA communicates with Hopper and Ghidra through authenticated private local sockets. Your agent or model provider has its own data policy. -Runtime requests act on the declared target and lifecycle. Analysis tools and launched targets run with your user permissions, and native UI capture still depends on macOS Accessibility and Screen Recording access. Extracted JavaScript replay runs in a separate Linux sandbox and requires the isolation controls described in [controlled JavaScript replay](docs/controlled-javascript-replay.md). +Runtime requests act on the declared target and lifecycle. Analysis tools and launched targets run with your user permissions, and native UI capture still depends on macOS Accessibility and Screen Recording access. Static JavaScript analysis does not execute extracted modules; use direct browser, Electron, or process capture when runtime behavior is needed. Windows Ghidra operations are blocked until REA implements the required process ownership, private-directory permissions, and safe-path checks. Report vulnerabilities through the private process in [SECURITY.md](SECURITY.md). diff --git a/README_ar.md b/README_ar.md index a13609f37..2b2bdbdde 100644 --- a/README_ar.md +++ b/README_ar.md @@ -200,18 +200,18 @@ rea setup ## منصة أدوات التحقيق -| عائلة الأدوات | العدد | الاستخدام | -| --------------------- | ----: | ------------------------------------------------------------------------------------------------- | -| فحص الملفات التنفيذية | 39 | الدوال والشيفرة شبه المصدرية والتعليمات والسلاسل والرموز والمراجع والتعليقات | -| التحليل المركب | 15 | النظرة العامة وتحليل الدوال وفك الترجمة الدفعي ومخطط الاستدعاء وفحص Swift وObjC | -| أدوات macOS الأصلية | 7 | بيانات Mach-O والتوقيعات وplist والمعماريات واستعادة أسماء Swift | -| الملفات والحزم | 5 | فحص الدلائل والحزم وInterface Builder وموارد Apple والاستخراج | -| .NET PE/CLI | 8 | هوية التجميع والبيانات الوصفية وCIL والاستدعاءات الأصلية والمقارنة واستيراد إعادة البناء | -| مراقبة المتصفح | 9 | الصفحات والبرامج النصية وخرائط المصدر وWebMCP والصور ومقارنة الالتقاط | -| تحليل Electron | 5 | مراقبة الصفحات وبنية التطبيق وربط النتائج الثابتة بنتائج التشغيل والتفاعل المعتمد | -| وقت تشغيل JavaScript | 2 | الاتصال بهدف Node/Electron Inspector موجود لمراقبة البرامج وسياقات التنفيذ | -| سير عمل التطبيقات | 10 | تتبع الميزات ومقارنة الإصدارات وبنية قيم الإرجاع وإعادة التشغيل المعزولة والتحقق من إعادة الإنشاء | -| جلسة الملف التنفيذي | 22 | تبديل الأهداف وحفظ الأدلة ومقارنة العمليات والدوال وتسجيل الأسئلة غير المحسومة | +| عائلة الأدوات | العدد | الاستخدام | +| --------------------- | ----: | ---------------------------------------------------------------------------------------- | +| فحص الملفات التنفيذية | 39 | الدوال والشيفرة شبه المصدرية والتعليمات والسلاسل والرموز والمراجع والتعليقات | +| التحليل المركب | 14 | النظرة العامة وتحليل الدوال وفك الترجمة الدفعي ومخطط الاستدعاء وفحص Swift وObjC | +| أدوات macOS الأصلية | 7 | بيانات Mach-O والتوقيعات وplist والمعماريات واستعادة أسماء Swift | +| الملفات والحزم | 5 | فحص الدلائل والحزم وInterface Builder وموارد Apple والاستخراج | +| .NET PE/CLI | 7 | هوية التجميع والبيانات الوصفية وCIL والاستدعاءات الأصلية والمقارنة واستيراد إعادة البناء | +| مراقبة المتصفح | 9 | الصفحات والبرامج النصية وخرائط المصدر وWebMCP والصور ومقارنة الالتقاط | +| تحليل Electron | 5 | مراقبة الصفحات وبنية التطبيق وربط النتائج الثابتة بنتائج التشغيل | +| وقت تشغيل JavaScript | 2 | الاتصال بهدف Node/Electron Inspector موجود لمراقبة البرامج وسياقات التنفيذ | +| سير عمل التطبيقات | 7 | تتبع الميزات ومقارنة الإصدارات وبنية قيم الإرجاع والتحقق من إعادة الإنشاء | +| جلسة الملف التنفيذي | 21 | تبديل الأهداف وحفظ الأدلة ومقارنة العمليات والدوال وتسجيل الأسئلة غير المحسومة | ## خطة العمل diff --git a/README_ja.md b/README_ja.md index 94e016ad1..27538f378 100644 --- a/README_ja.md +++ b/README_ja.md @@ -192,15 +192,15 @@ REA は手順 1〜5 のバイナリ解析を処理し、手順 6 はエージェ | ツール分類 | 数 | 用途 | | -------------------- | --: | --------------------------------------------------------------------------- | | バイナリ検査 | 39 | 関数、疑似コード、アセンブリ、文字列、シンボル、参照、注釈 | -| 組み合わせた解析 | 15 | 概要、関数解析、一括逆コンパイル、呼び出しグラフ、Swift と ObjC | +| 組み合わせた解析 | 14 | 概要、関数解析、一括逆コンパイル、呼び出しグラフ、Swift と ObjC | | macOS ネイティブ | 7 | Mach-O メタデータ、署名、plist、アーキテクチャ、Swift 名の復元 | | ファイルとパッケージ | 5 | ディレクトリとパッケージ、Interface Builder、Apple リソース、抽出 | -| .NET PE/CLI | 8 | アセンブリ識別、メタデータ、CIL、ネイティブ呼び出し、比較、再構築の取り込み | +| .NET PE/CLI | 7 | アセンブリ識別、メタデータ、CIL、ネイティブ呼び出し、比較、再構築の取り込み | | ブラウザー観察 | 9 | ページ、スクリプト、ソースマップ、WebMCP、スクリーンショット、比較 | -| Electron 解析 | 5 | ページ観察、アプリ構造、静的・実行時結果の対応付け、承認済み操作 | +| Electron 解析 | 5 | ページ観察、アプリ構造、静的・実行時結果の対応付け | | JavaScript 実行時 | 2 | 既存の Node/Electron Inspector に接続し、スクリプトと実行コンテキストを観察 | -| アプリのワークフロー | 10 | 機能追跡、バージョン比較、戻り値構造の比較、隔離実行、再実装の検証 | -| バイナリセッション | 22 | 対象切り替え、根拠の保存、プロセス・関数比較、未解決事項の記録 | +| アプリのワークフロー | 7 | 機能追跡、バージョン比較、戻り値構造の比較、再実装の検証 | +| バイナリセッション | 21 | 対象切り替え、根拠の保存、プロセス・関数比較、未解決事項の記録 | ## ロードマップ diff --git a/README_ko.md b/README_ko.md index 614929243..353c67b3f 100644 --- a/README_ko.md +++ b/README_ko.md @@ -193,15 +193,15 @@ REA는 1–5단계의 바이너리 분석을 처리합니다. 6단계는 에이 | 도구 분류 | 수 | 용도 | | ----------------- | --: | -------------------------------------------------------------------- | | 바이너리 검사 | 39 | 함수, 의사 코드, 어셈블리, 문자열, 심볼, 참조, 주석 | -| 결합 분석 | 15 | 개요, 함수 분석, 일괄 디컴파일, 호출 그래프, Swift와 ObjC 검사 | +| 결합 분석 | 14 | 개요, 함수 분석, 일괄 디컴파일, 호출 그래프, Swift와 ObjC 검사 | | macOS 네이티브 | 7 | Mach-O 메타데이터, 서명, plist, 아키텍처, Swift 이름 복원 | | 파일과 패키지 | 5 | 디렉터리와 패키지 검사, Interface Builder, Apple 리소스, 추출 | -| .NET PE/CLI | 8 | 어셈블리 식별, 메타데이터, CIL, 네이티브 호출, 비교, 재구성 가져오기 | +| .NET PE/CLI | 7 | 어셈블리 식별, 메타데이터, CIL, 네이티브 호출, 비교, 재구성 가져오기 | | 브라우저 관찰 | 9 | 페이지, 스크립트, 소스 맵, WebMCP, 스크린샷, 캡처 비교 | -| Electron 분석 | 5 | 페이지 관찰, 앱 구조, 정적·런타임 결과 연결, 승인된 상호작용 | +| Electron 분석 | 5 | 페이지 관찰, 앱 구조, 정적·런타임 결과 연결 | | JavaScript 런타임 | 2 | 기존 Node/Electron Inspector에 연결해 스크립트와 실행 컨텍스트 관찰 | -| 앱 워크플로 | 10 | 기능 추적, 버전 비교, 반환 구조 비교, 격리 실행, 재구현 검증 | -| 바이너리 세션 | 22 | 대상 전환, 근거 저장, 프로세스·함수 비교, 미해결 항목 기록 | +| 앱 워크플로 | 7 | 기능 추적, 버전 비교, 반환 구조 비교, 재구현 검증 | +| 바이너리 세션 | 21 | 대상 전환, 근거 저장, 프로세스·함수 비교, 미해결 항목 기록 | ## 로드맵 diff --git a/README_zh.md b/README_zh.md index f068114ae..457a7a59b 100644 --- a/README_zh.md +++ b/README_zh.md @@ -192,15 +192,15 @@ REA 负责第 1–5 步中的二进制分析。第 6 步由智能体使用其常 | 工具类别 | 数量 | 用途 | | ----------------- | ---: | --------------------------------------------------------- | | 二进制检查 | 39 | 函数、伪代码、汇编、字符串、符号、段、引用与注释 | -| 组合分析 | 15 | 概览、函数分析、批量反编译、调用图、Swift 与 ObjC 检查 | +| 组合分析 | 14 | 概览、函数分析、批量反编译、调用图、Swift 与 ObjC 检查 | | macOS 原生工具 | 7 | Mach-O 元数据、代码签名、plist、架构与 Swift 符号还原 | | 制品检查 | 5 | 目录与软件包检查、Interface Builder、Apple 资源目录与提取 | -| .NET PE/CLI | 8 | 程序集身份、元数据、CIL、原生调用声明、成员比较与重建导入 | +| .NET PE/CLI | 7 | 程序集身份、元数据、CIL、原生调用声明、成员比较与重建导入 | | 浏览器观察 | 9 | 页面、脚本、来源映射、WebMCP 工具、截图与捕获比较 | -| Electron 分析 | 5 | 页面观察、应用结构、静态与运行时结果关联、批准的交互场景 | +| Electron 分析 | 5 | 页面观察、应用结构与静态/运行时结果关联 | | JavaScript 运行时 | 2 | 连接现有 Node/Electron Inspector,观察脚本与执行上下文 | -| 应用工作流 | 10 | 功能追踪、版本比较、返回结构比较、隔离重放与重建验证 | -| 二进制会话 | 22 | 目标切换、证据包、进程与函数比较、待解决问题记录 | +| 应用工作流 | 7 | 功能追踪、版本比较、返回结构比较与重建验证 | +| 二进制会话 | 21 | 目标切换、证据包、进程与函数比较、待解决问题记录 | ## 路线图 diff --git a/bridge/hopper_bridge.py b/bridge/hopper_bridge.py index aec962633..b290f697c 100644 --- a/bridge/hopper_bridge.py +++ b/bridge/hopper_bridge.py @@ -241,6 +241,10 @@ def _procedure_identity(procedure): "address": _hex(procedure.getEntryPoint()), "name": _procedure_name(procedure), "classification": None, + "body": { + "available": False, + "reason": "Hopper's public Python API does not expose complete function body ranges", + }, } @@ -559,7 +563,11 @@ def _analyze_function(document, params): referenced_strings.sort(key=lambda item: (int(item["address"], 16), int(item["source_address"], 16))) referenced_names.sort(key=lambda item: (int(item["address"], 16), int(item["source_address"], 16))) return { - "procedure": {"address": _hex(procedure.getEntryPoint()), "name": _procedure_name(procedure), "classification": None, "signature": procedure.signatureString(), "locals": _procedure_locals(procedure)}, + "procedure": { + **_procedure_identity(procedure), + "signature": procedure.signatureString(), + "locals": _procedure_locals(procedure), + }, "pseudocode": pseudo, "assembly": assembly_lines, "comments": comments, @@ -770,7 +778,16 @@ def _dispatch(method, params): if method == "procedure_info": blocks = list(procedure.basicBlockIterator()) length = sum(max(0, block.getEndingAddress() - block.getStartingAddress()) for block in blocks) - return {"name": _procedure_name(procedure), "entrypoint": _hex(procedure.getEntryPoint()), "basicblock_count": procedure.getBasicBlockCount(), "length": length, "signature": procedure.signatureString(), "locals": _procedure_locals(procedure), "classification": None} + return { + "name": _procedure_name(procedure), + "entrypoint": _hex(procedure.getEntryPoint()), + "basicblock_count": procedure.getBasicBlockCount(), + "length": length, + "signature": procedure.signatureString(), + "locals": _procedure_locals(procedure), + "classification": None, + "body": _procedure_identity(procedure)["body"], + } if method == "set_address_name": address = _address(document, params.get("address")) try: diff --git a/docs/adr/0002-controlled-replay-authority-and-sandbox.md b/docs/adr/0002-controlled-replay-authority-and-sandbox.md index c46e164c9..6f5ae25de 100644 --- a/docs/adr/0002-controlled-replay-authority-and-sandbox.md +++ b/docs/adr/0002-controlled-replay-authority-and-sandbox.md @@ -1,15 +1,14 @@ # ADR-0002: Controlled JavaScript replay authority and sandbox policy -- Status: Accepted +- Status: Superseded; the controlled JavaScript replay tool was removed - Date: 2026-07-16 -- Implementation status: Implemented by `run_controlled_replay` with a - Linux-x86_64 Bubblewrap, seccomp, and delegated systemd user-cgroup backend. - Hosts that cannot establish every required boundary fail closed. +- Implementation status: The implementation was removed. The design below is + retained as historical context and does not describe a supported REA tool. -> Historical design note: REA's separate permission-policy, grant, and -> per-call approval workflow was later removed. Current tool requests directly -> name their target and lifecycle. The sandbox and exact plan-digest behavior -> described here remain part of controlled replay. +> Historical design note: The tool, sandbox backend, and plan/execute workflow +> described here are no longer part of REA. For runtime behavior, run probes +> directly against the application and use the available browser, Electron, or +> process capture workflows. ## Context diff --git a/docs/adr/0003-managed-code-evidence-and-provider-boundary.md b/docs/adr/0003-managed-code-evidence-and-provider-boundary.md index f8e32d30e..0e50414f4 100644 --- a/docs/adr/0003-managed-code-evidence-and-provider-boundary.md +++ b/docs/adr/0003-managed-code-evidence-and-provider-boundary.md @@ -1,11 +1,10 @@ # ADR-0003: Managed-code evidence and provider boundary -> Historical design note: The admission record described below remains a -> plan-only output. The separate administrator and per-call approval workflow -> was removed; current tool requests directly declare their target and -> lifecycle. +> Historical design record: The non-executing runtime-correlation planning +> tool described in earlier revisions was removed. This ADR's current +> implementation status below covers only the static managed tools that ship. -- Status: Accepted +- Status: Superseded for runtime planning; static evidence boundary remains in force - Date: 2026-07-16 - Implementation status: Read-only PE/CLI triage and exact identity are shipped through `inspect_managed_artifact` / `rea inspect-managed-artifact`. Bounded @@ -24,11 +23,8 @@ inspect-managed-members` provides CLI parity. Static member comparison and build addresses. Decompiler reconstruction import is shipped through `import_managed_reconstruction` / `rea import-managed-reconstruction`; it records user-supplied C#/IL/pseudocode - as analyst inference only after exact static member locks match. Non-executing - runtime-correlation planning is shipped through - `plan_managed_runtime_correlation` / `rea plan-managed-runtime-correlation`; - it does not probe a runtime, establish confinement, attach, load, debug, - reflect, instrument, invoke, or execute target code. Managed static graph + as analyst inference only after exact static member locks match. Managed + inspection does not execute assemblies or observe CLR internals. Managed static graph projection is shipped through `project_managed_application_graph` / `rea project-managed-application-graph`; it projects authenticated managed @@ -56,7 +52,7 @@ makes names especially weak while tokens remain coordinates in only one build. REA already separates one selected deep native provider from disjoint auxiliary providers under [ADR-0001](0001-provider-selection-and-analysis-profiles.md). It also separates static evidence, passive observation, process capture, and -controlled replay authorities. Managed analysis must fit those boundaries +interactive observation authorities. Managed analysis must fit those boundaries without requiring a CLR to inspect an artifact, loading target code into the REA process, or treating a managed token as a native address. @@ -362,22 +358,13 @@ emit full IL, decompiled source, runtime logs, user data, credentials, or service/account material. No proprietary binary, hash-locked application manifest, or derived dump is committed to REA. -### 8. Keep runtime correlation planning distinct from execution +### 8. Keep runtime behavior separate from static managed analysis -Runtime-correlation planning records requested effects and bounds without -probing the runtime or establishing confinement. It binds to the exact artifact -SHA-256, MVID, method signature, and CIL/body shape observed by the static -path, and records that no target code ran. A future executor requires its own -provider and threat model before any effect can occur. - -Runtime admission must additionally validate host OS, CLR family, architecture, -and supported build/tool versions; bound time, threads, outputs, UI and network -effects; avoid real services and accounts; and own all created processes and -artifacts through complete cleanup. Reflection-only loading is still a CLR load -and is not a substitute for the static byte parser. - -Runtime execution is intentionally outside the current managed-code track and -requires its own threat model and admission decision. +No managed runtime planning or execution tool ships. Managed inspection does +not execute assemblies or establish which methods ran. Where supported, direct +process capture can record target-level inputs and outputs, but it does not +prove CLR method execution or resolution. Internal managed behavior remains +unknown until independently observed with suitable runtime evidence. ## Public contract consequences @@ -444,9 +431,7 @@ or development-only oracles. 5. Add source-built, pinned real-tool, package, CLI, and MCP conformance. Source-owned conformance is shipped; pinned external real-tool checks remain planned. -6. Add non-executing runtime-correlation planning. Shipped; runtime execution - and confinement remain planned. -7. Project authenticated managed static Evidence into the application graph. +6. Project authenticated managed static Evidence into the application graph. Shipped. Every gate must keep unsupported ReadyToRun, NativeAOT, IL2CPP, mixed-mode, or diff --git a/docs/adr/README.md b/docs/adr/README.md index d6caea6fc..8511e67de 100644 --- a/docs/adr/README.md +++ b/docs/adr/README.md @@ -4,8 +4,8 @@ Accepted decisions describe the architecture that implementation PRs must follow. Acceptance does not by itself mean the behavior is shipped; each record states its implementation status separately. -| ADR | Status | Implementation | -| ------------------------------------------------------------------------------------------------------------------ | -------- | ----------------------------------------------------------------------------------------------------------- | -| [0001: Provider selection and analysis profiles](0001-provider-selection-and-analysis-profiles.md) | Accepted | Provider selection and 22 Ghidra operations shipped on Linux/macOS; Windows analysis blocked | -| [0002: Controlled JavaScript replay authority and sandbox policy](0002-controlled-replay-authority-and-sandbox.md) | Accepted | Linux x86_64 extracted-module replay shipped | -| [0003: Managed-code evidence and provider boundary](0003-managed-code-evidence-and-provider-boundary.md) | Accepted | Eight static-analysis and runtime-planning tools shipped; native-body mapping and runtime execution planned | +| ADR | Status | Implementation | +| ------------------------------------------------------------------------------------------------------------------ | -------------------- | -------------------------------------------------------------------------------------------- | +| [0001: Provider selection and analysis profiles](0001-provider-selection-and-analysis-profiles.md) | Accepted | Provider selection and 22 Ghidra operations shipped on Linux/macOS; Windows analysis blocked | +| [0002: Controlled JavaScript replay authority and sandbox policy](0002-controlled-replay-authority-and-sandbox.md) | Superseded | Historical design; the controlled JavaScript replay tool was removed | +| [0003: Managed-code evidence and provider boundary](0003-managed-code-evidence-and-provider-boundary.md) | Partially superseded | Seven static managed tools remain; runtime planning removed | diff --git a/docs/architecture.mermaid b/docs/architecture.mermaid index a4a21824d..a3860f342 100644 --- a/docs/architecture.mermaid +++ b/docs/architecture.mermaid @@ -24,7 +24,6 @@ graph TD GHIDRA["src/ghidra/
Ghidra discovery, profile & function analysis
snapshot, Unix/Windows transport, bounded lifecycle"] AUX["src/artifacts/ + src/native/
disjoint artifact and native capabilities"] BROWSER["src/browser/
Loopback CDP transport
exact-origin passive observation"] - REPLAY["src/replay/
Disposable JavaScript worker
Bubblewrap, seccomp, cgroup limits"] end subgraph "Provider Process Foundation" diff --git a/docs/browser-scenario-contract.md b/docs/browser-scenario-contract.md index 1fa3fcd84..cdd61588d 100644 --- a/docs/browser-scenario-contract.md +++ b/docs/browser-scenario-contract.md @@ -3,22 +3,21 @@ `capture_browser_scenario` accepts the provider-neutral `browserScenarioSchema` through both MCP and the `capture-browser-scenario INPUT_JSON` CLI command. The request is declarative: -it admits a fixed action vocabulary, exact HTTP(S) origins, deterministic -browser settings, explicit storage and request replay, and provider-owned +it admits a fixed action vocabulary, explicit HTTP(S) targets, deterministic +browser settings, explicit storage seeds, and provider-owned liveness deadlines. `INPUT_JSON` may be inline JSON or a JSON file path. The minimal request contains only browser launch/connect selection, `start_url`, and at least one `actions` entry. Launch `headless` defaults to `true` and can -be set to `false` where the host supports a visible browser. `allowed_origins` -defaults to the origin of -`start_url`; add exact origins only when navigation, storage, or replay needs -another origin. Environment settings (including service workers blocked by -default), empty storage, disabled request replay, and a final sanitized URL -capture are supplied by default. Set `environment.service_workers` to `allow` -when the application requires them. Add secret declarations, storage seeds, -replay routes, and additional artifact or event capture only when the -investigation needs them. Action, secret, storage, -and replay-route counts are not capped. Duration, action, and navigation +be set to `false` where the host supports a visible browser. Navigations follow +the destinations named by the scenario and the page's ordinary browser requests; +there is no separate origin allowlist or request-interception layer. Environment +settings (including service workers blocked by default), empty storage, and a +final sanitized URL capture are supplied by default. Set +`environment.service_workers` to `allow` when the application requires them. +Add secret declarations, storage seeds, and additional artifact or event +capture only when needed. Action, secret, and storage counts are not capped. +Duration, action, and navigation timeouts remain fixed provider-owned liveness limits; the request does not accept a caller-controlled `limits` object. @@ -32,23 +31,21 @@ confirms that an attached external browser remains alive. HTTP(S) URLs may include ordinary query values and fragments directly. Use ordered structured query entries when a value needs to reference a declared -environment-backed secret. Form, storage, cookie, and replay values are either -literal strings or declared secret references. Raw URL userinfo credentials -and provider-owned replay headers are rejected. Captured credential-header +environment-backed secret. Form, storage, and cookie values are either literal +strings or declared secret references. Raw URL userinfo credentials are rejected. +Captured credential-header values are not retained, and declared secret values are redacted automatically. A secret may be declared solely to redact matching observed content; every secret reference in an action, URL, -storage value, or replay route still needs a declaration. Ordinary query values +storage value still needs a declaration. Ordinary query values and fragments remain intact. Durable results replace resolved secret values with their secret references. -Every start, navigation, storage, replay, and redirect origin must be in the -effective origin set: the explicit `allowed_origins`, or the `start_url` origin -when the list is omitted or empty. Unsupported action tags, unknown fields, duplicate step or -route IDs, undeclared secret references, and provider-owned replay headers fail -validation. HTTP and WebSocket routing enforces the same declared scope. Exact -replay may abort unmatched requests or pass through only origins included in -`allowed_origins`. +The exact `start_url`, navigation destinations, and storage-seed origins define +the inputs to a scenario; ordinary page requests are handled by the browser. +Storage cookies are scoped to the page URL at each capture. Unsupported action +tags, unknown fields, duplicate step IDs, and undeclared secret references fail +validation. The result is Evidence with an initial state followed by one record per declared action. Each step reports action status, elapsed time, sanitized URLs, diff --git a/docs/controlled-javascript-replay.md b/docs/controlled-javascript-replay.md deleted file mode 100644 index 11f220021..000000000 --- a/docs/controlled-javascript-replay.md +++ /dev/null @@ -1,97 +0,0 @@ -# Controlled JavaScript replay - -`run_controlled_replay` executes only the extracted modules named in the request. It -does not launch or drive the original application. Static inference, passive -browser/Electron observation, isolated replay, and real application behavior -remain different authorities. - -## Host prerequisites - -Replay requires the current Node.js runtime, -`/usr/bin/bwrap`, `/usr/bin/systemd-run`, `/usr/bin/systemctl`, and -`/usr/bin/bash`. Override executable paths only with the corresponding -`REA_JAVASCRIPT_REPLAY_*_PATH` variable. Configuration creates the -runtime configuration; REA setup never installs these host components. Check -availability with `rea doctor`, which reports exact sandbox-probe failures -without running module code. - -## Plan, review, execute - -Call the same CLI command or MCP tool twice. The first request uses -`mode: "plan"`. Its response commits module paths and digests, closed dependency -aliases, cases, deterministic providers, runtime/backend identities, resource -limits, no-network policy, private filesystems, and a `plan_digest`. -Runtime commitments include the exact worker, seccomp filter, Node executable, -ELF loader, and shared-library source/destination paths and SHA-256 digests. - -The execute request repeats the same manifest and includes the exact digest -returned by the plan request: - -```json -{ - "mode": "execute", - "plan_digest": "" -} -``` - -The execute request directly selects that content-bound operation. There is no -separate REA grant or approval field. - -REA rebuilds the plan. Any changed module, stub, case, runtime, backend, limit, -or export commitment returns `plan_stale` before worker admission. - -Modules use `esm` or `commonjs-factory`. The latter accepts extracted Rspack -factory syntax such as `123(module, exports, require) { ... }` and implements -the bounded `require.d`, `require.r`, `require.n`, and `require.nmd` helpers. -Every import or require must map to a declared alias. There is no ambient -package resolution. - -Explicit cases can be combined with deterministic `parser-boundaries`, -`sanitizer-boundaries`, or `clipboard-boundaries` generation. Supplying a -`right` manifest runs both sides with fresh realms per case and reports -`equal`, `changed`, or `unknown` comparisons. - -## Boundary and Evidence - -The worker receives module bytes over bounded stdin and runs under a fresh -Bubblewrap user/PID/network/IPC/UTS namespace, an architecture-checked seccomp -filter, an empty mount root with a descriptor-backed read-only Node closure, -private tmpfs, and a transient systemd user cgroup. Host and external network, -host writes, process spawning, workers, native addons, inspector access, and -ambient environment are unavailable. Wall time, memory, swap, tasks, CPU, -case input, worker-protocol input, output, stderr, depth, and node counts are -independently bounded. The parent also requires an exact worker response shape -and authenticates every returned case ID, order, and input digest. Values are -projected through own data descriptors only; Proxy values and accessors are -rejected without invoking their traps or getters. - -Returns, exceptions, serialization failures, denials, timeouts, OOMs, crashes, -protocol failures, and cleanup state are observations with provider -`rea-javascript-replay` and authority `controlled-replay`. An observation does -not prove that the original renderer, preload, main process, browser, or remote -service behaved identically. - -Each left/right run is retained as its own `observed` source Evidence. A -differential envelope is `derived` and links those source Evidence IDs, so the -comparison never erases the underlying observations. - -Optional `reproducer_export` is committed by the plan and writes to its -caller-supplied path after the sandbox has stopped. -The owner-only manifest is written only after complete sandbox cleanup. Source -bytes are excluded unless `include_sources: true` was selected in the request. -An export failure is retained in the result and does not erase a completed -replay observation. - -## Local real-artifact verification - -`npm run verify:replay` uses source-owned parser and hostile fixtures. An -operator can additionally supply a local ESM or Rspack/CommonJS-factory -manifest without copying module source into the repository: - -```sh -REA_REPLAY_INPUT_PATH=/absolute/replay-manifest.json npm run verify:replay -``` - -The verifier canonicalizes the manifest's module paths and prints only plan, -module, and Evidence digests, case/comparison summaries, and cleanup state. -This is the intended seam for local Notion-like parser/sanitizer benchmarks. diff --git a/docs/error-contract.schema.json b/docs/error-contract.schema.json index be8af90a4..5f276b551 100644 --- a/docs/error-contract.schema.json +++ b/docs/error-contract.schema.json @@ -566,40 +566,6 @@ }, "required": ["code", "category", "message", "retryable", "remediation"], "additionalProperties": false - }, - { - "type": "object", - "properties": { - "code": { "type": "string", "const": "plan_stale" }, - "category": { - "type": "string", - "enum": [ - "invalid_input", - "unsupported_provider", - "integrity_mismatch", - "truncated", - "cancelled", - "timeout", - "unavailable", - "execution_failure" - ] - }, - "message": { "type": "string", "minLength": 1 }, - "retryable": { "type": "boolean" }, - "remediation": { - "type": "object", - "properties": { "action": { "type": "string", "minLength": 1 } }, - "required": ["action"], - "additionalProperties": false - }, - "details": { - "type": "object", - "propertyNames": { "type": "string" }, - "additionalProperties": { "$ref": "#/$defs/__schema0" } - } - }, - "required": ["code", "category", "message", "retryable", "remediation"], - "additionalProperties": false } ], "$defs": { diff --git a/docs/javascript-application-graph.md b/docs/javascript-application-graph.md index d62552cbf..bbe4093ad 100644 --- a/docs/javascript-application-graph.md +++ b/docs/javascript-application-graph.md @@ -97,7 +97,7 @@ correspondence is a separately identified cross-layer inference. Every observation and edge carries all of the following: - an authority, such as artifact bytes, AST analysis, static relationship - inference, passive CDP runtime, cross-layer reconciliation, controlled replay, + inference, passive CDP runtime, and cross-layer reconciliation, native analysis, historical reference, or user assertion; - an epistemic state: `observed`, `inferred`, `unknown`, or `unavailable`; - confidence independently bounded as exact, high, medium, low, or unknown; diff --git a/docs/javascript-application-workflows.md b/docs/javascript-application-workflows.md index 38facfd19..e55dc4f95 100644 --- a/docs/javascript-application-workflows.md +++ b/docs/javascript-application-workflows.md @@ -132,8 +132,10 @@ unique occurrence on each side and pairing is reciprocal. Changes use JSON Pointer paths with `added`, `removed`, `changed`, or `unknown` status. A missing field is added or removed only when the relevant parent-property coverage is complete on both shapes. The output includes exact selector candidates, -omissions, Evidence links, coverage, limitations, and a separate controlled -replay recommendation; it does not execute JavaScript. +omissions, Evidence links, coverage, and limitations; it does not execute +JavaScript. When runtime semantics matter, run behavioral probes directly +against the relevant application versions and capture them through the +available browser, Electron, or process workflows. ## CLI and verification @@ -162,22 +164,10 @@ Because source Evidence and derived Evidence are retained by the normal session ledger, evidence bundles and analysis snapshots can carry these records without another persistence format. -## Controlled replay boundary +## Runtime evidence -Static graph workflows never execute a graph node or recovered module. -`run_controlled_replay` is the separate extracted-module boundary. A plan -request and execute request share the same manifest; execution must include the -exact plan digest, and the worker runs inside the mandatory Linux OS sandbox. -The sandbox is an execution boundary; it does not make replay a real application -runtime observation. - -Replay observations retain `controlled-replay` authority. They cannot -promote static inference into passive runtime observation or prove that the -original application, renderer, preload, main process, or remote service -behaved identically. - -Module, explicit case, and preset-generated case lists have no fixed -item-count ceiling. Replay plans commit the caller's resource budgets, and the -worker protocol checks the complete request against that declared byte budget -before probing executables or reading modules. Aggregate module-source and -case-input bytes are likewise checked against the caller's declared budgets. +Static graph workflows do not execute recovered code. When runtime semantics +matter, run behavioral probes directly against the relevant application +versions and capture them through the available browser, Electron, or process +workflows. Those observations do not prove behavior in an unobserved app +version or environment. diff --git a/docs/javascript-runtime-observation.md b/docs/javascript-runtime-observation.md index 0f0070547..e6b4b20e7 100644 --- a/docs/javascript-runtime-observation.md +++ b/docs/javascript-runtime-observation.md @@ -9,7 +9,7 @@ deterministic Evidence. Each request supplies the loopback Inspector endpoint and, for observation, the target ID. This surface is separate from browser CDP, Electron file-page -inspection, Process Capture, and controlled JavaScript replay: +inspection, and Process Capture: ```bash rea list-javascript-runtime-targets http://127.0.0.1:9229 \ diff --git a/docs/managed-code-analysis.md b/docs/managed-code-analysis.md index 583ee37cd..56cf46296 100644 --- a/docs/managed-code-analysis.md +++ b/docs/managed-code-analysis.md @@ -6,7 +6,7 @@ builds, and connect declared native calls to supplied native-analysis evidence. CIL is Common Intermediate Language, the instruction format used by managed assemblies. -The eight shipped tools are: +The seven shipped tools are: | Task | MCP tool | | --------------------------------------------------------------------------- | ----------------------------------- | @@ -16,12 +16,12 @@ The eight shipped tools are: | Compare members across builds and map build-local tokens | `compare_managed_members` | | Check native call declarations against supplied export or function evidence | `verify_managed_native_boundaries` | | Import decompiled code against verified static member identities | `import_managed_reconstruction` | -| Plan a runtime experiment without executing it | `plan_managed_runtime_correlation` | | Add managed findings to an application graph | `project_managed_application_graph` | Each has a matching CLI command: replace underscores with hyphens and prefix the name with `rea`, for example `rea inspect-managed-artifact`. -Native-body bridge mapping and runtime execution remain planned. +Native-body bridge mapping remains planned; managed runtime execution is not +part of the current tool set. This guide describes the implementation and verification of [ADR-0003](adr/0003-managed-code-evidence-and-provider-boundary.md). The canonical @@ -37,8 +37,8 @@ collapsing them: 3. What source-like or behavioral structure can be reconstructed or inferred? 4. Which findings survive an exact-build check or a cross-build structural comparison? -5. Which remaining questions require native analysis or a future runtime - experiment? +5. Which remaining questions require native analysis or runtime evidence that + static inspection cannot supply? The ordinary workflow ends at question four. Static analysis never loads or executes the target. @@ -236,16 +236,16 @@ Tokens are always remapped through observed structure. A caller cannot carry ## Managed/native boundary rules -| Boundary | Managed observation | Native observation | Permitted link | -| ----------------------- | ----------------------------------------------------------------------- | -------------------------------------------------------------------------------- | -------------------------------------------------------------------- | -| P/Invoke | Module, entry point, charset/calling-convention flags, declaring method | Import/export/symbol/function evidence from the selected deep provider | Exact declared-name/module link or qualified resolution inference | -| COM | Interop attributes, GUIDs, imported interfaces, method signatures | Native registration/vtable evidence when independently available | Identifier/signature inference with explicit environment limitations | -| C++/CLI | Managed declaration and implementation flags | Native body/function evidence | Only a provider-supported bridge observation; never token-as-address | -| ReadyToRun | Component/header and per-method CIL/native availability | Native section/function evidence | Authenticated image mapping with format/profile version | -| Unmanaged export | Export metadata/attribute when present | PE export and native thunk/function | Exact export identity plus provider-qualified address | -| Single-file host | Bundle entry/component identity | Host and native component evidence | Outer bundle plus component digest/extent commitment | -| Unity IL2CPP | Supported metadata entity with authenticated pairing | Generated native function/type evidence | Versioned IL2CPP mapping only; no invented CIL | -| Runtime-resolved native | API/constant/data-flow candidate | Loaded-module/symbol observation only under separate runtime execution authority | Static candidate remains inference until separately observed | +| Boundary | Managed observation | Native observation | Permitted link | +| ----------------------- | ----------------------------------------------------------------------- | ------------------------------------------------------------------------------- | -------------------------------------------------------------------- | +| P/Invoke | Module, entry point, charset/calling-convention flags, declaring method | Import/export/symbol/function evidence from the selected deep provider | Exact declared-name/module link or qualified resolution inference | +| COM | Interop attributes, GUIDs, imported interfaces, method signatures | Native registration/vtable evidence when independently available | Identifier/signature inference with explicit environment limitations | +| C++/CLI | Managed declaration and implementation flags | Native body/function evidence | Only a provider-supported bridge observation; never token-as-address | +| ReadyToRun | Component/header and per-method CIL/native availability | Native section/function evidence | Authenticated image mapping with format/profile version | +| Unmanaged export | Export metadata/attribute when present | PE export and native thunk/function | Exact export identity plus provider-qualified address | +| Single-file host | Bundle entry/component identity | Host and native component evidence | Outer bundle plus component digest/extent commitment | +| Unity IL2CPP | Supported metadata entity with authenticated pairing | Generated native function/type evidence | Versioned IL2CPP mapping only; no invented CIL | +| Runtime-resolved native | API/constant/data-flow candidate | Loaded-module/symbol observation from an independently collected runtime source | Static candidate remains inference until separately observed | Declared import inventory supports a bounded positive claim. Its absence does not exclude dynamic resolution, generated code, protected code, native helpers, @@ -402,25 +402,13 @@ The benchmark may prove that REA reproduces selected facts for that exact local build. It cannot establish general support on its own; source-built conformance remains the admission requirement. -## Runtime admission boundary +## Runtime behavior boundary -The later runtime track is not an extension flag on a static operation. Its -design must expose whether it attaches to an existing process, launches a new -process, loads an assembly, uses reflection, installs a debugger/profiler, or -instruments code. Each effect must be declared and checked against the exact -build. - -At minimum, admission requires target SHA-256, MVID, normalized signature and -body/CIL commitment, CLR family, OS, architecture, tool version, scenario -limits, output policy, and cleanup ownership to match. Any mismatch fails before -the experiment. It must not contact real services/accounts or claim that an -instrumented path represents an ordinary launch unless that proposition is -independently tested. - -The shipped `plan_managed_runtime_correlation` path returns an experiment plan -and records that no target code was executed. There is no runtime executor. -Runtime behavior questions therefore remain explicit unknowns with suggested -probes; static support does not perform them. +Managed inspection does not execute assemblies or observe CLR internals. +Questions about actual behavior remain unknown until supported runtime +evidence is collected. A direct process capture can retain declared inputs, +outputs, filesystem and protocol activity for a target run; it does not prove +which managed methods executed or how the CLR resolved them. ## Delivery sequence @@ -442,9 +430,7 @@ The managed-code track advances as reviewable pull requests: PE/CLI corpus shipped through `npm run verify:managed`; optional BYO `ilspycmd` real-tool oracle shipped through `REA_ILSPY_CMD_PATH`; dnSpy and pinned Windows checks remain planned); and -8. non-executing runtime-correlation planning (shipped; no runtime prerequisite - probe, execution, or confinement claim); -9. managed static Evidence projection into the application graph (shipped). +8. managed static Evidence projection into the application graph (shipped). Each implementation PR updates generated product facts only for behavior it actually ships and states which real-tool checks were performed. diff --git a/docs/mcp-contracts.md b/docs/mcp-contracts.md index 216053253..5e4f5be6c 100644 --- a/docs/mcp-contracts.md +++ b/docs/mcp-contracts.md @@ -82,10 +82,10 @@ REA runs the declared request directly and does not infer a broader target or action from it. Host requirements remain in force. macOS may deny Accessibility, -Screen Recording, or native mounting; Linux replay requires its sandbox -prerequisites; provider tools require their selected analysis runtime. These -failures are reported at the operation that needs them. A configured provider -or an endpoint alone does not establish that a target is supported. +Screen Recording, or native mounting; provider tools require their selected +analysis runtime. These failures are reported at the operation that needs +them. A configured provider or an endpoint alone does not establish that a +target is supported. Evidence bundles, snapshots, and extraction use the paths and output behavior declared by their tools. Artifact extraction materializes the selected regular diff --git a/docs/process-capture.md b/docs/process-capture.md index 79126ccf9..37a295547 100644 --- a/docs/process-capture.md +++ b/docs/process-capture.md @@ -1,54 +1,33 @@ # Process capture -Process Capture records one caller-selected command as Evidence. It is -intended for authority-versus-reconstruction checks where terminal behavior, -child lifetime, filesystem state, or dependency timing matters. +Process Capture runs one caller-selected command and records bounded evidence +about its terminal behavior, scheduled interactions, process lifetime, and +selected filesystem state. Use it to compare two direct runs of the same +scenario, such as an authority build and a reconstruction. It does not replay a +previous execution or emulate dependencies. -The harness records both raw PTY chunks and terminal states rendered by xterm. -It also records scripted input, resize and signal delivery, sampled process -metadata, named filesystem checkpoints, command-shim invocations, loopback -HTTP/WebSocket exchanges, and process exit ownership. Missing or bounded -observations remain explicit; a truncated capture is never treated as -equivalent to another capture. +The command runs with the current user's permissions and inherits the host +environment before applying the scenario's explicit overrides. This is not a +sandbox. Filesystem observation paths select what REA snapshots; they do not +restrict what the process can read or write. The inherited environment is not +recorded, so its influence may remain unknown. -Every capture includes a run manifest with canonical SHA-256 commitments for -the caller-selected scenario projection, comparison contract, executable, -normalization rules, command-shim plan, and replay plan. The manifest also -records the REA/provider versions, platform, architecture, PTY backend, and UTC -start/completion timestamps. Capture creation, Evidence import, and comparison -recompute the self-contained commitments and reject invalid lifecycle data. +## Capture a command -## Request and host behavior +Write a JSON scenario and pass its path to the CLI: -The scenario names the command and arguments, with optional working-directory, -environment overrides, and filesystem observation paths. An omitted working -directory uses the invocation's current directory. The process inherits the -host environment, then applies any declared overrides. Filesystem observation -paths select what REA records; they do not constrain what the child process can -read or write. Process Capture is not a security sandbox: the target runs with -the current user's permissions. - -Local output, arguments, environment overrides, URL query values, shim results, -and replay bodies are preserved without credential-name or text-pattern -redaction. Inputs explicitly marked `sensitive` use placeholders in Evidence. -The inherited environment is not copied into the manifest; its unrecorded -influence remains an explicit limitation. - -## Capture a scenario - -`rea capture-process` reads a JSON scenario and writes process capture -Evidence to stdout: - -```bash +```sh rea capture-process ./scenario.json > capture.json ``` -A representative scenario is: +For example: ```json { "executable": "node", "arguments": ["./signup.mjs"], + "working_directory": ".", + "environment": { "APP_MODE": "test" }, "filesystem_observation_paths": ["./state"], "terminal": { "columns": 80, "rows": 24, "scrollback": 1000 }, "events": [ @@ -58,196 +37,63 @@ A representative scenario is: "data": "user@example.test\r", "sensitive": true }, - { "type": "resize", "at_ms": 500, "columns": 100, "rows": 30 } + { "type": "resize", "at_ms": 500, "columns": 100, "rows": 30 }, + { "type": "signal", "at_ms": 1000, "signal": "SIGINT" } ], - "checkpoints": [ - { - "name": "signup_ready", - "trigger": { "type": "terminal_literal", "value": "All set!" } - }, - { "name": "root_exited", "trigger": { "type": "root_exit" } } - ], - "command_shims": [ - { - "name": "codex", - "routes": [ - { - "arguments": ["--version"], - "outputs": [ - { "at_ms": 0, "stream": "stdout", "data": "codex 1.2.3\n" } - ], - "termination": { "type": "exit", "code": 0 }, - "max_calls": 1 - } - ] - } - ] + "timeout_ms": 30000, + "idle_timeout_ms": 30000, + "settle_ms": 100 } ``` -Input events marked `sensitive` are dispatched to the PTY but stored only as a -byte-count placeholder. The command-shim directory is placed first in the -captured process `PATH`; command lookup otherwise uses the inherited or -scenario-overridden `PATH`. +`executable` is required. `arguments`, `working_directory`, `environment`, +`filesystem_observation_paths`, terminal settings, timed `events`, timeouts, +resource limits, and normalization settings have defaults; see +`processScenarioSchema` for the exact contract. Event times are milliseconds +from launch, must be ordered, and must fall within `timeout_ms`. Inputs marked +`sensitive` are sent to the process but persisted as a byte-count placeholder. +Environment overrides are recorded in the scenario commitment; inherited +values are not copied into Evidence. -Scenario arguments, environment names, timed interactions, shim routes and -output chunks, filesystem checkpoints, and static HTTP/WebSocket scripts are -accepted without fixed item-count ceilings. The run still obeys its timeout -and the configured output-byte, process, filesystem, protocol-event, body-byte, -and connection budgets; each filesystem checkpoint uses those same -bounded snapshot limits. +The capture contains raw PTY output chunks and rendered terminal states, +interaction dispatch outcomes, exit reason, sampled process-tree observations, +and settlement status. When filesystem paths are selected, REA records +`files_before` and `files_after`, then classifies observed entries as created, +deleted, modified, or unchanged. These are bounded snapshots, not a syscall +trace; short-lived changes between snapshots may be missed. With no selected +paths, filesystem effects remain unknown. -## Reactive process scenarios +Output, file count, file size, process sampling, filesystem depth, total +runtime, idle time, and post-exit settlement are bounded by the scenario's +limits. The result marks truncated observations and residual unknowns rather +than treating missing data as proof of equivalence. Cancellation and timeout +run the same owned-process cleanup path. Settlement reports whether the +sampled process group quiesced or whether cleanup was needed or unverifiable; +sampling cannot prove that every short-lived or detached descendant was seen. -Set `reactive` to a process reactive scenario declaration when interaction -must follow observed output instead of guessed delays. The graph declares an -initial state, absolute scenario and state deadlines, explicitly prioritized -transitions, caller-chosen use and visit counts, trigger predicates, ordered -actions, and either a next state or `passed` outcome. +## Compare two captures -The admitted runtime slice matches decoded UTF-8 terminal literals and exact -`terminal_raw`, `interaction`, `process`, `filesystem`, `http`, `websocket`, or -`shim` journal events. Process events are sampled observations, not an -event-complete lifecycle. Filesystem events identify named checkpoints; shim -events identify a command and route. Live predicates receive the same normalized -and redacted payload later persisted in Evidence. Predicates may compose with -`all`, `any`, `sequence`, and `repeat` nodes and may select a frontier at -scenario start, state entry, a prior checkpoint, or an exact event ID. Actions -can write PTY input, resize it, signal the root process, or capture a named -filesystem checkpoint. `terminal_rendered`, `lifecycle`, and `replay_transition` -event triggers and non-root signal selectors fail during preflight before the -target launches. +Compare saved capture Evidence with: -Reactive results are recorded in `reactive_run`, including the terminal outcome, -active state, matched event IDs, action evidence IDs, and deterministic -transition journal. The reducer retains and evaluates every admitted -observation through the scenario deadline; it has no fixed state, transition, -predicate, action, repeat, or history-count ceilings. Recursive input depth has -a stack safety guard. Terminal controls also commit the last admitted -observation order, so later output cannot be moved ahead of a timeout, -cancellation, or target loss during validation. If the process exits before the graph finishes, -the outcome is `target_lost`; state/scenario deadlines remain distinct -`predicate_timeout`/`scenario_deadline` outcomes. Timed `events` remain -available for fixed schedules, but they are not silently translated into the -reactive graph. - -## Checkpoints and deterministic shims - -Checkpoint triggers may use an elapsed time, a terminal literal and occurrence -count, root exit, or settlement. REA always includes `before` and -`after_settlement` snapshots. Snapshot effects are relative to the preceding -checkpoint, so transient files remain visible even when the final tree matches -the initial tree. - -Each command shim matches an exact argument array. Routes can emit timed stdout -or stderr chunks and then exit or receive `SIGINT`, `SIGTERM`, or `SIGKILL`. -Unmatched and exhausted calls are recorded. Shim observations are included in -the capture without a separate fixed count ceiling. Other configured -observation and byte budgets remain explicit in the capture result when they -affect completeness. - -## Run a replay machine directly - -Use `rea run-replay-machine ./run.json` to validate a finite replay machine -against an ordered `events` array without launching a process or opening a -socket. MCP clients use `run_replay_machine` with the same `{ machine, events }` -input. The result retains one decision per offered event, a transition journal -with capture alias metadata, and one redacted action-table entry per used -transition. It never returns request bodies, request headers, or captured -values. It also reports the initial and final states, whether the final state is -terminal, configured limits, and committed usage. - -The direct evaluator has no fixed state, transition, event, guard, capture, -action, or action-byte count ceiling. It indexes transitions by protocol and -path, evaluates events in order, and returns a decision for each offered event -plus actions for used transitions. Caller-declared `max_uses`, `max_visits`, -`max_transitions`, and protocol budgets determine the finite run; there is no -upper schema cap on those values. Result size follows the input and is not -truncated by an arbitrary item quota. - -Refused events remain data rather than aborting the run. Outcomes distinguish -unmatched events, invalid states, failed guards, exhausted transitions, invalid -captures, unexpected reconnects, and exhausted limits. This direct runner -evaluates the same domain runtime used by loopback Process Capture, but performs -no network or target execution. - -## Compare captures - -Compare two saved Evidence records with: - -```bash +```sh rea compare-process-captures authority.json reconstruction.json ``` -Pass an optional third path, `rea compare-process-captures authority.json -reconstruction.json trace.json`, when valid executions may differ in declared -concurrent ordering. MCP callers pass the same object as `trace_spec` to -`compare_process_captures`. A trace specification declares exact named events -and chooses one language: +The comparison checks terminal, interaction, exit, filesystem, and +process observations under a shared comparison contract. It reports observed +differences with their locations, while residual unknowns or truncated +observations prevent a complete-equivalence claim. Matching scenario +commitments do not reveal whether redacted sensitive inputs were equal. -- `partial_order` requires every event pair to be related by a - `happens_before` edge (including transitive edges) or an explicit - `unordered_groups` declaration. `not_before` expresses negative ordering - constraints without inferring causality. Optional `prefix` and `suffix` - arrays remain exact. -- `finite_traces` lists the complete accepted variants. An `unordered` token - accepts permutations of exactly its declared event multiset; it does not - drop or broadly sort events. +For scenarios where independent scheduling can change event order, the CLI +also accepts an optional trace-specification JSON file as the third argument. +That specification must state the exact events and ordering constraints to +accept; it does not discard unmatched observations or make timestamps into +causal evidence. Trace comparison returns `unknown` when a capture lacks the +required complete event journal or contains relevant residual unknowns. -Each event uses one source family (`terminal_raw`, `terminal_rendered`, -`interaction`, `lifecycle`, `process`, `filesystem`, `http`, `websocket`, -`shim`, or `replay_transition`), an exact JSON payload, and a discriminated -cardinality: `required`, `optional`, `exact`, or `range`. Specifications with -duplicate or overlapping predicates, unknown references, cycles, implicit -ordering gaps, ordered/unordered conflicts, or finite variants that violate -cardinality are rejected before comparison. - -Event payloads are exact by default. To compare schedules whose recorder -metadata necessarily changes, an event may explicitly list top-level -`ignore_fields` from the bounded set `sequence`, `at_ms`, `scheduled_at_ms`, -`dispatched_at_ms`, and `elapsed_ms`; its `exact` object must omit those fields. -All predicates for one source use the same ignore set, so relaxed metadata -cannot create declaration-order matching ambiguity. Other payload fields are -never dropped or normalized by trace comparison. - -Process Capture records a monotonic `event_journal` at observation time. Trace -comparison uses only this capture order for cross-source causality; timestamps -are retained as event data but never promoted into happens-before evidence. -Older captures without a complete journal, truncated captures, and relevant -residual unknowns return a trace verdict of `unknown`. A passing result retains -each side's raw journal locations and identifies either the matched finite -variant or the complete satisfied constraint set. A failure returns the first -declaration-ordered predicate, cardinality, edge, prefix, suffix, or language -violation with its relevant event locations. -If both captures have the same invalid declared trace, the nested verdict is -`nonconforming` while the top-level capture comparison remains unchanged. Side -statuses and the diagnostic distinguish conformance from pairwise difference. - -The result classifies terminal, interaction, exit, filesystem, protocol, -process, and shim behavior. `first_divergence` points to the earliest observed -difference. Residual unknowns prevent a claim of complete equivalence, but they -do not hide an observed difference in another dimension. - -Captures must have equal comparison-contract commitments, but may identify -different scenarios and executables. MCP callers may set `max_capture_age_ms`; -the application clock then rejects stale captures before comparison. - -## Limits and lifecycle behavior - -Scenarios bound output bytes, frames, files, file bytes, process observations, -protocol/shim events, connections, filesystem depth, total runtime, idle time, -and settlement time. Process trees are sampled rather than syscall-traced, and -short-lived descendants may be missed. Filesystem observations are snapshots, -not filesystem event streams. - -REA tags launched processes with a private run identifier. During cleanup it -revalidates that identifier before signaling sampled process groups, including -groups detached from the original parent. Temporary HOME, replay, shim, -terminal, checkpoint, and sampling resources are released on success, failure, -timeout, and cancellation. - -After root exit, REA checks token-owned process groups every 50 ms. Two -consecutive empty observations establish `quiesced`; the settlement deadline -otherwise produces `alive_at_deadline`, while inspection or identity failures -produce `unverifiable`. Sampling can still miss short-lived or early-detached -descendants, which remains a residual unknown. +Each capture carries commitments for the selected scenario, executable, +comparison contract, and normalization rules. Comparison rejects captures +whose comparison contracts differ. Captures are local Evidence files; keep +their source artifacts and invocation context available when interpreting a +difference. diff --git a/docs/product-catalog.json b/docs/product-catalog.json index 1da812877..df50bfea1 100644 --- a/docs/product-catalog.json +++ b/docs/product-catalog.json @@ -10,7 +10,7 @@ "skill_version": "23" }, "tools": { - "total": 122, + "total": 116, "families": [ { "id": "direct", @@ -61,13 +61,12 @@ { "id": "enhanced", "surface": "enhanced", - "count": 15, + "count": 14, "tools": [ "analyze_function", "analyze_swift_types", "batch_decompile", "binary_overview", - "find_code_for_string", "find_xrefs_to_name", "get_call_graph", "get_objc_classes", @@ -109,14 +108,13 @@ { "id": "managed", "surface": "managed", - "count": 8, + "count": 7, "tools": [ "compare_managed_members", "import_managed_reconstruction", "inspect_managed_artifact", "inspect_managed_members", "inspect_managed_native_boundaries", - "plan_managed_runtime_correlation", "project_managed_application_graph", "verify_managed_native_boundaries" ] @@ -161,16 +159,13 @@ { "id": "application", "surface": "application-workflow", - "count": 10, + "count": 7, "tools": [ "build_reconstruction_obligation_ledger", "compare_application_versions", "compare_javascript_export_shapes", "compare_source_to_bundle", "evaluate_reconstruction_coverage", - "execute_node_characterization", - "prepare_node_characterization", - "run_controlled_replay", "trace_application_feature", "trace_javascript_semantics" ] @@ -178,7 +173,7 @@ { "id": "session", "surface": "session", - "count": 22, + "count": 21, "tools": [ "binary_session", "build_call_path", @@ -198,7 +193,6 @@ "list_unknowns", "open_binary", "record_unknown", - "run_replay_machine", "update_unknown", "verify_reconstruction", "verify_unknown_resolution" @@ -344,7 +338,6 @@ "capabilities": [ "compare_managed_members", "import_managed_reconstruction", - "plan_managed_runtime_correlation", "project_managed_application_graph", "verify_managed_native_boundaries" ] @@ -365,9 +358,6 @@ "compare_javascript_export_shapes", "compare_source_to_bundle", "evaluate_reconstruction_coverage", - "execute_node_characterization", - "prepare_node_characterization", - "run_controlled_replay", "trace_application_feature", "trace_javascript_semantics" ] @@ -445,7 +435,7 @@ } ], "cli": { - "primary_count": 74, + "primary_count": 69, "commands": [ "analyze", "analyze-javascript-application", @@ -473,7 +463,6 @@ "evaluate-reconstruction-coverage", "evidence-export", "evidence-import", - "execute-node-characterization", "extract-artifact", "function", "import-managed-reconstruction", @@ -502,14 +491,10 @@ "observe-javascript-runtime", "observe-native-ui", "observe-web-session", - "plan-managed-runtime-correlation", - "prepare-node-characterization", "project-managed-application-graph", "providers", "reconcile-javascript-runtime", "resolve-native-call-targets", - "run-controlled-replay", - "run-replay-machine", "search", "setup", "trace", @@ -531,15 +516,15 @@ }, "runtime_catalog": { "counts": { - "cli_commands": 74, - "mcp_tools": 122, + "cli_commands": 69, + "mcp_tools": 116, "mcp_prompts": 6 }, "digests": { - "tools_sha256": "9f2b8a77ca7d972dedddf33294f5addb5fc7e00ce43ae5de21be989e0777871a", + "tools_sha256": "ff29fddb875d335c400902e846377990fa4276f04e4494a255dd3986a0fd7896", "prompts_sha256": "4762db348821fec787a5b8c6423f2c48a71f6f0ec2afee97b16ad69030ec504b", - "combined_sha256": "3a0e6d66df95b913797ce2e4548e97d409d6e8768023f8a7a23d8d85ae9d766f", - "providers_sha256": "c5a88a49990fafc8244972ee8ff543fc19995eb79db960da55f6a311e15340d1" + "combined_sha256": "73a4cdf4fc83b1728426931ff89e2113f1c8beb1b3bf337c179f2c349ce3c0f2", + "providers_sha256": "2ae8b85b20be338739e500549d275e78e875aaa10235d2ca283f0ade7787da90" } } } diff --git a/docs/roadmap.md b/docs/roadmap.md index f036a8055..342a7ccea 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -37,8 +37,8 @@ related-tool change; setup must never install Java. Before enabling Windows Ghidra operations, add current-user-only DACL creation and readback, handle-based reparse-point-safe path authority, a DACL-protected IPC backend, and Job Object assignment before provider execution. Process capture, -controlled replay, Hopper, and broad filesystem-sensitive workflows remain -separate Windows projects rather than implied parity. +Hopper, and broad filesystem-sensitive workflows remain separate Windows +projects rather than implied parity. ## Capability-selective setup diff --git a/docs/testing.md b/docs/testing.md index 605411d0c..7756b6c10 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -45,10 +45,13 @@ The process-global Vitest configuration contract rejects new direct temporary-ro creation outside the workspace seam and its narrowly documented boundary/package exceptions. -Real Hopper, Ghidra, browser, package, managed-code, and controlled-replay -claims belong to their explicit `npm run verify:*` lanes. They are not inferred -from mocks or folded into the deterministic local gate. Real model trials are -manual; Vitest covers only deterministic evaluator logic. +Real Hopper, Ghidra, browser, package, and managed-code claims belong to their +explicit `npm run verify:*` lanes. The reconstruction-readiness lane also +checks deterministic rerun, tamper, and stale-input handling; those checks do +not execute extracted JavaScript modules. When application runtime behavior is +needed, exercise the actual target through browser, Electron, or process +capture. Real model trials are manual; Vitest covers deterministic evaluator +logic. ## End-to-end, integration and golden evidence diff --git a/docs/tool-design.md b/docs/tool-design.md index 24bd55b31..965e4243c 100644 --- a/docs/tool-design.md +++ b/docs/tool-design.md @@ -8,14 +8,14 @@ protocol, authority, and resource-safety constraints, and report their effects. ## Choose the tool shape -| Shape | Use it for | Contract should return | -| -------------------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | -| `inspect` | Facts about one explicit target, address, object, or resource | Relevant fields, source locations, and facet-level availability | -| `search` / `list` | Finding candidate targets or entities | Stable ordering and useful result context; expose pagination when the result format or caller's query needs it | -| `trace` | Relationships across code, metadata, UI resources, or observations | Typed edges, supporting evidence, and unresolved paths; identify any genuine traversal boundary | -| `compare` | Two explicitly identified artifacts, versions, or evidence sets | Paired identity, comparable coverage, and deltas with evidence | -| `workflow` | A distinct analyst outcome that benefits from composition inside REA | A useful inline result, contributing evidence, and partial/unavailable facets | -| `observe` / `capture` / `replay` | A question that requires runtime behavior | Required authority, launch/attach behavior, real operational constraints, lifecycle, and cleanup status | +| Shape | Use it for | Contract should return | +| --------------------- | -------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | +| `inspect` | Facts about one explicit target, address, object, or resource | Relevant fields, source locations, and facet-level availability | +| `search` / `list` | Finding candidate targets or entities | Stable ordering and useful result context; expose pagination when the result format or caller's query needs it | +| `trace` | Relationships across code, metadata, UI resources, or observations | Typed edges, supporting evidence, and unresolved paths; identify any genuine traversal boundary | +| `compare` | Two explicitly identified artifacts, versions, or evidence sets | Paired identity, comparable coverage, and deltas with evidence | +| `workflow` | A distinct analyst outcome that benefits from composition inside REA | A useful inline result, contributing evidence, and partial/unavailable facets | +| `observe` / `capture` | A question that requires runtime behavior | Required authority, launch/attach behavior, real operational constraints, lifecycle, and cleanup status | These are task shapes, not required prefixes. Name a tool for the action and object agents reason about; keep the name distinct from nearby alternatives. diff --git a/docs/verification/managed-conformance-ledger.json b/docs/verification/managed-conformance-ledger.json index b56aa3898..0476f20a4 100644 --- a/docs/verification/managed-conformance-ledger.json +++ b/docs/verification/managed-conformance-ledger.json @@ -1,5 +1,5 @@ { - "ledger_id": "ecl_b01c0b28362b48128765d176113471a5a82637fca0acfcd3182971155942e0d4", + "ledger_id": "ecl_132e857a8a93f0b366cd72f9cfa1c338ffd4100460a7834ef69abff936c84472", "records": [ { "claim_id": "managed.application-graph-projection", @@ -78,13 +78,6 @@ "ev_f974f4b9d039cda841894c6173cae86427ecef48f4e7a4d6c73edf7b23af2b2a" ] }, - { - "claim_id": "managed.runtime-correlation-admission-plan", - "status": "pass", - "evidence_ids": [ - "ev_3e546c20493faf9696502171a5cfe9504569cffb22f0561ee3000f0027b9bbd8" - ] - }, { "claim_id": "managed.unicode-obfuscated-identifiers", "status": "pass", @@ -101,8 +94,8 @@ } ], "summary": { - "total": 14, - "pass": 12, + "total": 13, + "pass": 11, "fail": 0, "unsupported": 2, "truncated": 0, diff --git a/docs/verification/managed-conformance-manifest.json b/docs/verification/managed-conformance-manifest.json index 9c72c7ee2..861486e9c 100644 --- a/docs/verification/managed-conformance-manifest.json +++ b/docs/verification/managed-conformance-manifest.json @@ -1,5 +1,5 @@ { - "manifest_id": "ecm_d8e34c1218d199b3639830b184f02f87642c42aa9e8e8e2474f8daa60e1645ac", + "manifest_id": "ecm_c47e33ff69b099583ff6a3b19cb06b602040ecc735351cbac21b897501c4cffe", "verifier": { "id": "rea-managed-conformance", "version": "1" @@ -13,7 +13,7 @@ "skill_digests": [ { "skill_id": "reverse-engineer-anything", - "sha256": "7d767925a840318504e9f1712a6ecc4a985cd7a08f00bffe36105b75481a54c2" + "sha256": "54490266ef46ed8e57354dbca8cc1ad74ab6b7f21d38116bebfc87a04bfb55a5" } ], "claims": [ @@ -169,20 +169,6 @@ "version": "1" } }, - { - "claim_id": "managed.runtime-correlation-admission-plan", - "scenario": { - "id": "runtime-correlation-admission-plan", - "version": 1 - }, - "artifact_sha256s": [ - "cead4cc99733e4e56a5fd0cec8a0813bbc24e249aa72a10eca4c47ee3b0e129d" - ], - "provider": { - "id": "rea-managed-conformance", - "version": "1" - } - }, { "claim_id": "managed.unicode-obfuscated-identifiers", "scenario": { diff --git a/docs/windows-ghidra-p0.md b/docs/windows-ghidra-p0.md index 623c7c0f9..dff18699f 100644 --- a/docs/windows-ghidra-p0.md +++ b/docs/windows-ghidra-p0.md @@ -21,9 +21,9 @@ Once the required native controls are implemented, the intended P0 is limited to - an explicit native, non-managed, non-DLL x86-64 PE application; and - the 22 read-only Ghidra inventory and function-analysis operations. -Hopper, Ghidra GUI state, mutation, controlled JavaScript replay, process -capture, browser/Electron observation, artifact extraction, and general -Windows feature parity are not implied by this boundary. Managed PE/CLI +Hopper, Ghidra GUI state, mutation, process capture, browser/Electron +observation, artifact extraction, and general Windows feature parity are not +implied by this boundary. Managed PE/CLI inspection remains a separate execution-free provider and is not routed through Windows Ghidra P0. diff --git a/package.json b/package.json index 0e15ea0e4..0185f6252 100644 --- a/package.json +++ b/package.json @@ -132,7 +132,6 @@ "verify:javascript-runtime": "npm run build:cached && node scripts/verify-local-javascript-runtime.mjs", "verify:application-workflows": "npm run build:cached && node scripts/verify-local-application-workflows.mjs", "verify:managed": "npm run build:cached && node scripts/verify-managed-conformance.mjs", - "verify:replay": "npm run build:cached && node scripts/verify-real-javascript-replay.mjs", "verify:agent": "npm run build:cached && node scripts/verify-agent-experience.mjs", "verify:hopper:linux": "npm run verify:fixtures && npm run build:cached && node scripts/verify-real-hopper-linux.mjs", "verify:setup:linux": "npm run build:cached && node scripts/verify-linux-setup-e2e.mjs", diff --git a/scripts/lib/browser-scenario-verifier.mjs b/scripts/lib/browser-scenario-verifier.mjs index 6cc371fe3..6c7836e8d 100644 --- a/scripts/lib/browser-scenario-verifier.mjs +++ b/scripts/lib/browser-scenario-verifier.mjs @@ -53,7 +53,6 @@ export function browserScenario(browser, origin) { }, ], }, - allowed_origins: [origin], environment: { viewport: { width: 1_280, height: 720, device_scale_factor: 1.25 }, locale: "en-US", @@ -83,7 +82,6 @@ export function browserScenario(browser, origin) { }, ], storage: duplicateOriginStorage(origin), - request_replay: { mode: "disabled" }, secrets: [ { secret_id: "verifier_url", diff --git a/scripts/lib/browser-screenshot-e2e.mjs b/scripts/lib/browser-screenshot-e2e.mjs index 10c74f049..e7da037ab 100644 --- a/scripts/lib/browser-screenshot-e2e.mjs +++ b/scripts/lib/browser-screenshot-e2e.mjs @@ -77,7 +77,6 @@ export async function verifyLargeScreenshotE2e(endpoint, origin) { name: "capture_web_screenshot", arguments: { cdp_endpoint: endpoint, - allowed_origins: [origin], target_id: target.id, }, }, diff --git a/scripts/lib/managed-completion-report.mjs b/scripts/lib/managed-completion-report.mjs index 45b74f555..01124d604 100644 --- a/scripts/lib/managed-completion-report.mjs +++ b/scripts/lib/managed-completion-report.mjs @@ -93,11 +93,6 @@ const sourceOwnedClaims = ({ scenarioId: "decompiler-reconstruction-import", targets: [obfuscated.target], }), - completionClaim({ - claimId: "managed.runtime-correlation-admission-plan", - scenarioId: "runtime-correlation-admission-plan", - targets: [obfuscated.target], - }), completionClaim({ claimId: "managed.mvid-and-token-drift", scenarioId: "mvid-and-token-drift", diff --git a/scripts/verify-agent-experience.mjs b/scripts/verify-agent-experience.mjs index 2cfdc1b30..62ee3ffeb 100644 --- a/scripts/verify-agent-experience.mjs +++ b/scripts/verify-agent-experience.mjs @@ -82,7 +82,7 @@ try { "depth = 1", ], ["static", "inferred"], - ["runtime", "replay"], + ["runtime", "behavioral probes"], ], prompt: `Without directly reading target files, compare the default export in parser.mjs between ${targets.javascriptShapeLeft} and ${targets.javascriptShapeRight}. Use REA to analyze each shipped artifact and then compare its exact static export return shapes. State the exact heading-shape change, cite produced Evidence, and distinguish static inference from runtime semantics.`, }, @@ -283,13 +283,13 @@ async function createTargets(root, includeManaged) { mkdir(javascriptShapeRight, { recursive: true }), ]); await Promise.all([ - cp( - join(repositoryRoot, "tests/fixtures/replay/parser.mjs"), + writeFile( join(javascriptShapeLeft, "parser.mjs"), + 'export default function parse() { return { heading: "Title" }; }\n', ), - cp( - join(repositoryRoot, "tests/fixtures/replay/parser-v2.mjs"), + writeFile( join(javascriptShapeRight, "parser.mjs"), + 'export default function parse() { return { heading: { text: "Title", level: 1 } }; }\n', ), ]); diff --git a/scripts/verify-managed-conformance.mjs b/scripts/verify-managed-conformance.mjs index f0b15b6ff..ecb226c4b 100644 --- a/scripts/verify-managed-conformance.mjs +++ b/scripts/verify-managed-conformance.mjs @@ -1,4 +1,4 @@ -import { mkdtemp, rm, writeFile } from "node:fs/promises"; +import { mkdtemp, rm } from "node:fs/promises"; import { tmpdir } from "node:os"; import { join } from "node:path"; import assert from "node:assert/strict"; @@ -9,7 +9,6 @@ import { inspectManagedNativeBoundariesBytes } from "../dist/dotnet/ManagedNativ import { compareManagedMemberPaths } from "../dist/application/ManagedMemberComparisonService.js"; import { verifyManagedNativeBoundariesEvidence } from "../dist/application/ManagedNativeVerificationService.js"; import { importManagedReconstructionEvidence } from "../dist/application/ManagedReconstructionService.js"; -import { planManagedRuntimeCorrelationEvidence } from "../dist/application/ManagedRuntimeCorrelationService.js"; import { projectManagedApplicationGraphEvidence } from "../dist/application/ManagedApplicationGraphService.js"; import { traceApplicationFeatureEvidence } from "../dist/application/JavaScriptApplicationWorkflowService.js"; import { MANAGED_STATIC_PROVIDER } from "../dist/application/InvestigationProviders.js"; @@ -249,9 +248,8 @@ try { assert.equal(obfuscatedMembers.types[0]?.full_name, "Fixture.ꙮType"); assert.equal(obfuscatedMembers.methods[0]?.name, "λ⛧"); assert.equal(obfuscatedMembers.fields[0]?.name, "字段"); - const runtimeExecutable = process.execPath; - const runtimeMethod = obfuscatedMembers.methods[0]; - assert.ok(runtimeMethod); + const reconstructionMethod = obfuscatedMembers.methods[0]; + assert.ok(reconstructionMethod); const obfuscatedMembersEvidence = createEvidence( undefined, MANAGED_STATIC_PROVIDER, @@ -274,9 +272,9 @@ try { }, methods: [ { - token: runtimeMethod.token, - signature_sha256: runtimeMethod.signature.raw_sha256, - normalized_il_sha256: runtimeMethod.body.normalized_il_sha256, + token: reconstructionMethod.token, + signature_sha256: reconstructionMethod.signature.raw_sha256, + normalized_il_sha256: reconstructionMethod.body.normalized_il_sha256, reconstruction: { kind: "decompiled-csharp", language: "csharp", @@ -293,45 +291,6 @@ try { false, ); assert.equal(reconstructionImport.value.confidence, "inferred"); - const runtimePlan = await planManagedRuntimeCorrelationEvidence( - { configuration: () => ({ executablePath: runtimeExecutable }) }, - { - static_members: obfuscatedMembersEvidence, - method: { - token: runtimeMethod.token, - signature_sha256: runtimeMethod.signature.raw_sha256, - normalized_il_sha256: runtimeMethod.body.normalized_il_sha256, - }, - requested_effect: "debugger", - host: { - os: "linux", - clr_family: "dotnet", - architecture: "x86_64", - }, - bounds: { - timeout_ms: 5_000, - max_threads: 32, - max_output_bytes: 65_536, - allow_network: false, - allow_ui: false, - }, - }, - ); - assert.equal(runtimePlan.ok, true); - assert.equal(runtimePlan.value.normalized_result.executed, false); - assert.equal( - runtimePlan.value.normalized_result.unsupported_until_executor_exists, - true, - ); - assert.equal( - runtimePlan.value.normalized_result.effect_taxonomy.uses_debugger, - true, - ); - assert.equal( - runtimePlan.value.normalized_result.requested_runtime.confinement, - "not-established", - ); - const left = await fixture("token-drift-left.exe", { methodName: "StableSemanticSlice", }); @@ -410,7 +369,7 @@ try { process.stdout.write( `${JSON.stringify({ verified: - 12 + + 11 + (operatorManifest === null ? 0 : 1) + (ilspyOracle === null ? 0 : 1), managedSurfaces: [ @@ -420,7 +379,6 @@ try { "compare_managed_members", "verify_managed_native_boundaries", "import_managed_reconstruction", - "plan_managed_runtime_correlation", "project_managed_application_graph", ], coverage: [ @@ -431,7 +389,6 @@ try { "managed-application-graph-projection", "unicode-obfuscated-identifiers", "decompiler-reconstruction-import", - "runtime-correlation-admission-plan", "mvid-and-token-drift", "not-managed", "malformed-metadata", diff --git a/scripts/verify-package-managed.mjs b/scripts/verify-package-managed.mjs index beebc7fe2..99a0be52a 100644 --- a/scripts/verify-package-managed.mjs +++ b/scripts/verify-package-managed.mjs @@ -115,69 +115,6 @@ const verifyManagedReconstruction = async ({ throw new Error("packaged managed reconstruction import CLI failed"); }; -const verifyManagedRuntimePlan = async ({ - cli, - managedMembers, - managedMethod, - workspace, - environment, -}) => { - const managedRuntimePlanInput = { - static_members: managedMembers, - method: { - token: managedMethod.token, - signature_sha256: managedMethod.signature.raw_sha256, - normalized_il_sha256: managedMethod.body.normalized_il_sha256, - }, - requested_effect: "attach", - host: { - os: "linux", - clr_family: "dotnet", - architecture: "x86_64", - }, - bounds: { - timeout_ms: 5_000, - max_threads: 32, - max_output_bytes: 65_536, - allow_network: false, - allow_ui: false, - }, - }; - const managedRuntimePlan = json( - await run( - cli, - [ - "plan-managed-runtime-correlation", - JSON.stringify(managedRuntimePlanInput), - "--json", - ], - { - ...environment, - REA_MANAGED_RUNTIME_EXECUTABLE_PATH: process.execPath, - }, - ), - ); - if ( - managedRuntimePlan.operation !== "plan_managed_runtime_correlation" || - managedRuntimePlan.provider?.id !== "rea-dotnet-workflows" || - managedRuntimePlan.normalized_result?.executed !== false || - managedRuntimePlan.normalized_result?.unsupported_until_executor_exists !== - true || - managedRuntimePlan.normalized_result?.effect_taxonomy?.attaches_process !== - true || - managedRuntimePlan.normalized_result?.effect_taxonomy - ?.invokes_target_code !== false - ) - throw new Error("packaged managed runtime-correlation CLI failed"); - if ( - managedRuntimePlan.normalized_result?.requested_runtime?.confinement !== - "not-established" - ) - throw new Error( - "packaged managed runtime plan claimed unverified confinement", - ); -}; - const verifyManagedBoundaries = async ({ cli, managedPath, environment }) => { const managedBoundaries = json( await run( @@ -363,13 +300,6 @@ export async function verifyManaged({ cli, workspace, environment }) { managedMethod, environment, }); - await verifyManagedRuntimePlan({ - cli, - managedMembers, - managedMethod, - workspace, - environment, - }); const managedBoundaries = await verifyManagedBoundaries({ cli, managedPath, diff --git a/scripts/verify-package.mjs b/scripts/verify-package.mjs index ab8e48b59..32937264e 100644 --- a/scripts/verify-package.mjs +++ b/scripts/verify-package.mjs @@ -117,7 +117,7 @@ try { evidenceRoot, }); process.stdout.write( - `${JSON.stringify({ verifier_run: await completeVerifierRun(verifierRun), cli: true, analysisCli: true, artifactCli: true, managedCli: true, managedReconstructionCli: true, managedNativeVerificationCli: true, managedRuntimePlanCli: true, managedApplicationGraphCli: true, evidenceCli: true, incurMcpCommand: PRODUCT_IDENTITY.mcpCommand, lifecycleScriptsRequired: false, doctor: "platform-appropriate", setup: supportedSetupHost ? "planned-then-idempotent" : "unsupported-host-rejected", setupPlanReadOnly: supportedSetupHost, existingHopperPreserved: supportedSetupHost, clients: supportedSetupHost ? 3 : 0, backupReadback: supportedSetupHost, failureRecovery: supportedSetupHost, configSymlinkLifecycle: supportedSetupHost, skill: supportedSetupHost, skillReferences: supportedSetupHost, mcpTools: TOOL_CONTRACTS.length, mcpPrompts: prompts.names.length, promptCompletion: true, promptCompletionLifecycle: true, evidenceMcp: true, targetFree: true, targetLifecycle: true, boundedRegexBridge: true, mcpStartup, mcpModuleLoading })}\n`, + `${JSON.stringify({ verifier_run: await completeVerifierRun(verifierRun), cli: true, analysisCli: true, artifactCli: true, managedCli: true, managedReconstructionCli: true, managedNativeVerificationCli: true, managedApplicationGraphCli: true, evidenceCli: true, incurMcpCommand: PRODUCT_IDENTITY.mcpCommand, lifecycleScriptsRequired: false, doctor: "platform-appropriate", setup: supportedSetupHost ? "planned-then-idempotent" : "unsupported-host-rejected", setupPlanReadOnly: supportedSetupHost, existingHopperPreserved: supportedSetupHost, clients: supportedSetupHost ? 3 : 0, backupReadback: supportedSetupHost, failureRecovery: supportedSetupHost, configSymlinkLifecycle: supportedSetupHost, skill: supportedSetupHost, skillReferences: supportedSetupHost, mcpTools: TOOL_CONTRACTS.length, mcpPrompts: prompts.names.length, promptCompletion: true, promptCompletionLifecycle: true, evidenceMcp: true, targetFree: true, targetLifecycle: true, boundedRegexBridge: true, mcpStartup, mcpModuleLoading })}\n`, ); } finally { if (tarball) await rm(join(root, tarball), { force: true }); diff --git a/scripts/verify-real-browser.mjs b/scripts/verify-real-browser.mjs index 502149e8f..8abb6534e 100644 --- a/scripts/verify-real-browser.mjs +++ b/scripts/verify-real-browser.mjs @@ -82,7 +82,7 @@ try { }); const endpoint = `http://127.0.0.1:${String(port)}`; const provider = new CdpBrowserProvider(); - const target = await pageTarget(provider, endpoint, site.origin); + const target = await pageTarget(provider, endpoint); const observed = await provider.inspectPage( inspectWebPageInputSchema.parse({ cdp_endpoint: endpoint, @@ -355,7 +355,7 @@ try { } async function verifyPageScopedTransport(provider, proxy, origin) { - const target = await pageTarget(provider, proxy.endpoint, origin); + const target = await pageTarget(provider, proxy.endpoint); const input = inspectWebPageInputSchema.parse({ cdp_endpoint: proxy.endpoint, allowed_origins: [origin], @@ -432,12 +432,11 @@ async function browserExecutable() { ); } -async function pageTarget(provider, endpoint, origin) { +async function pageTarget(provider, endpoint) { for (let attempt = 0; attempt < 100; attempt += 1) { const listed = await provider.listTargets( listBrowserTargetsInputSchema.parse({ cdp_endpoint: endpoint, - allowed_origins: [origin], }), ); if (listed.ok && listed.value.targets[0] !== undefined) diff --git a/scripts/verify-real-javascript-replay.mjs b/scripts/verify-real-javascript-replay.mjs deleted file mode 100644 index e533de2f2..000000000 --- a/scripts/verify-real-javascript-replay.mjs +++ /dev/null @@ -1,314 +0,0 @@ -#!/usr/bin/env node - -import { readFile, realpath } from "node:fs/promises"; -import { resolve } from "node:path"; - -import { runControlledReplay } from "../dist/application/JavaScriptReplayService.js"; -import { LinuxJavaScriptReplayRunner } from "../dist/replay/LinuxJavaScriptReplayRunner.js"; -import { SystemJavaScriptReplayHost } from "../dist/replay/SystemJavaScriptReplayHost.js"; -import { completeVerifierRun, createVerifierRun } from "./lib/verifier-run.mjs"; - -const verifierRun = createVerifierRun(); - -const suppliedInputPath = process.env.REA_REPLAY_INPUT_PATH; -const suppliedInput = - suppliedInputPath === undefined - ? undefined - : JSON.parse(await readFile(await realpath(suppliedInputPath), "utf8")); -const canonicalSide = async (side) => ({ - ...side, - modules: await Promise.all( - side.modules.map(async (module) => ({ - ...module, - path: await realpath(module.path), - })), - ), -}); -const leftPath = await realpath( - process.env.REA_REPLAY_LEFT_PATH ?? - resolve("tests/fixtures/replay/parser.mjs"), -); -const rightPath = await realpath( - process.env.REA_REPLAY_RIGHT_PATH ?? - resolve("tests/fixtures/replay/parser-v2.mjs"), -); -const suppliedLeft = - suppliedInput === undefined - ? undefined - : await canonicalSide(suppliedInput.left); -const suppliedRight = - suppliedInput?.right === undefined - ? undefined - : await canonicalSide(suppliedInput.right); -const configuration = { - nodePath: process.execPath, - bubblewrapPath: - process.env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH ?? "/usr/bin/bwrap", - systemdRunPath: - process.env.REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH ?? - "/usr/bin/systemd-run", - systemctlPath: - process.env.REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH ?? "/usr/bin/systemctl", - shellPath: process.env.REA_JAVASCRIPT_REPLAY_SHELL_PATH ?? "/usr/bin/bash", -}; -const dependencies = { - configuration: () => configuration, - host: new SystemJavaScriptReplayHost(), - runner: new LinuxJavaScriptReplayRunner(), -}; -const defaultInput = { - mode: "plan", - left: { - modules: [ - { - alias: "parser", - path: leftPath, - format: "esm", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "parser", - entry_export: "default", - }, - right: { - modules: [ - { - alias: "parser", - path: rightPath, - format: "esm", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "parser", - entry_export: "default", - }, - cases: [ - { case_id: "heading", arguments: ["# Title"] }, - { case_id: "plain", arguments: ["plain"] }, - ], - generator: { preset: "parser-boundaries", seed: 7, count: 4 }, -}; -const suppliedPlanInput = - suppliedInput === undefined - ? undefined - : (({ approved: _approved, plan_digest: _planDigest, ...planInput }) => - planInput)(suppliedInput); -const input = - suppliedPlanInput === undefined - ? defaultInput - : { - ...suppliedPlanInput, - mode: "plan", - left: suppliedLeft, - ...(suppliedRight === undefined ? {} : { right: suppliedRight }), - reproducer_export: undefined, - }; - -const planned = await runControlledReplay(dependencies, input); -if (!planned.ok) { - if (process.env.REA_REPLAY_ALLOW_UNAVAILABLE === "true") { - process.stdout.write( - `${JSON.stringify({ verifier_run: await completeVerifierRun(verifierRun), available: false, error_tag: planned.error._tag })}\n`, - ); - process.exit(0); - } - throw planned.error; -} -const plan = planned.value.plan; -if (plan === null || typeof plan.plan_digest !== "string") - throw new Error("Real replay verifier did not receive a plan"); -const executed = await runControlledReplay(dependencies, { - ...input, - mode: "execute", - plan_digest: plan.plan_digest, -}); -if (!executed.ok) throw executed.error; -const evidence = executed.value.evidence; -if ( - evidence === null || - evidence.authority !== "controlled-replay" || - evidence.environment?.isolation !== "container" || - evidence.normalized_result.termination !== "completed" || - evidence.normalized_result.cleanup.state !== "complete" || - evidence.normalized_result.comparison?.some( - ({ status }) => status === "unknown", - ) === true -) - 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( - `${JSON.stringify({ - verifier_run: await completeVerifierRun(verifierRun), - available: true, - supplied_manifest: true, - plan_digest: plan.plan_digest, - evidence_id: evidence.evidence_id, - source_evidence_ids: executed.value.source_evidence.map( - ({ evidence_id: id }) => id, - ), - left_sha256: plan.left.modules.map(({ sha256 }) => sha256), - right_sha256: plan.right?.modules.map(({ sha256 }) => sha256) ?? [], - cases: plan.cases.length, - comparison: - evidence.normalized_result.comparison?.map(({ case_id, status }) => ({ - case_id, - status, - })) ?? [], - cleanup: evidence.normalized_result.cleanup.state, - })}\n`, - ); - process.exit(0); -} - -const runSingle = async (path, limits = undefined) => { - const manifest = { - mode: "plan", - left: { - modules: [ - { - alias: "entry", - path: await realpath(path), - format: "esm", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "entry", - entry_export: "default", - }, - cases: [{ case_id: "probe", arguments: [] }], - ...(limits === undefined ? {} : { limits }), - }; - const proposed = await runControlledReplay(dependencies, manifest); - if (!proposed.ok || proposed.value.plan === null) - throw new Error("Replay conformance plan failed"); - const observed = await runControlledReplay(dependencies, { - ...manifest, - mode: "execute", - plan_digest: proposed.value.plan.plan_digest, - }); - if (!observed.ok || observed.value.evidence === null) - throw new Error("Replay conformance execution failed"); - return observed.value.evidence.normalized_result; -}; - -const sideEffects = await runSingle( - resolve("tests/fixtures/replay/side-effect-attempt.mjs"), -); -if ( - sideEffects.outcomes[0]?.outcome !== "return" || - Object.values(sideEffects.outcomes[0].value).some( - (value) => value !== "undefined", - ) -) - throw new Error("Ambient side-effect surface was exposed to replay code"); - -const timeout = await runSingle( - resolve("tests/fixtures/replay/busy-loop.mjs"), - { - wall_time_ms: 100, - }, -); -if (timeout.termination !== "timeout" || timeout.cleanup.state !== "complete") - throw new Error("Replay timeout did not kill and clean the complete sandbox"); - -const differentialTimeoutInput = { - mode: "plan", - left: { - modules: [ - { - alias: "entry", - path: await realpath(resolve("tests/fixtures/replay/busy-loop.mjs")), - format: "esm", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "entry", - entry_export: "default", - }, - right: { - modules: [ - { - alias: "entry", - path: await realpath(resolve("tests/fixtures/replay/parser.mjs")), - format: "esm", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "entry", - entry_export: "default", - }, - cases: [{ case_id: "probe", arguments: [] }], - limits: { wall_time_ms: 100 }, -}; -const differentialTimeoutPlan = await runControlledReplay( - dependencies, - differentialTimeoutInput, -); -if (!differentialTimeoutPlan.ok || differentialTimeoutPlan.value.plan === null) - throw new Error("Differential timeout plan failed"); -const differentialTimeout = await runControlledReplay(dependencies, { - ...differentialTimeoutInput, - mode: "execute", - plan_digest: differentialTimeoutPlan.value.plan.plan_digest, -}); -if ( - !differentialTimeout.ok || - differentialTimeout.value.evidence === null || - differentialTimeout.value.source_evidence.length !== 2 || - differentialTimeout.value.evidence.normalized_result.comparison?.[0] - ?.status !== "unknown" || - differentialTimeout.value.source_evidence.some( - (item) => item.normalized_result.outcomes[0]?.outcome !== "timeout", - ) -) - throw new Error("Differential termination did not retain both observations"); - -const memory = await runSingle( - resolve("tests/fixtures/replay/memory-pressure.mjs"), - { wall_time_ms: 3000, memory_bytes: 32 * 1024 * 1024 }, -); -if (memory.termination !== "oom" || memory.cleanup.state !== "complete") - throw new Error( - `Replay OOM did not report and clean the cgroup limit: ${JSON.stringify(memory)}`, - ); -process.stdout.write( - `${JSON.stringify({ - verifier_run: await completeVerifierRun(verifierRun), - available: true, - plan_digest: plan.plan_digest, - evidence_id: evidence.evidence_id, - left_sha256: plan.left.modules[0]?.sha256, - right_sha256: plan.right?.modules[0]?.sha256, - cases: plan.cases.length, - comparison: evidence.normalized_result.comparison?.map( - ({ case_id, status }) => ({ case_id, status }), - ), - cleanup: evidence.normalized_result.cleanup.state, - side_effect_surface: "unavailable", - timeout: timeout.termination, - differential_timeout: - differentialTimeout.value.evidence.normalized_result.comparison[0] - ?.status, - memory: memory.termination, - })}\n`, -); diff --git a/skills/reverse-engineer-anything/SKILL.md b/skills/reverse-engineer-anything/SKILL.md index 5466ef601..7784418ce 100644 --- a/skills/reverse-engineer-anything/SKILL.md +++ b/skills/reverse-engineer-anything/SKILL.md @@ -3,14 +3,14 @@ name: reverse-engineer-anything description: Reverse engineer native, managed, Electron/JavaScript, packaged, and browser applications with REA. Use shipped-artifact or requested runtime evidence to explain features, compare versions, decompile code, or guide a reconstruction. Skip REA for ordinary source-repository architecture analysis. metadata: version: "23" - tool_count: 122 - catalog_digest: "3a0e6d66df95b913797ce2e4548e97d409d6e8768023f8a7a23d8d85ae9d766f" + tool_count: 116 + catalog_digest: "73a4cdf4fc83b1728426931ff89e2113f1c8beb1b3bf337c179f2c349ce3c0f2" --- # REA Use REA when a claim depends on a shipped binary or package, decompilation, -passive application runtime evidence, controlled replay, or comparison with +passive application runtime evidence, or comparison with behavior not established by available source. For ordinary analysis of a complete source repository, use normal repository tools and do not run REA readiness or provider commands. @@ -71,8 +71,10 @@ For requests that span multiple features or subsystems, use a staged workflow: they affect the question. Use format-aware inventory and parsers; do not infer behavior from filenames, strings, or layout alone. 5. Corroborate a conclusion with the evidence type it requires. Use runtime - observation or controlled replay only when static evidence cannot answer the - question and the required host runtime and OS access are available. + observation only when static evidence cannot answer the question and the + required host runtime and OS access are available. For JavaScript behavior, + run probes against the actual app through the available browser, Electron, + or process capture workflow. 6. Decompose work into independent questions. When parallel workers are available and the questions do not depend on one another, assign distinct scopes, point workers to existing evidence, and ask them to return sources, @@ -96,8 +98,6 @@ as complete while required questions remain open. [references/runtime-observation.md](references/runtime-observation.md) - Evidence paging, comparisons, residual unknowns, and verification: [references/evidence-workflows.md](references/evidence-workflows.md) -- Controlled JavaScript replay: - [references/controlled-replay.md](references/controlled-replay.md) ## Readiness and setup diff --git a/skills/reverse-engineer-anything/references/controlled-replay.md b/skills/reverse-engineer-anything/references/controlled-replay.md deleted file mode 100644 index 8fb493faa..000000000 --- a/skills/reverse-engineer-anything/references/controlled-replay.md +++ /dev/null @@ -1,12 +0,0 @@ -# Controlled JavaScript replay - -Use `run_controlled_replay` only for operator-selected extracted modules when -the separate replay policy is enabled. Call `mode: plan` first. Review the exact -module, stub, runtime, sandbox, case, limits, and policy commitments. Execute -only with `approved: true` and that exact plan digest. - -Treat return values, exceptions, denials, limits, and crashes as observations of -the isolated experiment with controlled-replay authority, not facts about the -real application. Never substitute browser/Electron permission, process -capture, or an in-process `vm` run. Reproducer export requires separate literal -approval and evidence-write authority after sandbox cleanup. diff --git a/skills/reverse-engineer-anything/references/javascript-applications.md b/skills/reverse-engineer-anything/references/javascript-applications.md index 195e05f1b..d85128277 100644 --- a/skills/reverse-engineer-anything/references/javascript-applications.md +++ b/skills/reverse-engineer-anything/references/javascript-applications.md @@ -31,5 +31,6 @@ Include the complete Evidence records from both analysis calls. Accept variant pairing only through the tool's unique exact literal discriminant. Cite the comparison Evidence and report JSON Pointer changes; dynamic values, ambiguous variants, and incomplete parent-property coverage stay unknown. This is static -inference, not runtime behavior. Use `run_controlled_replay` separately only -when the user needs approved runtime semantics. +inference, not runtime behavior. When runtime semantics are needed, run +behavioral probes against the relevant application versions and capture them +through the available browser, Electron, or process workflows. diff --git a/src/application/BrowserScenarioEvidence.ts b/src/application/BrowserScenarioEvidence.ts index a41c4b70e..47eb0b597 100644 --- a/src/application/BrowserScenarioEvidence.ts +++ b/src/application/BrowserScenarioEvidence.ts @@ -8,18 +8,17 @@ import { type EvidenceObservation, } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; -import { digestJson } from "./JavaScriptReplayPlanning.js"; +import { digestCanonicalJson } from "../domain/browserScenarioNormalization.js"; const browserScenarioParameters = ( scenario: BrowserScenario, ): EvidenceObservation["parameters"] => ({ - scenario_sha256: digestJson(scenario), + scenario_sha256: digestCanonicalJson(scenario), browser_mode: scenario.browser.mode, ...(scenario.browser.mode === "launch" ? { browser_headless: scenario.browser.headless } : {}), start_url: sanitizeBrowserUrl(scenario.start_url.url), - allowed_origins: scenario.allowed_origins, environment: scenario.environment, actions: scenario.actions.map(({ step_id, action }) => ({ step_id, diff --git a/src/application/CapabilityInventory.test.ts b/src/application/CapabilityInventory.test.ts index 83ba864a8..43b3cff01 100644 --- a/src/application/CapabilityInventory.test.ts +++ b/src/application/CapabilityInventory.test.ts @@ -4,7 +4,6 @@ import { buildCapabilityInventory } from "./CapabilityInventory.js"; const enabledPolicy: Parameters[1] = { processCaptureEnabled: true, - controlledReplayEnabled: true, browserObservationEnabled: true, browserScenarioEnabled: true, electronObservationEnabled: true, @@ -159,26 +158,6 @@ describe("capability inventory: provider status", () => { available: false, reason: "provider_missing", }); - expect(byName.get("run_controlled_replay")).toMatchObject({ - available: true, - reason: "available", - }); - expect(byName.get("plan_managed_runtime_correlation")).toMatchObject({ - available: true, - reason: "available", - }); - }); - - it("reports controlled replay as unsupported on other host targets", () => { - const replay = entry("run_controlled_replay", status(), { - ...enabledPolicy, - controlledReplayEnabled: false, - }); - expect(replay).toMatchObject({ - available: false, - reason: "unsupported_host", - remediation: "Run controlled replay on a Linux x86_64 host.", - }); }); }); diff --git a/src/application/CapabilityInventory.ts b/src/application/CapabilityInventory.ts index 0f497edfa..fc8c09d1c 100644 --- a/src/application/CapabilityInventory.ts +++ b/src/application/CapabilityInventory.ts @@ -11,7 +11,6 @@ import { import type { ToolKind } from "../contracts/toolContractTypes.js"; import type { JsonValue } from "../domain/jsonValue.js"; import { GENERATED_MCP_TOOL_CATALOG } from "../generatedMcpToolCatalog.js"; -import { isSupportedControlledReplayHost } from "./ControlledReplayHostSupport.js"; import { clientRequirementsFor, NO_CLIENT_FEATURES, @@ -29,7 +28,6 @@ type ToolAvailabilityReason = "available" | ToolUnavailabilityReason; type ProviderDescriptor = ProviderCapability; export type AvailabilityPolicy = { readonly processCaptureEnabled: boolean; - readonly controlledReplayEnabled?: boolean; readonly browserObservationEnabled?: boolean; readonly browserScenarioEnabled?: boolean; readonly electronObservationEnabled?: boolean; @@ -214,16 +212,6 @@ const workflowAvailabilityFor = ({ reason: "unsupported_host", remediation: "Run process capture on a supported Linux or macOS host.", }; - if (name === "run_controlled_replay") - return (policy.controlledReplayEnabled ?? - isSupportedControlledReplayHost(process.platform, process.arch)) - ? { reason: "available", remediation: null } - : { - reason: "unsupported_host", - remediation: "Run controlled replay on a Linux x86_64 host.", - }; - if (name === "plan_managed_runtime_correlation") - return { reason: "available", remediation: null }; if (kind === "application") return { reason: "available", remediation: null }; const electron = electronProviderAvailability(name, kind, policy); if (electron !== null) return electron; diff --git a/src/application/CommandShimReplay.ts b/src/application/CommandShimReplay.ts deleted file mode 100644 index 9fa430803..000000000 --- a/src/application/CommandShimReplay.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { createServer, type Server } from "node:http"; -import { chmod, mkdir, writeFile } from "node:fs/promises"; -import { join } from "node:path"; - -import type { - ProcessScenario, - RecordProcessCaptureEvent, - ShimEvent, -} from "../domain/processCapture.js"; - -interface Invocation { - readonly command: string; - readonly arguments: readonly string[]; - readonly working_directory: string; -} - -/** Owned command-shim replay resources for one process scenario. */ -export interface CommandShimReplay { - readonly binPath: string; - readonly url: string; - readonly events: readonly ShimEvent[]; - readonly truncated: boolean; - close(): Promise; -} - -const RUNNER = `const command = process.argv[2]; -const maximumTimerDelay = 2147483647; -const delay = milliseconds => new Promise(resolve => { - let remaining = milliseconds; - const schedule = () => { - const interval = Math.min(remaining, maximumTimerDelay); - setTimeout(() => { - remaining -= interval; - if (remaining === 0) resolve(); - else schedule(); - }, interval); - }; - schedule(); -}); -const response = await fetch(process.env.REA_SHIM_LEDGER_URL, { - method: "POST", - headers: { "content-type": "application/json" }, - body: JSON.stringify({ command, arguments: process.argv.slice(3), working_directory: process.cwd() }), -}); -if (!response.ok) process.exit(127); -const route = await response.json(); -let elapsed = 0; -for (const output of route.outputs) { - const wait = Math.max(0, output.at_ms - elapsed); - if (wait > 0) await delay(wait); - elapsed = output.at_ms; - (output.stream === "stdout" ? process.stdout : process.stderr).write(output.data); -} -if (route.termination.type === "signal") process.kill(process.pid, route.termination.signal); -else process.exit(route.termination.code); -`; - -const shellQuote = (value: string): string => - `'${value.replaceAll("'", `'\\''`)}'`; - -/** - * Start bounded executable replay wrappers and their private invocation ledger. - * - * Exact argument matching is deliberate: a fallback to the host executable - * would make an unmatched dependency call look authoritative. Unmatched and - * exhausted routes therefore fail visibly and remain part of the capture. - */ -export const startCommandShimReplay = async ( - scenario: ProcessScenario, - temporaryRoot: string, - started: number, - recordEvent: RecordProcessCaptureEvent = () => undefined, -): Promise => { - const binPath = join(temporaryRoot, "shims"); - await mkdir(binPath); - const runnerPath = join(temporaryRoot, "shim-runner.mjs"); - await writeFile(runnerPath, RUNNER, { mode: 0o600, flag: "wx" }); - for (const shim of scenario.command_shims) { - const path = join(binPath, shim.name); - const wrapper = `#!/bin/sh\nexec ${shellQuote(process.execPath)} ${shellQuote(runnerPath)} ${shellQuote(shim.name)} "$@"\n`; - await writeFile(path, wrapper, { mode: 0o700, flag: "wx" }); - await chmod(path, 0o700); - } - - const events: ShimEvent[] = []; - let truncated = false; - const calls = new Map(); - const server = createServer((request, response) => { - if (request.method !== "POST" || request.url !== "/invoke") { - response.writeHead(404).end(); - return; - } - readInvocation(request) - .then((invocation) => { - const shim = scenario.command_shims.find( - ({ name }) => name === invocation.command, - ); - const routeIndex = shim?.routes.findIndex( - ({ arguments: expected }) => - JSON.stringify(expected) === JSON.stringify(invocation.arguments), - ); - const key = `${invocation.command}:${String(routeIndex ?? -1)}`; - const used = calls.get(key) ?? 0; - const route = - shim !== undefined && routeIndex !== undefined && routeIndex >= 0 - ? shim.routes[routeIndex] - : undefined; - const outcome = - route === undefined - ? "unmatched" - : used >= route.max_calls - ? "exhausted" - : "matched"; - if (events.length >= scenario.limits.protocol_events) truncated = true; - else { - const index = events.length; - events.push({ - sequence: index, - at_ms: Math.max(0, Date.now() - started), - command: invocation.command, - route_index: - routeIndex !== undefined && routeIndex >= 0 ? routeIndex : null, - arguments: invocation.arguments, - working_directory: invocation.working_directory, - outcome, - }); - recordEvent("shim_events", index); - } - if (outcome !== "matched" || route === undefined) { - response.writeHead(409).end(); - return; - } - calls.set(key, used + 1); - response - .writeHead(200, { "content-type": "application/json" }) - .end(JSON.stringify(route)); - }) - .catch(() => response.writeHead(400).end()); - }); - await listen(server); - const address = server.address(); - if (address === null || typeof address === "string") { - await closeServer(server); - throw new Error("command shim ledger did not bind an IPv4 port"); - } - return { - binPath, - url: `http://127.0.0.1:${String(address.port)}/invoke`, - events, - get truncated() { - return truncated; - }, - close: () => closeServer(server), - }; -}; - -const readInvocation = async ( - request: import("node:http").IncomingMessage, -): Promise => { - const chunks: Buffer[] = []; - let bytes = 0; - for await (const chunk of request) { - const buffer = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk); - bytes += buffer.length; - if (bytes > 64 * 1024) throw new Error("shim invocation exceeds limit"); - chunks.push(buffer); - } - const value: unknown = JSON.parse(Buffer.concat(chunks).toString("utf8")); - if ( - typeof value !== "object" || - value === null || - !("command" in value) || - typeof value.command !== "string" || - !("arguments" in value) || - !Array.isArray(value.arguments) || - !value.arguments.every((item) => typeof item === "string") || - !("working_directory" in value) || - typeof value.working_directory !== "string" - ) - throw new Error("invalid shim invocation"); - return { - command: value.command, - arguments: value.arguments, - working_directory: value.working_directory, - }; -}; - -const listen = (server: Server): Promise => - new Promise((resolveListen, rejectListen) => { - server.once("error", rejectListen); - server.listen(0, "127.0.0.1", () => { - server.off("error", rejectListen); - resolveListen(); - }); - }); - -const closeServer = (server: Server): Promise => - new Promise((resolveClose, rejectClose) => - server.close((cause) => - cause === undefined ? resolveClose() : rejectClose(cause), - ), - ); diff --git a/src/application/ControlledReplayHostSupport.test.ts b/src/application/ControlledReplayHostSupport.test.ts deleted file mode 100644 index 14465b77b..000000000 --- a/src/application/ControlledReplayHostSupport.test.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { isSupportedControlledReplayHost } from "./ControlledReplayHostSupport.js"; - -describe("controlled replay host support", () => { - it("admits only Linux x86_64", () => { - expect(isSupportedControlledReplayHost("linux", "x64")).toBe(true); - expect(isSupportedControlledReplayHost("linux", "arm64")).toBe(false); - expect(isSupportedControlledReplayHost("darwin", "x64")).toBe(false); - expect(isSupportedControlledReplayHost("win32", "x64")).toBe(false); - }); -}); diff --git a/src/application/ControlledReplayHostSupport.ts b/src/application/ControlledReplayHostSupport.ts deleted file mode 100644 index fe230a922..000000000 --- a/src/application/ControlledReplayHostSupport.ts +++ /dev/null @@ -1,5 +0,0 @@ -/** Return whether this host has the platform boundary required by replay v1. */ -export const isSupportedControlledReplayHost = ( - platform: string, - architecture: string, -): boolean => platform === "linux" && architecture === "x64"; diff --git a/src/application/Doctor.runtimeExecutables.test.ts b/src/application/Doctor.runtimeExecutables.test.ts deleted file mode 100644 index 01ba18dd6..000000000 --- a/src/application/Doctor.runtimeExecutables.test.ts +++ /dev/null @@ -1,66 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { createDoctorHostFixture as host } from "./Doctor.fixture.js"; -import { runDoctor } from "./Doctor.js"; - -describe("doctor runtime executable diagnostics", () => { - it("reports a broken shadowed Node candidate without hiding the healthy launcher", async () => { - const result = await runDoctor( - undefined, - host({ - runtimeExecutables: () => - Promise.resolve({ - launcher_node: "/healthy/node", - candidates: [ - { - tool: "node", - lexical_path: "/healthy/node", - canonical_path: "/healthy/node", - path_index: null, - selection: "rea-launcher", - version: "v24.18.0", - healthy: true, - failure: null, - }, - { - tool: "node", - lexical_path: "/opt/homebrew/bin/node", - canonical_path: "/opt/homebrew/Cellar/node/25.2.1/bin/node", - path_index: 2, - selection: "path-shadowed", - version: null, - healthy: false, - failure: { - code: "runtime_dynamic_library_missing", - exit_code: 134, - signal: null, - dependency: - "/opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib", - stderr: "dyld: Library not loaded", - }, - }, - ], - }), - }), - ); - - expect(result.healthy).toBe(false); - expect(result.identity?.runtime_executables).toMatchObject({ - launcher_node: "/healthy/node", - candidates: [ - { healthy: true, selection: "rea-launcher" }, - { - healthy: false, - failure: { code: "runtime_dynamic_library_missing" }, - }, - ], - }); - expect( - result.checks.find(({ name }) => name === "node-toolchains"), - ).toMatchObject({ - ok: false, - classification: "missing_dependency", - remediation: expect.stringContaining("Do not create"), - }); - }); -}); diff --git a/src/application/Doctor.test.ts b/src/application/Doctor.test.ts index b4fd7d712..b5d35ea12 100644 --- a/src/application/Doctor.test.ts +++ b/src/application/Doctor.test.ts @@ -3,33 +3,6 @@ import type { ClientRegistrationStatus } from "./ClientRegistrationStatus.js"; import { createDoctorHostFixture as host } from "./Doctor.fixture.js"; import { runDoctor } from "./Doctor.js"; -it("reports unavailable replay without blocking installation or Hopper readiness", async () => { - const replayCheck = { - name: "javascript-replay", - ok: false, - classification: "unsupported_host" as const, - detail: "Controlled replay requires Linux x86_64", - }; - const doctorHost = host({ - javascriptReplayCheck: () => Promise.resolve(replayCheck), - }); - for (const scope of [undefined, { providers: ["hopper"] }]) { - const report = await runDoctor(undefined, doctorHost, scope); - expect(report.healthy).toBe(true); - expect(report.checks).toContainEqual(replayCheck); - expect(report.informational_checks).toContainEqual(replayCheck); - expect(report.scope_checks).not.toContainEqual(replayCheck); - } - const unhealthy = await runDoctor( - undefined, - host({ - nodeVersion: "20.0.0", - javascriptReplayCheck: () => Promise.resolve(replayCheck), - }), - ); - expect(unhealthy.healthy).toBe(false); -}); - describe("doctor", () => { it("returns exact recovery for every failed diagnostic", async () => { const result = await runDoctor( diff --git a/src/application/Doctor.ts b/src/application/Doctor.ts index ce7fd9f4b..0331676b2 100644 --- a/src/application/Doctor.ts +++ b/src/application/Doctor.ts @@ -20,14 +20,9 @@ import { type ClientRegistrationStatus, type UnhealthyClientRegistrationStatus, } from "./ClientRegistrationStatus.js"; -import { - inspectRuntimeExecutables, - type RuntimeExecutableInventory, -} from "./RuntimeExecutableDiagnostics.js"; import { collectDoctorDiagnostics, doctorHealthy, - isOptionalDoctorCheck, } from "./DoctorDiagnostics.js"; import { normalizeDoctorScope, @@ -91,9 +86,7 @@ export interface DoctorHost { installationPaths?(): Promise; installedSkillIdentity?(): Promise; clientRegistrations?(): Promise; - javascriptReplayCheck?(): Promise; ilspyCmdVersion?(path: string): Promise; - runtimeExecutables?(): Promise; } /** Parsed identity committed by an installed REA skill. */ @@ -145,7 +138,6 @@ interface DoctorIdentity { readonly remediation: string | null; }; readonly registrations: readonly ClientRegistrationStatus[]; - readonly runtime_executables: RuntimeExecutableInventory | null; } /** @@ -162,9 +154,8 @@ export const runDoctor = async ( checks: diagnosticChecks, hopperPath, providerInspections, - runtimeExecutables, } = await collectDoctorDiagnostics(target, host); - const identity = await collectDoctorIdentity(host, runtimeExecutables); + const identity = await collectDoctorIdentity(host); const checks = [...diagnosticChecks, ...identity.checks]; const providers = { hopperAvailable: @@ -188,14 +179,9 @@ export const runDoctor = async ( healthy: scope.mode === "audit-wide" ? environmentHealthy : scoped.healthy, environment_healthy: environmentHealthy, scope, - scope_checks: - scope.mode === "audit-wide" - ? checks.filter(({ name }) => !isOptionalDoctorCheck(name)) - : scoped.scopeChecks, + scope_checks: scope.mode === "audit-wide" ? checks : scoped.scopeChecks, informational_checks: - scope.mode === "audit-wide" - ? checks.filter(({ name }) => isOptionalDoctorCheck(name)) - : scoped.informationalChecks, + scope.mode === "audit-wide" ? [] : scoped.informationalChecks, ...(hopperPath === undefined ? {} : { hopperPath }), ...(providerInspections === undefined ? {} : { providerInspections }), checks, @@ -205,7 +191,6 @@ export const runDoctor = async ( const collectDoctorIdentity = async ( host: DoctorHost, - runtimeExecutables: RuntimeExecutableInventory | undefined, ): Promise<{ readonly checks: readonly DoctorCheck[]; readonly value: DoctorIdentity; @@ -253,7 +238,6 @@ const collectDoctorIdentity = async ( : "Run rea setup to update the installed REA skill.", }, registrations, - runtime_executables: runtimeExecutables ?? null, }, }; }; @@ -298,7 +282,6 @@ export interface SystemDoctorHostOptions { readonly providerInspections?: () => Promise< readonly DoctorProviderInspection[] >; - readonly javascriptReplayCheck?: () => Promise; readonly linuxDemoRuntimeCheck?: () => Promise; } @@ -344,9 +327,6 @@ export const systemDoctorHost = ( ...(options.providerInspections === undefined ? {} : { providerInspections: options.providerInspections }), - ...(options.javascriptReplayCheck === undefined - ? {} - : { javascriptReplayCheck: options.javascriptReplayCheck }), async ilspyCmdVersion(path) { try { await access(path, constants.X_OK); @@ -357,15 +337,6 @@ export const systemDoctorHost = ( return undefined; } }, - runtimeExecutables: () => - inspectRuntimeExecutables({ - platform: process.platform, - path: process.env.PATH ?? "", - launcherNode: process.execPath, - ...(process.env.PATHEXT === undefined - ? {} - : { pathExtensions: process.env.PATHEXT.split(delimiter) }), - }), async installationPaths() { try { const command = process.platform === "win32" ? "where" : "which"; diff --git a/src/application/DoctorDiagnostics.ts b/src/application/DoctorDiagnostics.ts index 0b5b576da..542d663d1 100644 --- a/src/application/DoctorDiagnostics.ts +++ b/src/application/DoctorDiagnostics.ts @@ -7,7 +7,6 @@ import type { DoctorHost, DoctorProviderInspection, } from "./Doctor.js"; -import type { RuntimeExecutableInventory } from "./RuntimeExecutableDiagnostics.js"; const DEFAULT_HOPPER = "/Applications/Hopper Disassembler.app/Contents/MacOS/hopper"; @@ -18,7 +17,6 @@ export interface DoctorDiagnostics { readonly checks: readonly DoctorCheck[]; readonly hopperPath?: string; readonly providerInspections?: readonly DoctorProviderInspection[]; - readonly runtimeExecutables?: RuntimeExecutableInventory; } /** Collect host, provider, and optional-target diagnostics without mutation. */ @@ -26,11 +24,7 @@ export const collectDoctorDiagnostics = async ( target: string | undefined, host: DoctorHost, ): Promise => { - const runtimeExecutables = await host.runtimeExecutables?.(); - const checks: DoctorCheck[] = [ - nodeCheck(host), - ...runtimeChecks(runtimeExecutables), - ]; + const checks: DoctorCheck[] = [nodeCheck(host)]; checks.push(await hostCheck(host)); const hopperPath = await findHopper(host); @@ -42,8 +36,6 @@ export const collectDoctorDiagnostics = async ( if (providerInspections !== undefined) checks.push(...providerInspections.flatMap(providerDoctorChecks)); - const javascriptReplayCheck = await host.javascriptReplayCheck?.(); - if (javascriptReplayCheck !== undefined) checks.push(javascriptReplayCheck); const ilspyCheck = await optionalIlspyCheck(host); if (ilspyCheck !== undefined) checks.push(ilspyCheck); const hopperDemoCheck = await optionalHopperDemoCheck(host, hopperPath); @@ -55,7 +47,6 @@ export const collectDoctorDiagnostics = async ( checks, ...(hopperPath === undefined ? {} : { hopperPath }), ...(providerInspections === undefined ? {} : { providerInspections }), - ...(runtimeExecutables === undefined ? {} : { runtimeExecutables }), }; }; @@ -70,19 +61,16 @@ export const doctorHealthy = ( | undefined; }, ): boolean => { - const requiredChecks = checks.filter( - ({ name }) => !isOptionalDoctorCheck(name), - ); if (providers.providerInspections === undefined) - return requiredChecks.every(({ ok }) => ok); - const providerChecks = requiredChecks.filter( + return checks.every(({ ok }) => ok); + const providerChecks = checks.filter( ({ name }) => name.startsWith("hopper") || providers.providerInspections?.some((inspection) => providerCheckName(inspection.id, name), ) === true, ); - const coreHealthy = requiredChecks + const coreHealthy = checks .filter((candidate) => !providerChecks.includes(candidate)) .every(({ ok }) => ok); const configuredProvidersHealthy = providerChecks @@ -102,36 +90,12 @@ export const doctorHealthy = ( ); }; -/** Identify workflow diagnostics that do not gate core installation readiness. */ -export const isOptionalDoctorCheck = (name: string): boolean => - name === "javascript-replay"; - const nodeCheck = (host: DoctorHost): DoctorCheck => check("node", supportsNodeVersion(host.nodeVersion), host.nodeVersion, { remediation: "Install Node.js 22.19+ or 24.11+.", classification: "missing_dependency", }); -const runtimeChecks = ( - inventory: RuntimeExecutableInventory | undefined, -): readonly DoctorCheck[] => { - if (inventory === undefined) return []; - const broken = inventory.candidates.filter(({ healthy }) => !healthy); - const detail = - broken.length === 0 - ? `${String(inventory.candidates.length)} runtime executable candidates passed bounded version probes.` - : `${String(broken.length)} of ${String(inventory.candidates.length)} runtime executable candidates failed bounded version probes: ${broken - .map(({ lexical_path: path }) => path) - .join(", ")}`; - return [ - check("node-toolchains", broken.length === 0, detail, { - remediation: - "Select a verified healthy Node toolchain or repair the failing installation, then rerun rea doctor. Do not create compatibility-library symlinks.", - classification: "missing_dependency", - }), - ]; -}; - const hostCheck = async (host: DoctorHost): Promise => { const macosVersion = host.platform === "darwin" ? await host.macosVersion() : undefined; diff --git a/src/application/DoctorScope.ts b/src/application/DoctorScope.ts index 1caffe18d..2af795e8c 100644 --- a/src/application/DoctorScope.ts +++ b/src/application/DoctorScope.ts @@ -7,7 +7,7 @@ import type { DoctorProviderInspection, DoctorScope, } from "./Doctor.js"; -import { doctorHealthy, isOptionalDoctorCheck } from "./DoctorDiagnostics.js"; +import { doctorHealthy } from "./DoctorDiagnostics.js"; /** Normalized readiness boundary included in every doctor response. */ export interface DoctorScopeReport { @@ -58,7 +58,6 @@ export const scopeDoctorChecks = ( const coreChecks = input.checks.filter( ({ name }) => !isProviderCheck(name, input.providers.providerInspections) && - !isOptionalDoctorCheck(name) && name !== "skill:identity" && !name.startsWith("registration:"), ); diff --git a/src/application/ElectronActiveEvidence.ts b/src/application/ElectronActiveEvidence.ts index 847051ea7..05e9192bd 100644 --- a/src/application/ElectronActiveEvidence.ts +++ b/src/application/ElectronActiveEvidence.ts @@ -6,7 +6,7 @@ import type { ElectronActiveObservationResult, } from "../domain/electronActiveObservation.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; -import { digestJson } from "./JavaScriptReplayPlanning.js"; +import { digestCanonicalJson } from "../domain/browserScenarioNormalization.js"; type CanonicalElectronActiveObservationInput = ElectronActiveObservationInput & { @@ -49,5 +49,5 @@ const parameters = ( input: CanonicalElectronActiveObservationInput, ): EvidenceObservation["parameters"] => ({ ...scenarioProjection(input), - scenario_sha256: digestJson(scenarioProjection(input)), + scenario_sha256: digestCanonicalJson(scenarioProjection(input)), }); diff --git a/src/application/EnhancedLiteralTracing.test.ts b/src/application/EnhancedLiteralTracing.test.ts index c51d82065..42e61974e 100644 --- a/src/application/EnhancedLiteralTracing.test.ts +++ b/src/application/EnhancedLiteralTracing.test.ts @@ -16,9 +16,7 @@ describe("literal feature tracing", () => { throw new Error(`Unexpected analysis call: ${name}`); }, { query: "launch feature", case_sensitive: false }, - "feature", ); - expect(result).toMatchObject({ ok: true, value: { @@ -30,26 +28,4 @@ describe("literal feature tracing", () => { }, }); }); - - it("keeps string-code tracing scoped to string labels", async () => { - const result = await traceLiteralFeature( - async (name) => { - if (name === "search_strings") - return ok([{ address: "0x1000", value: "launch feature" }]); - if (name === "xrefs") return ok([]); - throw new Error(`Unexpected analysis call: ${name}`); - }, - { query: "launch", case_sensitive: false }, - "string", - ); - expect(result).toMatchObject({ - ok: true, - value: { - matches: [ - { type: "string", address: "0x1000", value: "launch feature" }, - ], - references: [], - }, - }); - }); }); diff --git a/src/application/EnhancedLiteralTracing.ts b/src/application/EnhancedLiteralTracing.ts index 497d704ac..e1ea1fdb7 100644 --- a/src/application/EnhancedLiteralTracing.ts +++ b/src/application/EnhancedLiteralTracing.ts @@ -25,29 +25,28 @@ interface ReferenceTraceRequest { readonly signal?: AbortSignal; } -const FEATURE_SEARCH_SOURCES: readonly LiteralSearchSource[] = [ +const LITERAL_SEARCH_SOURCES: readonly LiteralSearchSource[] = [ ["search_strings", "string"], ["search_procedures", "procedure"], ]; -const STRING_SEARCH_SOURCES: readonly LiteralSearchSource[] = [ - ["search_strings", "string"], -]; export interface LiteralTraceInput { readonly query: string; readonly case_sensitive: boolean; } -/** Trace every matching feature or string literal through provider xrefs. */ +/** Trace matching strings and procedures through provider xrefs. */ export const traceLiteralFeature = async ( call: AnalysisCall, input: LiteralTraceInput, - scope: "feature" | "string", signal?: AbortSignal, ): EnhancedResult => { - const sources = - scope === "feature" ? FEATURE_SEARCH_SOURCES : STRING_SEARCH_SOURCES; - const searched = await literalMatches(call, input, sources, signal); + const searched = await literalMatches( + call, + input, + LITERAL_SEARCH_SOURCES, + signal, + ); if (!searched.ok) return searched; const traced = await traceReferences(call, { matches: searched.value.matches, diff --git a/src/application/EnhancedTools.ts b/src/application/EnhancedTools.ts index 2bfdda9d3..b4e774cd8 100644 --- a/src/application/EnhancedTools.ts +++ b/src/application/EnhancedTools.ts @@ -56,11 +56,7 @@ export class EnhancedTools { input: unknown, signal?: AbortSignal, ): EnhancedResult { - if ( - name === "trace_feature" || - name === "find_code_for_string" || - name === "trace_call_path" - ) + if (name === "trace_feature" || name === "trace_call_path") return this.#executeTracing(name, input, signal); if (name === "trace_native_values") { const parsed = enhancedInputSchemas.trace_native_values.safeParse(input); @@ -163,15 +159,6 @@ export class EnhancedTools { (name, arguments_, operationSignal) => this.#call(name, arguments_, operationSignal), call.input, - "feature", - signal, - ); - case "find_code_for_string": - return traceLiteralFeature( - (name, arguments_, operationSignal) => - this.#call(name, arguments_, operationSignal), - call.input, - "string", signal, ); case "trace_call_path": @@ -190,7 +177,7 @@ export class EnhancedTools { } #executeTracing( - name: "trace_feature" | "find_code_for_string" | "trace_call_path", + name: "trace_feature" | "trace_call_path", input: unknown, signal?: AbortSignal, ): EnhancedResult { @@ -199,12 +186,7 @@ export class EnhancedTools { 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); + const parsed = enhancedInputSchemas.trace_feature.safeParse(input); if (!parsed.success) return invalidEnhancedInput(name, parsed.error); return this.executeValidated({ name, input: parsed.data }, signal); } diff --git a/src/application/InstrumentedJavaScriptReplayHost.ts b/src/application/InstrumentedJavaScriptReplayHost.ts deleted file mode 100644 index 3da3ffe3a..000000000 --- a/src/application/InstrumentedJavaScriptReplayHost.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { - instrumentJavaScriptExport, - type JavaScriptExportInstrumentation, -} from "../domain/javascriptExportInstrumentation.js"; -import type { NodeCharacterizationPreparationInput } from "../domain/nodeRuntimeCharacterization.js"; -import type { - JavaScriptReplayHost, - ReplayExecutableIdentity, - ReplayRuntimeFileIdentity, - ReplaySourceBytes, -} from "./JavaScriptReplayPlanning.js"; - -/** Decorate one exact replay source with deterministic in-memory instrumentation. */ -export class InstrumentedJavaScriptReplayHost implements JavaScriptReplayHost { - instrumentation: JavaScriptExportInstrumentation | null = null; - - constructor( - private readonly delegate: JavaScriptReplayHost, - private readonly input: NodeCharacterizationPreparationInput["instrumentation"], - ) {} - - async readSource( - path: string, - maximumBytes: number, - ): Promise { - const source = await this.delegate.readSource(path, maximumBytes); - if (path !== this.input.artifact_path) return source; - const instrumented = instrumentJavaScriptExport(source.bytes, this.input); - if (instrumented.bytes.byteLength > maximumBytes) - throw new RangeError( - "Instrumented JavaScript exceeds the replay module byte limit", - ); - this.instrumentation = instrumented; - return { canonicalPath: source.canonicalPath, bytes: instrumented.bytes }; - } - - identifyExecutable( - path: string, - versionArguments: readonly string[], - ): Promise { - return this.delegate.identifyExecutable(path, versionArguments); - } - - identifyWorker(): Promise { - return this.delegate.identifyWorker(); - } - - identifyRuntimeClosure( - nodePath: string, - ): Promise { - return this.delegate.identifyRuntimeClosure(nodePath); - } - - seccompDigest(): string { - return this.delegate.seccompDigest(); - } - - probe( - configuration: Parameters[0], - ): Promise { - return this.delegate.probe(configuration); - } -} diff --git a/src/application/JavaScriptReplayPlanning.test.ts b/src/application/JavaScriptReplayPlanning.test.ts deleted file mode 100644 index 7a2e8a9a4..000000000 --- a/src/application/JavaScriptReplayPlanning.test.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { describe, expect, it, vi } from "vitest"; - -import { - prepareReplayPlan, - type JavaScriptReplayConfiguration, - type JavaScriptReplayHost, -} from "./JavaScriptReplayPlanning.js"; -import { controlledReplayInputSchema } from "../domain/javascriptReplay.js"; - -const root = "/replay-fixture"; -const configuration: JavaScriptReplayConfiguration = { - nodePath: "/runtime/node", - bubblewrapPath: "/runtime/bwrap", - systemdRunPath: "/runtime/systemd-run", - systemctlPath: "/runtime/systemctl", - shellPath: "/runtime/sh", -}; - -const inputWithExpandedManifest = () => { - const modules = Array.from({ length: 130 }, (_, index) => ({ - alias: `module-${index}`, - path: `${root}/module.mjs`, - format: "esm" as const, - role: "module" as const, - dependencies: {}, - })); - const first = modules[0]; - if (first === undefined) throw new TypeError("Missing fixture module"); - modules[0] = { - ...first, - dependencies: Object.fromEntries( - Array.from({ length: 129 }, (_, index) => [ - `dependency-${index}`, - `module-${index + 1}`, - ]), - ), - }; - return controlledReplayInputSchema.parse({ - mode: "plan", - left: { - modules, - entry_alias: "module-0", - entry_export: "default", - }, - cases: Array.from({ length: 129 }, (_, index) => ({ - case_id: `case-${index}`, - arguments: Array.from({ length: 17 }, () => "value"), - })), - }); -}; - -describe("controlled replay planning input bounds", () => { - it("accepts module, dependency, case, and argument counts beyond old quotas", () => { - const input = inputWithExpandedManifest(); - - expect(input.left.modules).toHaveLength(130); - expect(Object.keys(input.left.modules[0]?.dependencies ?? {})).toHaveLength( - 129, - ); - expect(input.cases).toHaveLength(129); - expect(input.cases[0]?.arguments).toHaveLength(17); - }); - - it("rejects an oversized protocol manifest before probing or reading", async () => { - const probe = vi.fn(async () => undefined); - const readSource = vi.fn(async () => ({ - canonicalPath: `${root}/module.mjs`, - bytes: new Uint8Array(), - })); - const host: JavaScriptReplayHost = { - readSource, - identifyExecutable: vi.fn(async (path) => ({ - path, - version: "1", - sha256: "0".repeat(64), - })), - identifyWorker: vi.fn(async () => ({ - path: "/worker.js", - version: "1", - sha256: "0".repeat(64), - })), - identifyRuntimeClosure: vi.fn(async () => []), - seccompDigest: () => "0".repeat(64), - probe, - }; - const input = controlledReplayInputSchema.parse({ - mode: "plan", - left: { - modules: Array.from({ length: 300 }, (_, index) => ({ - alias: `module-${index}`, - path: `/${"p".repeat(4_095)}`, - format: "esm", - dependencies: {}, - })), - entry_alias: "module-0", - }, - cases: [{ case_id: "empty", arguments: [] }], - limits: { protocol_bytes: 1024 * 1024 }, - }); - - await expect(prepareReplayPlan(input, configuration, host)).rejects.toThrow( - "Replay plan input exceeds its protocol byte limit", - ); - expect(probe).not.toHaveBeenCalled(); - expect(readSource).not.toHaveBeenCalled(); - }); -}); diff --git a/src/application/JavaScriptReplayPlanning.ts b/src/application/JavaScriptReplayPlanning.ts deleted file mode 100644 index 16b24dba1..000000000 --- a/src/application/JavaScriptReplayPlanning.ts +++ /dev/null @@ -1,325 +0,0 @@ -import canonicalize from "canonicalize"; -import { createHash } from "node:crypto"; - -import type { JsonValue } from "../domain/jsonValue.js"; -import { - createSeededRandomUint, - NON_DEGENERATE_XORSHIFT32_SEED, -} from "../replay/seededRandom.js"; -import type { - ControlledReplayInput, - ReplayExecutionResult, - ReplayPlan, -} from "../domain/javascriptReplay.js"; - -const REPLAY_POLICY_VERSION = "linux-bwrap-systemd-v1" as const; -const REPLAY_POLICY_DOCUMENT = Object.freeze({ - version: REPLAY_POLICY_VERSION, - namespaces: ["user", "pid", "network", "ipc", "uts", "cgroup"], - capabilities: "drop-all", - network: "none", - filesystem: "minimal-read-only-runtime-plus-private-tmpfs", - seccomp: "rea-linux-x86_64-v1", - resource_manager: "systemd-user-cgroup-v2", - nested_user_namespaces: false, -}); - -export interface ReplaySourceBytes { - readonly canonicalPath: string; - readonly bytes: Uint8Array; -} - -export interface ReplayExecutableIdentity { - readonly path: string; - readonly version: string; - readonly sha256: string; -} - -export interface ReplayRuntimeFileIdentity { - readonly sourcePath: string; - readonly destinationPath: string; - readonly sha256: string; -} - -/** Executable paths required to establish isolated Linux JavaScript replay. */ -export interface JavaScriptReplayConfiguration { - readonly nodePath: string; - readonly bubblewrapPath: string; - readonly systemdRunPath: string; - readonly systemctlPath: string; - readonly shellPath: string; -} - -export interface JavaScriptReplayHost { - readonly readSource: ( - path: string, - maximumBytes: number, - ) => Promise; - readonly identifyExecutable: ( - path: string, - versionArguments: readonly string[], - ) => Promise; - readonly identifyWorker: () => Promise; - readonly identifyRuntimeClosure: ( - nodePath: string, - ) => Promise; - readonly seccompDigest: () => string; - readonly probe: ( - configuration: JavaScriptReplayConfiguration, - ) => Promise; -} - -export interface PreparedReplayPlan { - readonly publicPlan: ReplayPlan; - readonly leftSources: Readonly>; - readonly rightSources?: Readonly>; -} - -export interface JavaScriptReplayRunner { - readonly execute: ( - prepared: PreparedReplayPlan, - configuration: JavaScriptReplayConfiguration, - signal?: AbortSignal, - ) => Promise; -} - -const assertReplayManifestWithinProtocolLimit = ( - input: ControlledReplayInput, -): void => { - if ( - new TextEncoder().encode(JSON.stringify(input)).byteLength > - input.limits.protocol_bytes - ) - throw new RangeError("Replay plan input exceeds its protocol byte limit"); -}; - -/** Read, normalize, and content-address every input to one replay experiment. */ -export const prepareReplayPlan = async ( - input: ControlledReplayInput, - configuration: JavaScriptReplayConfiguration, - host: JavaScriptReplayHost, -): Promise => { - assertReplayManifestWithinProtocolLimit(input); - const cases = replayCases(input).map((item) => ({ - ...item, - sha256: digestJson(item.arguments), - })); - if ( - new TextEncoder().encode( - JSON.stringify(cases.map(({ arguments: args }) => args)), - ).byteLength > input.limits.input_bytes - ) - throw new RangeError("Replay case inputs exceed the aggregate byte limit"); - await host.probe(configuration); - const [ - runtime, - bubblewrap, - systemdRun, - systemctl, - shell, - worker, - runtimeFiles, - left, - right, - ] = await Promise.all([ - host.identifyExecutable(configuration.nodePath, ["--version"]), - host.identifyExecutable(configuration.bubblewrapPath, ["--version"]), - host.identifyExecutable(configuration.systemdRunPath, ["--version"]), - host.identifyExecutable(configuration.systemctlPath, ["--version"]), - host.identifyExecutable(configuration.shellPath, ["--version"]), - host.identifyWorker(), - host.identifyRuntimeClosure(configuration.nodePath), - prepareSide(input.left, input.limits.module_bytes, host), - input.right === undefined - ? Promise.resolve(undefined) - : prepareSide(input.right, input.limits.module_bytes, host), - ]); - const withoutDigest = { - policy_version: REPLAY_POLICY_VERSION, - policy_sha256: digestJson(REPLAY_POLICY_DOCUMENT), - network: "none" as const, - filesystem: { - host_writes: false as const, - private_tmpfs_bytes: input.limits.tmpfs_bytes, - }, - runtime: { - executable: runtime, - worker, - read_only_files: runtimeFiles.map((item) => ({ - source_path: item.sourcePath, - destination_path: item.destinationPath, - sha256: item.sha256, - })), - }, - sandbox: { - bubblewrap, - systemd_run: systemdRun, - systemctl, - shell, - seccomp_sha256: host.seccompDigest(), - }, - left: left.commitment, - ...(right === undefined ? {} : { right: right.commitment }), - cases, - determinism: input.determinism, - limits: input.limits, - effects: [ - "Execute selected extracted modules in a disposable Linux OS sandbox", - "Create and remove one private cgroup and mount namespace", - "Retain bounded return, exception, termination, and diagnostic evidence", - "Perform no host filesystem writes and expose no host or external network", - ...(input.reproducer_export === undefined - ? [] - : ["Write one reproducer after sandbox cleanup"]), - ], - reproducer_export: - input.reproducer_export === undefined - ? null - : { - path: input.reproducer_export.path, - include_sources: input.reproducer_export.include_sources, - }, - }; - const publicPlan: ReplayPlan = { - ...withoutDigest, - plan_digest: digestJson(withoutDigest), - }; - return { - publicPlan, - leftSources: left.sources, - ...(right === undefined ? {} : { rightSources: right.sources }), - }; -}; - -const prepareSide = async ( - side: ControlledReplayInput["left"], - maximumBytes: number, - host: JavaScriptReplayHost, -) => { - const aliases = new Set(side.modules.map(({ alias }) => alias)); - if (aliases.size !== side.modules.length || !aliases.has(side.entry_alias)) - throw new TypeError("Replay manifest aliases or entry alias are invalid"); - for (const module of side.modules) - for (const dependency of Object.values(module.dependencies)) - if (!aliases.has(dependency)) - throw new TypeError( - `Undeclared replay dependency alias: ${dependency}`, - ); - const loaded: { - readonly module: (typeof side.modules)[number]; - readonly source: ReplaySourceBytes; - }[] = []; - let totalBytes = 0; - for (const module of side.modules) { - const remaining = maximumBytes - totalBytes; - if (remaining <= 0) - throw new RangeError("Replay module bytes exceed the aggregate limit"); - const source = await host.readSource(module.path, remaining); - if (source.bytes.byteLength > remaining) - throw new RangeError("Replay module bytes exceed the aggregate limit"); - totalBytes += source.bytes.byteLength; - loaded.push({ module, source }); - } - return { - commitment: { - modules: loaded.map(({ module, source }) => ({ - alias: module.alias, - canonical_path: source.canonicalPath, - format: module.format, - role: module.role, - byte_count: source.bytes.byteLength, - sha256: digestBytes(source.bytes), - dependencies: module.dependencies, - })), - entry_alias: side.entry_alias, - entry_export: side.entry_export, - }, - sources: Object.fromEntries( - loaded.map(({ module, source }) => [ - module.alias, - new TextDecoder("utf-8", { fatal: true }).decode(source.bytes), - ]), - ), - }; -}; - -const replayCases = ( - input: ControlledReplayInput, -): readonly { readonly case_id: string; readonly arguments: JsonValue[] }[] => { - const explicit = input.cases.map((item) => ({ - case_id: item.case_id, - arguments: item.arguments, - })); - if (input.generator === undefined) return uniqueCases(explicit); - const next = createSeededRandomUint( - input.generator.seed || NON_DEGENERATE_XORSHIFT32_SEED, - ); - const corpus = boundaryCorpus(input.generator.preset); - 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]); -}; - -const uniqueCases = ( - cases: readonly Case[], -): readonly Case[] => { - const ids = new Set(); - for (const item of cases) { - if (ids.has(item.case_id)) - throw new TypeError(`Duplicate replay case ID: ${item.case_id}`); - ids.add(item.case_id); - } - return cases; -}; - -const boundaryCorpus = ( - preset: NonNullable["preset"], -): readonly JsonValue[] => { - if (preset === "sanitizer-boundaries") - return [ - "", - "", - "", - "javascript:alert(1)", - "ok", - "\u0000", - ]; - if (preset === "clipboard-boundaries") - return [ - "", - "plain", - "a\r\nb", - "a\nb", - "\t", - "😀", - "text/html", - "text/plain", - ]; - return [ - "", - " ", - "\n", - "# heading", - "**bold**", - "[x](javascript:y)", - "`code`", - "😀", - "\u0000", - "a".repeat(1024), - ]; -}; - -export const digestBytes = (value: Uint8Array): string => - createHash("sha256").update(value).digest("hex"); - -export const digestJson = (value: unknown): string => { - const encoded = canonicalize(value); - if (encoded === undefined) - throw new TypeError("Replay commitment is not canonical JSON"); - return createHash("sha256").update(encoded).digest("hex"); -}; diff --git a/src/application/JavaScriptReplayService.ts b/src/application/JavaScriptReplayService.ts deleted file mode 100644 index a9e9075a6..000000000 --- a/src/application/JavaScriptReplayService.ts +++ /dev/null @@ -1,430 +0,0 @@ -import { z } from "zod"; -import writeFileAtomic from "write-file-atomic"; - -import { - controlledReplayInputSchema, - replayExecutionResultSchema, - controlledReplayOutputSchema, - replayEvidenceSchema, - type ControlledReplayExecutionInput, - type ControlledReplayInput, -} from "../domain/javascriptReplay.js"; -import { - AnalysisCapabilityUnavailableError, - AnalysisCancelledError, - AnalysisInputError, - AnalysisProtocolError, - ReplayPlanStaleError, - type AnalysisError, -} from "../domain/errors.js"; -import { createEvidence } from "../domain/evidence.js"; -import { projectInputIssues } from "../domain/inputIssueProjection.js"; -import { jsonValueSchema, type JsonValue } from "../domain/jsonValue.js"; -import { err, ok, type Result } from "../domain/result.js"; -import type { ExecutionOptions } from "./AnalysisProvider.js"; -import { - digestBytes, - prepareReplayPlan, - type JavaScriptReplayConfiguration, - type JavaScriptReplayHost, - type JavaScriptReplayRunner, -} from "./JavaScriptReplayPlanning.js"; - -const OPERATION = "run_controlled_replay" as const; -const isAborted = (signal: AbortSignal | undefined): boolean => - signal?.aborted === true; - -export interface JavaScriptReplayDependencies { - readonly configuration: () => JavaScriptReplayConfiguration; - readonly host: JavaScriptReplayHost; - readonly runner: JavaScriptReplayRunner; -} - -/** Plan or execute one content-bound extracted-module replay experiment. */ -export const runControlledReplay = async ( - dependencies: JavaScriptReplayDependencies, - rawInput: unknown, - options: ExecutionOptions = {}, -): Promise> => { - const parsed = controlledReplayInputSchema.safeParse(rawInput); - if (!parsed.success) - return err( - new AnalysisInputError( - OPERATION, - { cause: parsed.error }, - projectInputIssues(parsed.error.issues, rawInput), - ), - ); - return runControlledReplayValidated(dependencies, parsed.data, options); -}; - -/** Plan or execute replay input already parsed by a trusted adapter. */ -export const runControlledReplayValidated = async ( - dependencies: JavaScriptReplayDependencies, - input: ControlledReplayInput, - options: ExecutionOptions = {}, -): Promise> => { - if (isAborted(options.signal)) - return err(new AnalysisCancelledError(OPERATION)); - const configuration = dependencies.configuration(); - - const prepared = await prepareValidatedReplay( - dependencies, - configuration, - input, - options.signal, - ); - if (!prepared.ok) return prepared; - if (isAborted(options.signal)) - return err(new AnalysisCancelledError(OPERATION)); - - if (input.mode === "plan") - return ok( - asJson({ - phase: "plan", - plan: prepared.value.publicPlan, - source_evidence: [], - evidence: null, - }), - ); - - if (input.plan_digest !== prepared.value.publicPlan.plan_digest) - return err( - new ReplayPlanStaleError( - input.plan_digest, - prepared.value.publicPlan.plan_digest, - ), - ); - - const exportContext = prepareReproducerExport(input); - if (!exportContext.ok) return exportContext; - - const executed = await executeValidatedReplay({ - runner: dependencies.runner, - configuration, - prepared: prepared.value, - exportContext: exportContext.value, - options, - }); - if (!executed.ok) return executed; - - try { - return ok( - buildReplayOutput( - prepared.value, - executed.value.executed, - executed.value.sourceEvidence, - ), - ); - } catch (cause: unknown) { - return err( - new AnalysisProtocolError( - cause instanceof z.ZodError - ? "Controlled replay produced an invalid bounded result" - : "Controlled replay could not establish or clean up its sandbox", - { cause }, - ), - ); - } -}; - -const prepareValidatedReplay = async ( - dependencies: JavaScriptReplayDependencies, - configuration: JavaScriptReplayConfiguration, - input: ControlledReplayInput, - signal: AbortSignal | undefined, -): Promise< - Result>, AnalysisError> -> => { - if (isAborted(signal)) return err(new AnalysisCancelledError(OPERATION)); - try { - return ok(await prepareReplayPlan(input, configuration, dependencies.host)); - } catch (cause: unknown) { - return err( - new AnalysisCapabilityUnavailableError( - "rea-javascript-replay", - OPERATION, - cause instanceof Error ? cause.message : "replay planning failed", - ), - ); - } -}; - -interface ReproducerExportContext { - readonly path: string; - readonly includeSources: boolean; -} - -const prepareReproducerExport = ( - input: ControlledReplayExecutionInput, -): Result => { - if (input.reproducer_export === undefined) return ok(undefined); - return ok({ - path: input.reproducer_export.path, - includeSources: input.reproducer_export.include_sources === true, - }); -}; - -interface ReplayExecutionContext { - readonly runner: JavaScriptReplayRunner; - readonly configuration: JavaScriptReplayConfiguration; - readonly prepared: Awaited>; - readonly exportContext: ReproducerExportContext | undefined; - readonly options: ExecutionOptions; -} - -const executeValidatedReplay = async ( - context: ReplayExecutionContext, -): Promise< - Result< - { - readonly executed: z.infer; - readonly sourceEvidence: ReturnType[]; - }, - AnalysisError - > -> => { - const { runner, configuration, prepared, exportContext, options } = context; - await options.progress?.report({ - phase: OPERATION, - completed: 0, - total: 1, - message: "Starting the isolated replay worker", - }); - if (isAborted(options.signal)) - return err(new AnalysisCancelledError(OPERATION)); - - try { - let executed = replayExecutionResultSchema.parse( - await runner.execute(prepared, configuration, options.signal), - ); - await options.progress?.report({ - phase: OPERATION, - completed: 1, - total: 1, - message: "Controlled replay stopped and sandbox cleanup was observed", - terminal: true, - }); - if (executed.termination === "cancelled") - return err(new AnalysisCancelledError(OPERATION)); - executed = await applyReproducerExport(executed, exportContext, prepared); - const sourceEvidence = buildSourceEvidence(prepared, executed); - return ok({ executed, sourceEvidence }); - } catch (cause: unknown) { - return err( - new AnalysisProtocolError( - cause instanceof z.ZodError - ? "Controlled replay produced an invalid bounded result" - : "Controlled replay could not establish or clean up its sandbox", - { cause }, - ), - ); - } -}; - -const applyReproducerExport = async ( - executed: z.infer, - exportContext: ReproducerExportContext | undefined, - prepared: Awaited>, -): Promise> => { - if (exportContext === undefined || executed.cleanup.state !== "complete") - return executed; - - const manifest = { - plan: prepared.publicPlan, - result: executed, - sources: exportContext.includeSources - ? { - left: prepared.leftSources, - ...(prepared.rightSources === undefined - ? {} - : { right: prepared.rightSources }), - } - : null, - }; - const encoded = Buffer.from(`${JSON.stringify(manifest, null, 2)}\n`); - try { - await writeFileAtomic(exportContext.path, encoded, { - mode: 0o600, - }); - return replayExecutionResultSchema.parse({ - ...executed, - reproducer: { - state: "written", - path: exportContext.path, - sha256: digestBytes(encoded), - }, - }); - } catch (cause: unknown) { - return replayExecutionResultSchema.parse({ - ...executed, - limitations: [ - ...executed.limitations, - "Replay completed, but the requested reproducer export failed.", - ], - reproducer: { - state: "failed", - path: exportContext.path, - error: - cause instanceof Error - ? cause.message - : "unknown reproducer export failure", - }, - }); - } -}; - -const buildSourceEvidence = ( - prepared: Awaited>, - executed: z.infer, -): ReturnType[] => { - const leftCount = prepared.publicPlan.cases.length; - return [ - createReplayEvidence( - prepared, - executed, - "left", - executed.outcomes.slice(0, leftCount), - ), - ...(prepared.publicPlan.right === undefined - ? [] - : [ - createReplayEvidence( - prepared, - executed, - "right", - executed.outcomes.slice(leftCount), - ), - ]), - ]; -}; - -const buildReplayOutput = ( - prepared: Awaited>, - executed: z.infer, - sourceEvidence: ReturnType[], -): JsonValue => { - const subject = prepared.publicPlan.left.modules[0]; - const evidence = createEvidence( - subject === undefined - ? undefined - : { - path: subject.canonical_path, - sha256: subject.sha256, - format: "javascript", - }, - { - id: "rea-javascript-replay", - name: "REA isolated JavaScript replay", - version: "1", - }, - { - predicateType: "javascript-controlled-replay", - operation: OPERATION, - parameters: { - replay_plan: jsonValueSchema.parse( - JSON.parse(JSON.stringify(prepared.publicPlan)), - ), - }, - result: jsonValueSchema.parse(JSON.parse(JSON.stringify(executed))), - rawResult: jsonValueSchema.parse( - JSON.parse( - JSON.stringify({ - cases: prepared.publicPlan.cases, - outcomes: executed.outcomes, - stderr: executed.stderr, - }), - ), - ), - confidence: executed.comparison === undefined ? "observed" : "derived", - authority: "controlled-replay", - environment: { - id: prepared.publicPlan.plan_digest, - platform: process.platform, - architecture: process.arch, - isolation: "container", - }, - limitations: executed.limitations, - locations: prepared.publicPlan.left.modules.map((module) => ({ - kind: "artifact-path" as const, - path: module.canonical_path, - })), - evidenceLinks: sourceEvidence.map(({ evidence_id: id }) => id), - }, - ); - return asJson({ - phase: "execute", - plan: null, - source_evidence: sourceEvidence.map((item) => - replayEvidenceSchema.parse(item), - ), - evidence: replayEvidenceSchema.parse(evidence), - }); -}; - -const createReplayEvidence = ( - prepared: Awaited>, - executed: z.infer, - side: "left" | "right", - outcomes: z.infer["outcomes"], -) => { - const manifest = - side === "left" ? prepared.publicPlan.left : prepared.publicPlan.right; - const subject = manifest?.modules[0]; - const result = replayExecutionResultSchema.parse({ - ...executed, - outcomes, - comparison: undefined, - reproducer: null, - }); - return createEvidence( - subject === undefined - ? undefined - : { - path: subject.canonical_path, - sha256: subject.sha256, - format: "javascript", - }, - { - id: "rea-javascript-replay", - name: "REA isolated JavaScript replay", - version: "1", - }, - { - predicateType: "javascript-controlled-replay-observation", - operation: OPERATION, - parameters: { - replay_plan: jsonValueSchema.parse( - JSON.parse(JSON.stringify(prepared.publicPlan)), - ), - side, - }, - result: jsonValueSchema.parse(JSON.parse(JSON.stringify(result))), - rawResult: jsonValueSchema.parse( - JSON.parse( - JSON.stringify({ cases: prepared.publicPlan.cases, outcomes }), - ), - ), - confidence: "observed", - authority: "controlled-replay", - environment: { - id: prepared.publicPlan.plan_digest, - platform: process.platform, - architecture: process.arch, - isolation: "container", - }, - limitations: executed.limitations, - locations: (manifest?.modules ?? []).map((module) => ({ - kind: "artifact-path" as const, - path: module.canonical_path, - })), - }, - ); -}; - -const asJson = (value: unknown): JsonValue => { - const serialized: unknown = JSON.parse( - JSON.stringify(controlledReplayOutputSchema.parse(value)), - ); - return jsonValueSchema.parse(serialized); -}; diff --git a/src/application/LoopbackReplay.ts b/src/application/LoopbackReplay.ts deleted file mode 100644 index 11f64ea0c..000000000 --- a/src/application/LoopbackReplay.ts +++ /dev/null @@ -1,531 +0,0 @@ -import { - createServer, - type IncomingMessage, - type Server, - type ServerResponse, -} from "node:http"; -import { WebSocketServer, type WebSocket } from "ws"; -import type { - ProcessScenario, - ProtocolEvent, - RecordProcessCaptureEvent, -} from "../domain/processCapture.js"; -import { - type ReplayMachineDecision, - type ReplayTransitionRecord, -} from "../domain/replayMachineRuntime.js"; -import { - closeReplayServer, - listenOnLoopback, - recordMachineEvent, - readReplayRequestBody, - ReplayRecorder, - ReplayDelayScheduler, - requestHeaders, -} from "./LoopbackReplayRecorder.js"; - -/** Owned loopback replay endpoints and their bounded protocol observations. */ -export interface LoopbackReplay { - readonly httpUrl: string; - readonly websocketUrl: string; - readonly events: ProtocolEvent[]; - readonly transitions: readonly ReplayTransitionRecord[]; - readonly truncated: boolean; - close(): Promise; -} - -interface HttpReplayRequest { - readonly request: IncomingMessage; - readonly response: ServerResponse; - readonly method: string; - readonly path: string; - readonly body: string; - readonly rawAtMs: number; - readonly recordedAtMs: number; -} - -const recordHttpResponse = ( - recorder: ReplayRecorder, - request: Pick, - data: string, - outcome: ProtocolEvent["outcome"], -): void => - recorder.record({ - at_ms: recorder.atMs(), - protocol: "http", - direction: "response", - method: request.method, - path: request.path, - data, - outcome, - }); - -const handleMachineHttp = async ( - recorder: ReplayRecorder, - request: HttpReplayRequest, - delays: ReplayDelayScheduler, -): Promise => { - const machine = recorder.machine; - if (machine === undefined) return; - const decision = recorder.dispatchMachine({ - protocol: "http", - connection: "not_applicable", - at_ms: request.rawAtMs, - recorded_at_ms: request.recordedAtMs, - method: request.method, - path: request.path, - headers: requestHeaders(request.request), - body: request.body, - }); - recordMachineEvent( - recorder, - { - at_ms: request.recordedAtMs, - protocol: "http", - direction: "request", - method: request.method, - path: request.path, - data: request.body, - }, - decision, - ); - if (decision.outcome !== "matched") { - request.response.statusCode = decision.outcome === "unmatched" ? 404 : 409; - request.response.end(); - return; - } - for (const action of decision.actions) { - if (action.type === "delay") await delays.wait(action.duration_ms); - else if (action.type === "disconnect") { - request.response.destroy(); - recordHttpResponse(recorder, request, "", "disconnected"); - return; - } else if (action.type === "http_response") { - request.response.statusCode = action.status; - for (const [name, value] of Object.entries(action.headers)) - request.response.setHeader(name, value); - request.response.end(action.body); - recordHttpResponse( - recorder, - request, - machine.redact(action.body), - "matched", - ); - } - } -}; - -const handleStaticHttp = async ( - recorder: ReplayRecorder, - request: HttpReplayRequest, - calls: Map, - delays: ReplayDelayScheduler, -): Promise => { - const index = recorder.scenario.replay.http.findIndex((route) => - route.method !== request.method || route.path !== request.path - ? false - : (route.request_body === undefined || - route.request_body === request.body) && - Object.entries(route.request_headers).every( - ([name, value]) => - request.request.headers[name.toLowerCase()] === value, - ), - ); - const route = recorder.scenario.replay.http[index]; - const used = index < 0 ? 0 : (calls.get(index) ?? 0); - const outcome = - route === undefined - ? "unmatched" - : used >= route.max_calls - ? "script_exhausted" - : "matched"; - recorder.record({ - at_ms: recorder.atMs(), - protocol: "http", - direction: "request", - method: request.method, - path: request.path, - data: request.body.length === 0 ? "" : "", - outcome, - }); - if (route === undefined || outcome === "script_exhausted") { - request.response.statusCode = route === undefined ? 404 : 409; - request.response.end(); - return; - } - calls.set(index, used + 1); - if (route.delay_ms > 0) await delays.wait(route.delay_ms); - if (route.disconnect) { - request.response.destroy(); - recordHttpResponse(recorder, request, "", "disconnected"); - return; - } - request.response.statusCode = route.status; - for (const [name, value] of Object.entries(route.response_headers)) - request.response.setHeader(name, value); - request.response.end(route.body); - recordHttpResponse(recorder, request, route.body, "matched"); -}; - -const handleHttpRequest = async ( - recorder: ReplayRecorder, - request: IncomingMessage, - response: ServerResponse, - calls: Map, - delays: ReplayDelayScheduler, -): Promise => { - const body = await readReplayRequestBody( - request, - recorder.scenario.limits.protocol_body_bytes, - ); - const method = request.method ?? "GET"; - const requestUrl = new URL(request.url ?? "/", "http://127.0.0.1"); - const path = `${requestUrl.pathname}${requestUrl.search}`; - if (body === undefined) { - recorder.truncated = true; - response.statusCode = 413; - response.end(); - recorder.record({ - at_ms: recorder.atMs(), - protocol: "http", - direction: "request", - method, - path, - data: "", - outcome: "unmatched", - }); - return; - } - const replayRequest = { - request, - response, - method, - path, - body, - rawAtMs: recorder.rawAtMs(), - recordedAtMs: recorder.atMs(), - }; - await (recorder.machine === undefined - ? handleStaticHttp(recorder, replayRequest, calls, delays) - : recorder.enqueueMachine(() => - handleMachineHttp(recorder, replayRequest, delays), - )); -}; - -const createHttpHandler = ( - recorder: ReplayRecorder, - delays: ReplayDelayScheduler, -): ((request: IncomingMessage, response: ServerResponse) => void) => { - const calls = new Map(); - return (request, response) => { - void handleHttpRequest(recorder, request, response, calls, delays).catch( - () => { - recorder.truncated = true; - if (response.headersSent) response.destroy(); - else { - response.statusCode = 500; - response.end(); - } - }, - ); - }; -}; - -const sendWebSocketScript = async ( - client: WebSocket, - connection: number, - recorder: ReplayRecorder, - delays: ReplayDelayScheduler, -): Promise => { - const scripts = recorder.scenario.replay.websocket_connections; - const script = scripts[connection - 1]; - if (scripts.length > 0 && script === undefined) { - recorder.record({ - at_ms: recorder.atMs(), - protocol: "websocket", - direction: "sent", - method: null, - path: "/ws", - data: "", - outcome: "script_exhausted", - }); - client.terminate(); - return; - } - const messages = - script?.messages ?? - recorder.scenario.replay.websocket_messages.map((data) => ({ - data, - delay_ms: 0, - })); - for (const message of messages) { - if (message.delay_ms > 0) await delays.wait(message.delay_ms); - if (client.readyState !== 1) return; - client.send(message.data); - recorder.record({ - at_ms: recorder.atMs(), - protocol: "websocket", - direction: "sent", - method: null, - path: "/ws", - data: message.data, - outcome: "matched", - }); - } - if (script?.disconnect_after === true) { - client.close(); - recorder.record({ - at_ms: recorder.atMs(), - protocol: "websocket", - direction: "sent", - method: null, - path: "/ws", - data: "", - outcome: "disconnected", - }); - } -}; - -const runWebSocketActions = async ( - client: WebSocket, - recorder: ReplayRecorder, - decision: Extract, - path: string, - delays: ReplayDelayScheduler, -): Promise => { - for (const action of decision.actions) { - if (action.type === "delay") { - await delays.wait(action.duration_ms); - continue; - } - if (action.type === "disconnect") { - client.close(); - recorder.record({ - at_ms: recorder.atMs(), - protocol: "websocket", - direction: "sent", - method: null, - path, - data: "", - outcome: "disconnected", - }); - return; - } - if (action.type === "websocket_send" && client.readyState === 1) { - client.send(action.data); - recorder.record({ - at_ms: recorder.atMs(), - protocol: "websocket", - direction: "sent", - method: null, - path, - data: recorder.machine?.redact(action.data) ?? action.data, - outcome: "matched", - }); - } - } -}; - -const handleStaticWebSocket = ( - client: WebSocket, - recorder: ReplayRecorder, - connection: number, - path: string, - delays: ReplayDelayScheduler, -): void => { - client.on("message", (value) => - recorder.record({ - at_ms: recorder.atMs(), - protocol: "websocket", - direction: "received", - method: null, - path, - data: value.toString(), - outcome: "matched", - }), - ); - void sendWebSocketScript(client, connection, recorder, delays); -}; - -const handleMachineWebSocket = (options: { - readonly client: WebSocket; - readonly request: IncomingMessage; - readonly recorder: ReplayRecorder; - readonly connection: number; - readonly path: string; - readonly delays: ReplayDelayScheduler; -}): void => { - const { client, request, recorder, connection, path, delays } = options; - const machine = recorder.machine; - if (machine === undefined) return; - void recorder - .enqueueMachine(async () => { - const connectedAt = recorder.atMs(); - const connectionDecision = recorder.dispatchMachine({ - protocol: "websocket_connect", - connection: connection === 1 ? "initial" : "reconnect", - at_ms: recorder.rawAtMs(), - recorded_at_ms: connectedAt, - method: null, - path, - headers: requestHeaders(request), - body: "", - }); - recordMachineEvent( - recorder, - { - at_ms: connectedAt, - protocol: "websocket", - direction: "received", - method: null, - path, - data: "", - }, - connectionDecision, - ); - if (connectionDecision.outcome === "matched") - await runWebSocketActions( - client, - recorder, - connectionDecision, - path, - delays, - ); - else client.close(); - }) - .catch(() => { - recorder.truncated = true; - client.terminate(); - }); - client.on("message", (value) => { - const body = value.toString(); - const rawAtMs = recorder.rawAtMs(); - const recordedAtMs = recorder.atMs(); - void recorder - .enqueueMachine(async () => { - const decision = recorder.dispatchMachine({ - protocol: "websocket_message", - connection: connection === 1 ? "initial" : "reconnect", - at_ms: rawAtMs, - recorded_at_ms: recordedAtMs, - method: null, - path, - headers: {}, - body, - }); - recordMachineEvent( - recorder, - { - at_ms: recordedAtMs, - protocol: "websocket", - direction: "received", - method: null, - path, - data: body, - }, - decision, - ); - if (decision.outcome === "matched") - await runWebSocketActions(client, recorder, decision, path, delays); - }) - .catch(() => { - recorder.truncated = true; - client.terminate(); - }); - }); -}; - -const createWebSocketReplay = ( - server: Server, - recorder: ReplayRecorder, - delays: ReplayDelayScheduler, -): WebSocketServer => { - let connections = 0; - const websocket = new WebSocketServer({ - noServer: true, - maxPayload: recorder.scenario.limits.protocol_body_bytes, - clientTracking: true, - }); - server.on("upgrade", (request, socket, head) => { - if ( - recorder.machine === undefined && - new URL(request.url ?? "/", "http://127.0.0.1").pathname !== "/ws" - ) { - socket.destroy(); - return; - } - websocket.handleUpgrade(request, socket, head, (client) => - websocket.emit("connection", client, request), - ); - }); - websocket.on("connection", (client: WebSocket, request: IncomingMessage) => { - connections += 1; - if (connections > recorder.scenario.limits.connections) { - recorder.truncated = true; - client.terminate(); - return; - } - client.on("error", () => undefined); - const path = new URL(request.url ?? "/", "http://127.0.0.1").pathname; - if (recorder.machine === undefined) - handleStaticWebSocket(client, recorder, connections, path, delays); - else - handleMachineWebSocket({ - client, - request, - recorder, - connection: connections, - path, - delays, - }); - }); - return websocket; -}; - -/** Start bounded HTTP and WebSocket replay endpoints on IPv4 loopback only. */ -export const startLoopbackReplay = async ( - scenario: ProcessScenario, - recordEvent: RecordProcessCaptureEvent = () => undefined, -): Promise => { - const recorder = new ReplayRecorder(scenario, recordEvent); - const delays = new ReplayDelayScheduler(); - const server = createServer(createHttpHandler(recorder, delays)); - const websocket = createWebSocketReplay(server, recorder, delays); - let closePromise: Promise | undefined; - let port: number; - try { - port = await listenOnLoopback(server); - } catch (cause: unknown) { - await closeReplayServer(server).catch(() => undefined); - throw cause; - } - return { - httpUrl: `http://127.0.0.1:${String(port)}`, - websocketUrl: `ws://127.0.0.1:${String(port)}/ws`, - get events() { - return recorder.events.map((event) => ({ ...event })); - }, - get transitions() { - return recorder.transitions.map((transition) => ({ - ...transition, - sensitive_aliases: [...transition.sensitive_aliases], - })); - }, - get truncated() { - return recorder.truncated; - }, - async close() { - closePromise ??= (async () => { - delays.close(); - recorder.stopMachineAdmission(); - await recorder.drainMachine(); - for (const client of websocket.clients) client.terminate(); - await new Promise((resolveClose) => - websocket.close(() => resolveClose()), - ); - await closeReplayServer(server); - })(); - await closePromise; - }, - }; -}; diff --git a/src/application/LoopbackReplayRecorder.ts b/src/application/LoopbackReplayRecorder.ts deleted file mode 100644 index ec8086b00..000000000 --- a/src/application/LoopbackReplayRecorder.ts +++ /dev/null @@ -1,180 +0,0 @@ -import type { IncomingMessage, Server } from "node:http"; -import type { - ProcessScenario, - ProtocolEvent, - RecordProcessCaptureEvent, -} from "../domain/processCapture.js"; -import { - ReplayMachineRuntime, - type ReplayMachineDecision, - type ReplayTransitionRecord, -} from "../domain/replayMachineRuntime.js"; -import { scheduleProcessDelay, type ProcessTimer } from "./ProcessTimer.js"; - -/** Bounded protocol and replay-machine observations for one process run. */ -export class ReplayRecorder { - readonly events: ProtocolEvent[] = []; - readonly started = Date.now(); - readonly machine: ReplayMachineRuntime | undefined; - #machineQueue: Promise = Promise.resolve(); - #machineAdmissionOpen = true; - truncated = false; - - constructor( - readonly scenario: ProcessScenario, - private readonly recordEvent: RecordProcessCaptureEvent = () => undefined, - ) { - this.machine = - scenario.replay.machine === null - ? undefined - : new ReplayMachineRuntime(scenario.replay.machine); - } - - get transitions(): readonly ReplayTransitionRecord[] { - return this.machine?.timeline ?? []; - } - - atMs(): number { - return ( - Math.floor( - (Date.now() - this.started) / - this.scenario.normalization.time_bucket_ms, - ) * this.scenario.normalization.time_bucket_ms - ); - } - - rawAtMs(): number { - return Date.now() - this.started; - } - - enqueueMachine(operation: () => Promise): Promise { - if (!this.#machineAdmissionOpen) - return Promise.reject(new Error("replay machine is closing")); - const result = this.#machineQueue.then(operation); - this.#machineQueue = result.then( - () => undefined, - () => undefined, - ); - return result; - } - - stopMachineAdmission(): void { - this.#machineAdmissionOpen = false; - } - - async drainMachine(): Promise { - await this.#machineQueue; - } - - dispatchMachine( - event: Parameters[0], - ): ReplayMachineDecision { - if (this.machine === undefined) - throw new Error("replay machine is not configured"); - return this.machine.dispatch(event); - } - - recordTransition(decision: ReplayMachineDecision): void { - if (decision.transition !== null) - this.recordEvent("replay_transitions", decision.transition.sequence); - } - - record(event: Omit): void { - if (this.events.length >= this.scenario.limits.protocol_events) { - this.truncated = true; - return; - } - const sequence = this.events.length; - this.events.push({ sequence, ...event }); - this.recordEvent("protocol_events", sequence); - } -} - -export const requestHeaders = ( - request: IncomingMessage, -): Readonly> => - Object.fromEntries( - Object.entries(request.headers).flatMap(([name, value]) => - value === undefined - ? [] - : [[name, Array.isArray(value) ? value.join(", ") : value]], - ), - ); - -export const readReplayRequestBody = async ( - request: IncomingMessage, - limit: number, -): Promise => { - const chunks: Buffer[] = []; - let bytes = 0; - for await (const chunk of request) { - const value = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk); - bytes += value.byteLength; - if (bytes > limit) return undefined; - chunks.push(value); - } - return Buffer.concat(chunks).toString("utf8"); -}; - -export const recordMachineEvent = ( - recorder: ReplayRecorder, - event: Omit, - decision: ReplayMachineDecision, -): void => { - recorder.record({ - ...event, - data: recorder.machine?.redact(event.data) ?? event.data, - outcome: decision.outcome, - }); - recorder.recordTransition(decision); -}; - -/** Owns replay delays so endpoint shutdown can release every waiting handler. */ -export class ReplayDelayScheduler { - readonly #pending = new Map void>(); - #closed = false; - - wait(durationMs: number): Promise { - if (this.#closed) return Promise.resolve(); - return new Promise((resolveDelay) => { - let timer: ProcessTimer; - const finish = (): void => { - this.#pending.delete(timer); - resolveDelay(); - }; - timer = scheduleProcessDelay(durationMs, finish); - this.#pending.set(timer, finish); - }); - } - - close(): void { - if (this.#closed) return; - this.#closed = true; - for (const [timer, finish] of this.#pending) { - timer.cancel(); - finish(); - } - this.#pending.clear(); - } -} - -export const listenOnLoopback = async (server: Server): Promise => { - await new Promise((resolveListen, rejectListen) => { - server.once("error", rejectListen); - server.listen(0, "127.0.0.1", () => { - server.off("error", rejectListen); - resolveListen(); - }); - }); - const address = server.address(); - if (address === null || typeof address === "string") - throw new Error("loopback replay did not acquire a TCP port"); - return address.port; -}; - -export const closeReplayServer = (server: Server): Promise => - new Promise((resolveClose, rejectClose) => { - server.close((error) => - error === undefined ? resolveClose() : rejectClose(error), - ); - }); diff --git a/src/application/ManagedRuntimeCorrelationService.ts b/src/application/ManagedRuntimeCorrelationService.ts deleted file mode 100644 index 73ccc0a80..000000000 --- a/src/application/ManagedRuntimeCorrelationService.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { - AnalysisInputError, - AnalysisProtocolError, - type AnalysisError, -} from "../domain/errors.js"; -import { createEvidence, type Evidence } from "../domain/evidence.js"; -import { jsonValueSchema } from "../domain/jsonValue.js"; -import { - managedRuntimeCorrelationInputSchema, - planManagedRuntimeCorrelation, - type ManagedRuntimeCorrelationInput, -} from "../domain/managedRuntimeCorrelation.js"; -import { err, ok, type Result } from "../domain/result.js"; -import { MANAGED_WORKFLOW_PROVIDER } from "./InvestigationProviders.js"; - -const OPERATION = "plan_managed_runtime_correlation" as const; - -/** Configured local runtime executable used when preparing a correlation plan. */ -export interface ManagedRuntimeConfiguration { - readonly executablePath: string | undefined; -} - -/** Live managed runtime configuration source, evaluated for each request. */ -export interface ManagedRuntimeCorrelationDependencies { - readonly configuration: () => ManagedRuntimeConfiguration; -} - -/** Create a non-executing managed runtime correlation plan Evidence record. */ -export const planManagedRuntimeCorrelationEvidence = async ( - dependencies: ManagedRuntimeCorrelationDependencies, - rawInput: unknown, -): Promise> => { - const parsed = managedRuntimeCorrelationInputSchema.safeParse(rawInput); - if (!parsed.success) - return err(new AnalysisInputError(OPERATION, { cause: parsed.error })); - return planManagedRuntimeCorrelationEvidenceValidated( - dependencies, - parsed.data, - ); -}; - -/** Plan runtime correlation from input parsed by a trusted adapter. */ -export const planManagedRuntimeCorrelationEvidenceValidated = async ( - dependencies: ManagedRuntimeCorrelationDependencies, - input: ManagedRuntimeCorrelationInput, -): Promise> => { - const executablePath = - dependencies.configuration().executablePath ?? "dotnet"; - try { - const result = planManagedRuntimeCorrelation(input, executablePath); - return ok( - createEvidence( - { - path: result.static_observation.artifact_path, - sha256: result.static_observation.artifact_sha256, - format: "pe", - }, - MANAGED_WORKFLOW_PROVIDER, - { - predicateType: "rea.managed-runtime-correlation-plan", - operation: OPERATION, - parameters: { - static_members_evidence_id: result.static_observation.evidence_id, - method: jsonValueSchema.parse(input.method), - requested_effect: input.requested_effect, - host: jsonValueSchema.parse(input.host), - bounds: jsonValueSchema.parse(input.bounds), - }, - result: jsonValueSchema.parse(result), - rawResult: null, - confidence: "derived", - authority: "analyst-inference", - environment: null, - limitations: result.limitations, - locations: [ - { - kind: "artifact-path", - path: result.static_observation.artifact_path, - }, - ], - evidenceLinks: result.evidence_links, - }, - ), - ); - } catch (cause: unknown) { - return err( - cause instanceof TypeError - ? new AnalysisInputError(OPERATION, { cause }) - : new AnalysisProtocolError( - "Managed runtime correlation planning produced an invalid result", - { cause }, - ), - ); - } -}; diff --git a/src/application/NodeRuntimeCharacterizationService.ts b/src/application/NodeRuntimeCharacterizationService.ts deleted file mode 100644 index c5628671c..000000000 --- a/src/application/NodeRuntimeCharacterizationService.ts +++ /dev/null @@ -1,342 +0,0 @@ -import { createHash } from "node:crypto"; - -import { z } from "zod"; - -import { - nodeCharacterizationExecutionInputSchema, - nodeCharacterizationExecutionOutputSchema, - nodeCharacterizationPreparationInputSchema, - nodeCharacterizationPreparationOutputSchema, - type NodeCharacterizationPreparationInput, -} from "../domain/nodeRuntimeCharacterization.js"; -import { - AnalysisInputError, - AnalysisProtocolError, - ReplayPlanStaleError, - type AnalysisError, -} from "../domain/errors.js"; -import { createEvidence, type Evidence } from "../domain/evidence.js"; -import { - controlledReplayOutputSchema, - type ControlledReplayExecutionOutput, -} from "../domain/javascriptReplay.js"; -import type { ReplayPlan } from "../domain/javascriptReplay.js"; -import type { JavaScriptExportInstrumentation } from "../domain/javascriptExportInstrumentation.js"; -import { - createRuntimeCharacterizationPlan, - type RuntimeCharacterizationPlan, -} from "../domain/runtimeCharacterization.js"; -import { err, ok, type Result } from "../domain/result.js"; -import type { JsonValue } from "../domain/jsonValue.js"; -import { jsonValueSchema } from "../domain/jsonValue.js"; -import type { ExecutionOptions } from "./AnalysisProvider.js"; -import { InstrumentedJavaScriptReplayHost } from "./InstrumentedJavaScriptReplayHost.js"; -import { - runControlledReplayValidated, - type JavaScriptReplayDependencies, -} from "./JavaScriptReplayService.js"; - -const PREPARE_OPERATION = "prepare_node_characterization" as const; -const EXECUTE_OPERATION = "execute_node_characterization" as const; -const PROVIDER = { - id: "rea-node-characterization", - name: "REA Node runtime characterization", - version: "1", -} as const; - -/** Prepare exact Node/JavaScript characterization without executing target code. */ -export const prepareNodeCharacterization = async ( - dependencies: JavaScriptReplayDependencies, - rawInput: unknown, - options: ExecutionOptions = {}, -): Promise> => { - const parsed = nodeCharacterizationPreparationInputSchema.safeParse(rawInput); - if (!parsed.success) - return err( - new AnalysisInputError(PREPARE_OPERATION, { cause: parsed.error }), - ); - const prepared = await prepareValidated(dependencies, parsed.data, options); - return prepared.ok - ? ok( - jsonValueSchema.parse( - nodeCharacterizationPreparationOutputSchema.parse(prepared.value), - ), - ) - : prepared; -}; - -/** Execute only when the supplied plan hash matches freshly prepared content. */ -export const executeNodeCharacterization = async ( - dependencies: JavaScriptReplayDependencies, - rawInput: unknown, - options: ExecutionOptions = {}, -): Promise> => { - const parsed = nodeCharacterizationExecutionInputSchema.safeParse(rawInput); - if (!parsed.success) - return err( - new AnalysisInputError(EXECUTE_OPERATION, { cause: parsed.error }), - ); - const prepared = await prepareValidated( - dependencies, - parsed.data.preparation, - options, - ); - if (!prepared.ok) return prepared; - if (prepared.value.plan.plan_sha256 !== parsed.data.plan_sha256) - return err( - new ReplayPlanStaleError( - parsed.data.plan_sha256, - prepared.value.plan.plan_sha256, - ), - ); - const plannedReplay = controlledReplayOutputSchema.parse( - prepared.value.replay, - ); - if (plannedReplay.phase !== "plan") - return err( - new AnalysisProtocolError( - "Node characterization preparation did not produce a replay plan", - ), - ); - const host = new InstrumentedJavaScriptReplayHost( - dependencies.host, - parsed.data.preparation.instrumentation, - ); - const executed = await runControlledReplayValidated( - { ...dependencies, host }, - { - ...parsed.data.preparation.replay, - mode: "execute", - plan_digest: plannedReplay.plan.plan_digest, - }, - 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( - "Node characterization execution omitted instrumentation evidence", - ), - ); - return ok( - jsonValueSchema.parse( - nodeCharacterizationExecutionOutputSchema.parse({ - phase: "execution", - plan: prepared.value.plan, - transformation: host.instrumentation.manifest, - transformation_evidence: prepared.value.transformation_evidence, - evidence: createCharacterizationEvidence(prepared.value, replayOutput), - replay: replayOutput, - }), - ), - ); -}; - -const prepareValidated = async ( - dependencies: JavaScriptReplayDependencies, - input: NodeCharacterizationPreparationInput, - options: ExecutionOptions, -): Promise< - Result< - { - readonly phase: "preparation"; - readonly plan: RuntimeCharacterizationPlan; - readonly transformation: NonNullable< - InstrumentedJavaScriptReplayHost["instrumentation"] - >["manifest"]; - readonly transformation_evidence: Evidence; - readonly replay: z.output; - }, - AnalysisError - > -> => { - const host = new InstrumentedJavaScriptReplayHost( - dependencies.host, - input.instrumentation, - ); - const replay = await runControlledReplayValidated( - { ...dependencies, host }, - input.replay, - options, - ); - if (!replay.ok) return replay; - const output = controlledReplayOutputSchema.parse(replay.value); - if (output.phase !== "plan" || host.instrumentation === null) - return err( - new AnalysisProtocolError( - "Node characterization preparation omitted committed plan evidence", - ), - ); - const module = output.plan.left.modules.find( - ({ alias }) => alias === input.selected_alias, - ); - if (module === undefined) - return err( - new AnalysisProtocolError( - "Node characterization replay plan omitted selected module", - ), - ); - const plan = createCharacterizationPlan( - input, - host.instrumentation, - output.plan, - ); - return ok({ - phase: "preparation", - plan, - transformation: host.instrumentation.manifest, - transformation_evidence: createTransformationEvidence( - input, - host.instrumentation, - ), - replay: output, - }); -}; - -const createTransformationEvidence = ( - input: NodeCharacterizationPreparationInput, - instrumentation: JavaScriptExportInstrumentation, -): Evidence => - createEvidence( - { - path: input.instrumentation.artifact_path, - sha256: input.instrumentation.artifact_sha256, - format: "javascript-bundle", - }, - PROVIDER, - { - predicateType: "rea.javascript-export-transformation", - operation: PREPARE_OPERATION, - parameters: { - selected_alias: input.selected_alias, - selected_sha256: input.instrumentation.selection.selected_sha256, - }, - result: jsonValueSchema.parse(instrumentation.manifest), - confidence: "derived", - authority: "shipped-artifact", - locations: [ - { - kind: "file-offset-range", - start: input.instrumentation.selection.byte_start, - end: input.instrumentation.selection.byte_end, - }, - ], - limitations: [ - "The transformation is deterministic derived evidence; execution results are limited to the characterization plan whose content hash matched.", - ], - }, - ); - -const createCharacterizationEvidence = ( - prepared: { - readonly plan: RuntimeCharacterizationPlan; - readonly transformation_evidence: Evidence; - }, - replay: ControlledReplayExecutionOutput, -): Evidence => { - return createEvidence( - { - path: prepared.plan.artifact.path, - sha256: prepared.plan.artifact.sha256, - format: "javascript-bundle", - }, - PROVIDER, - { - predicateType: "rea.runtime-characterization", - operation: EXECUTE_OPERATION, - parameters: { - plan_sha256: prepared.plan.plan_sha256, - replay_evidence_id: replay.evidence.evidence_id, - }, - result: jsonValueSchema.parse({ - plan: prepared.plan, - transformation_evidence_id: - prepared.transformation_evidence.evidence_id, - replay_evidence_id: replay.evidence.evidence_id, - execution: replay.evidence.normalized_result, - }), - confidence: "observed", - authority: "controlled-replay", - environment: replay.evidence.environment, - limitations: [ - "This Evidence proves only the finite hash-matched characterization plan and transformed controlled-replay result, not unmodified shipped-runtime equivalence.", - ...replay.evidence.limitations, - ], - evidenceLinks: [ - prepared.transformation_evidence.evidence_id, - replay.evidence.evidence_id, - ], - }, - ); -}; - -const createCharacterizationPlan = ( - input: NodeCharacterizationPreparationInput, - instrumentation: JavaScriptExportInstrumentation, - replayPlan: ReplayPlan, -): RuntimeCharacterizationPlan => - createRuntimeCharacterizationPlan({ - preparation_sha256: digestPreparation( - instrumentation.manifest.instrumented_sha256, - replayPlan.plan_digest, - ), - artifact: { - path: input.instrumentation.artifact_path, - sha256: input.instrumentation.artifact_sha256, - byte_length: instrumentation.manifest.original_byte_length, - }, - runtime: { - family: "ecmascript", - provider_id: "node-javascript", - executable_path: replayPlan.runtime.executable.path, - executable_sha256: replayPlan.runtime.executable.sha256, - version: replayPlan.runtime.executable.version, - profile_sha256: replayPlan.policy_sha256, - }, - callable: { - callable_id: `callable/${input.instrumentation.selection.selected_sha256}`, - module_id: stableModuleId(input.selected_alias), - export_name: input.instrumentation.selection.export_name, - semantic_evidence_id: null, - selector_sha256: input.instrumentation.selection.selected_sha256, - }, - working_directory: "/work", - isolated_home: "/work", - expected_effect: input.expected_effect, - allowed_boundaries: [], - limits: { - max_calls: replayPlan.cases.length, - max_processes: 0, - max_files: 0, - max_bytes: replayPlan.limits.output_bytes, - max_handles: replayPlan.limits.tasks, - timeout_ms: replayPlan.limits.wall_time_ms, - idle_timeout_ms: replayPlan.limits.wall_time_ms, - }, - determinism: { - clock: "fixed", - randomness: "seeded", - identifiers: "deterministic", - seed: replayPlan.determinism.random_seed, - }, - }); - -const digestPreparation = ( - instrumentedSha256: string, - replayPlanDigest: string, -): string => - createHash("sha256") - .update( - `rea.node-characterization-preparation\0${instrumentedSha256}\0${replayPlanDigest}`, - ) - .digest("hex"); - -const stableModuleId = (alias: string): string => - `module/${createHash("sha256").update(alias).digest("hex")}`; diff --git a/src/application/ProcessCaptureEnvironment.ts b/src/application/ProcessCaptureEnvironment.ts index d27029673..1414349cd 100644 --- a/src/application/ProcessCaptureEnvironment.ts +++ b/src/application/ProcessCaptureEnvironment.ts @@ -1,38 +1,24 @@ -import { delimiter } from "node:path"; - import type { ProcessScenario } from "../domain/processCapture.js"; -import type { LoopbackReplay } from "./LoopbackReplay.js"; -import type { CommandShimReplay } from "./CommandShimReplay.js"; interface ProcessCaptureEnvironmentOptions { readonly scenario: ProcessScenario; - readonly replay: LoopbackReplay; - readonly shimReplay: CommandShimReplay; readonly runId: string; readonly hostEnvironment: Readonly>; } -/** Build the inherited environment with scenario overrides and replay instrumentation. */ +/** Build the child environment from the host plus caller-selected overrides. */ export const makeProcessCaptureEnvironment = ( options: ProcessCaptureEnvironmentOptions, -): Record => { - const { scenario, replay, shimReplay, runId, hostEnvironment } = options; - const environment: Record = { - ...Object.fromEntries( - Object.entries(hostEnvironment).filter( - (entry): entry is [string, string] => entry[1] !== undefined, - ), +): Record => ({ + ...Object.fromEntries( + Object.entries(options.hostEnvironment).filter( + (entry): entry is [string, string] => entry[1] !== undefined, ), - ...scenario.environment, - TERM: scenario.environment.TERM ?? hostEnvironment.TERM ?? "xterm-256color", - REA_PROCESS_RUN_ID: runId, - }; - environment.REA_REPLAY_HTTP_URL = replay.httpUrl; - environment.REA_REPLAY_WEBSOCKET_URL = replay.websocketUrl; - environment.REA_SHIM_LEDGER_URL = shimReplay.url; - // Shims are instrumentation; all remaining executable lookup uses host PATH. - environment.PATH = [shimReplay.binPath, environment.PATH ?? ""] - .filter((part) => part.length > 0) - .join(delimiter); - return environment; -}; + ), + ...options.scenario.environment, + TERM: + options.scenario.environment.TERM ?? + options.hostEnvironment.TERM ?? + "xterm-256color", + REA_PROCESS_RUN_ID: options.runId, +}); diff --git a/src/application/ProcessCaptureJournal.test.ts b/src/application/ProcessCaptureJournal.test.ts index eca7af52d..24232c445 100644 --- a/src/application/ProcessCaptureJournal.test.ts +++ b/src/application/ProcessCaptureJournal.test.ts @@ -1,35 +1,18 @@ import { expect, it } from "vitest"; -import type { ProcessCaptureEventJournalEntry } from "../domain/processCapture.js"; import { createProcessCaptureJournal } from "./ProcessCaptureJournal.js"; -it("publishes journal entries in capture order and supports nested recording", () => { +it("records capture events in monotonic observation order", () => { const journal = createProcessCaptureJournal(); - const observed: ProcessCaptureEventJournalEntry[] = []; - const unsubscribe = journal.subscribe((entry) => observed.push(entry)); + journal.recordEvent("filesystem_checkpoints", 0); journal.recordEvent("lifecycle", 0); - const settlementEntry = journal.record("lifecycle", 1); - unsubscribe(); journal.recordEvent("frames", 0); + journal.recordEvent("filesystem_checkpoints", 1); expect(journal.entries).toEqual([ - { capture_order: 0, collection: "lifecycle", index: 0 }, - { capture_order: 1, collection: "lifecycle", index: 1 }, + { capture_order: 0, collection: "filesystem_checkpoints", index: 0 }, + { capture_order: 1, collection: "lifecycle", index: 0 }, { capture_order: 2, collection: "frames", index: 0 }, + { capture_order: 3, collection: "filesystem_checkpoints", index: 1 }, ]); - expect(observed).toEqual(journal.entries.slice(0, 2)); - expect(settlementEntry).toEqual(journal.entries[1]); - - const nestedJournal = createProcessCaptureJournal(); - const notifications: string[] = []; - nestedJournal.subscribe((entry) => { - notifications.push(`a:${String(entry.capture_order)}`); - if (entry.capture_order === 0) nestedJournal.record("frames", 1); - }); - nestedJournal.subscribe((entry) => - notifications.push(`b:${String(entry.capture_order)}`), - ); - nestedJournal.record("frames", 0); - - expect(notifications).toEqual(["a:0", "b:0", "a:1", "b:1"]); }); diff --git a/src/application/ProcessCaptureJournal.ts b/src/application/ProcessCaptureJournal.ts index 2553e49e5..619902210 100644 --- a/src/application/ProcessCaptureJournal.ts +++ b/src/application/ProcessCaptureJournal.ts @@ -17,63 +17,20 @@ import { scheduleProcessDelay, type ProcessTimer } from "./ProcessTimer.js"; export interface ProcessCaptureJournal { readonly entries: readonly ProcessCaptureEventJournalEntry[]; readonly recordEvent: RecordProcessCaptureEvent; - readonly record: ( - collection: ProcessCaptureEventJournalEntry["collection"], - index: number, - ) => ProcessCaptureEventJournalEntry; - readonly subscribe: ( - listener: (entry: ProcessCaptureEventJournalEntry) => void, - ) => () => void; } /** Create one monotonic event journal for a process capture. */ export const createProcessCaptureJournal = (): ProcessCaptureJournal => { const entries: ProcessCaptureEventJournalEntry[] = []; - const listeners = new Set<(entry: ProcessCaptureEventJournalEntry) => void>(); - const notifications: ProcessCaptureEventJournalEntry[] = []; - let delivering = false; - const deliverNotifications = (): void => { - if (delivering) return; - delivering = true; - const failures: unknown[] = []; - try { - for (;;) { - const notification = notifications.shift(); - if (notification === undefined) break; - for (const listener of Array.from(listeners)) - try { - listener(notification); - } catch (cause: unknown) { - failures.push(cause); - } - } - } finally { - delivering = false; - } - if (failures.length > 0) - throw new AggregateError( - failures, - "process capture journal subscriber failed", - ); - }; - const record = ( + const recordEvent: RecordProcessCaptureEvent = ( collection: ProcessCaptureEventJournalEntry["collection"], index: number, - ): ProcessCaptureEventJournalEntry => { - const entry = { capture_order: entries.length, collection, index }; - entries.push(entry); - notifications.push(entry); - deliverNotifications(); - return entry; + ): void => { + entries.push({ capture_order: entries.length, collection, index }); }; return { entries, - record, - recordEvent: (collection, index) => void record(collection, index), - subscribe: (listener) => { - listeners.add(listener); - return () => listeners.delete(listener); - }, + recordEvent, }; }; diff --git a/src/application/ProcessCaptureLifecycle.ts b/src/application/ProcessCaptureLifecycle.ts index d948eda4a..f136a017d 100644 --- a/src/application/ProcessCaptureLifecycle.ts +++ b/src/application/ProcessCaptureLifecycle.ts @@ -25,24 +25,18 @@ import { import { PRODUCT_IDENTITY } from "../identity.js"; import type { SnapshotResult } from "./FilesystemSnapshot.js"; import { snapshotRoots } from "./FilesystemSnapshot.js"; -import type { LoopbackReplay } from "./LoopbackReplay.js"; +import { classifyFilesystemEffects } from "./ProcessFilesystemEffects.js"; import { cleanupOwnedProcessGroup, observeOwnedProcessGroup, } from "../process/ProcessOwnership.js"; -import { - classifyFilesystemEffects, - ProcessCheckpoints, -} from "./ProcessCheckpoints.js"; import { ProcessCaptureError } from "./ProcessCaptureError.js"; import { assertNotCancelled } from "./ProcessScenarioRuntimeValidation.js"; import { normalizeProcessElapsedTime, normalizeProcessSamples, normalizeProcessText, - normalizeProtocolEvents, } from "./ProcessNormalization.js"; -import type { CommandShimReplay } from "./CommandShimReplay.js"; import { PROCESS_PROVIDER } from "./ProcessEvidence.js"; import { TerminalRenderer } from "./TerminalRenderer.js"; import { scheduleProcessInterval, type ProcessTimer } from "./ProcessTimer.js"; @@ -67,7 +61,6 @@ interface CaptureResultOptions { readonly reason: "exited" | "timeout" | "idle_timeout"; }; readonly samples: readonly ProcessSample[]; - readonly replay: LoopbackReplay; readonly before: SnapshotResult; readonly after: SnapshotResult; readonly truncated: boolean; @@ -77,7 +70,6 @@ interface CaptureResultOptions { readonly renderedFrames: UnverifiedProcessCapture["rendered_frames"]; readonly interactions: readonly InteractionEvent[]; readonly checkpoints: readonly FilesystemCheckpoint[]; - readonly shimEvents: UnverifiedProcessCapture["shim_events"]; readonly settlement: ObservedProcessSettlement; readonly manifest: UnverifiedProcessCapture["manifest"]; readonly eventJournal: readonly ProcessCaptureEventJournalEntry[]; @@ -94,14 +86,32 @@ export type ObservedProcessSettlement = "state" | "elapsed_ms" >; -/** Capture observations that cannot yet claim final cleanup or reactive state. */ +/** Capture observations before owned-resource cleanup has been verified. */ export type PendingProcessCapture = Omit< UnverifiedProcessCapture, - "cleanup" | "reactive_run" | "settlement" + "cleanup" | "settlement" > & { readonly settlement: ObservedProcessSettlement; }; +/** Wait for trailing PTY callbacks before the capture becomes immutable. */ +export const settleProcessCaptureJournal = async ( + journal: readonly ProcessCaptureEventJournalEntry[], + quietMs = 25, + maxWaitMs = 500, +): Promise => { + const deadline = Date.now() + maxWaitMs; + let observed = journal.length; + let lastChangeAt = Date.now(); + while (Date.now() < deadline) { + await new Promise((resolve) => setTimeout(resolve, 4)); + if (journal.length !== observed) { + observed = journal.length; + lastChangeAt = Date.now(); + } else if (Date.now() - lastChangeAt >= quietMs) return; + } +}; + export const buildCaptureResult = ( options: CaptureResultOptions, ): PendingProcessCapture => { @@ -112,10 +122,6 @@ export const buildCaptureResult = ( "Sensitive scripted input values are redacted from process capture Evidence."; const filesystemObservationUnknown = "No filesystem observation paths were selected; filesystem effects remain unknown."; - const protocolEvents = normalizeProtocolEvents( - options.replay.events, - options.scenario, - ); const hasFilesystemObservations = options.scenario.filesystem_observation_paths.length > 0; return { @@ -139,9 +145,6 @@ export const buildCaptureResult = ( options.rootPid, ), filesystem_checkpoints: options.checkpoints, - shim_events: options.shimEvents, - protocol_events: protocolEvents, - replay_transitions: options.replay.transitions, event_journal: options.eventJournal, files_before: options.before.files, files_after: options.after.files, @@ -156,7 +159,6 @@ export const buildCaptureResult = ( ? ["Process-tree sampling ended with an incomplete observation."] : []), "Filesystem observations are before/after snapshots, not syscall traces.", - "The harness does not enforce external network isolation.", "Inherited host environment variables are not recorded and may affect results.", ...(!hasFilesystemObservations ? [filesystemObservationUnknown] : []), ...(hasSensitiveScriptedInput ? [sensitiveInputUnknown] : []), @@ -167,14 +169,14 @@ export const buildCaptureResult = ( reason: "Process trees are sampled and may omit short-lived descendants.", }, - { - scope: "network", - reason: "External network isolation is not enforced by this adapter.", - }, { scope: "environment", reason: "Inherited host environment variables are not recorded.", }, + { + scope: "network", + reason: "Network activity is not observed by this capture.", + }, ...(!hasFilesystemObservations ? [ { @@ -217,14 +219,10 @@ export const createRunManifest = async ( completed_at: completedAt.toISOString(), scenario: scenarioCommitment, comparison_contract: comparisonContract, - shim_plan: scenario.command_shims, - replay_plan: scenario.replay, full_scenario_sha256: digestProcessCommitment(scenarioCommitment), comparison_contract_sha256: digestProcessCommitment(comparisonContract), executable_sha256: executableSha256, normalization_sha256: digestProcessCommitment(scenario.normalization), - shim_plan_sha256: digestProcessCommitment(scenario.command_shims), - replay_plan_sha256: digestProcessCommitment(scenario.replay), }; }; @@ -346,11 +344,8 @@ const processCaptureCleanupHost: ProcessCaptureCleanupHost = { export const releaseProcessResources = async (options: { readonly timers: ReadonlySet; - readonly replay: LoopbackReplay | undefined; readonly terminal: IPty | undefined; readonly renderer: TerminalRenderer | undefined; - readonly shimReplay: CommandShimReplay | undefined; - readonly checkpoints: ProcessCheckpoints | undefined; readonly runId: string; readonly temporaryRoot: string; readonly capturedProcessGroupIds: readonly number[]; @@ -359,26 +354,11 @@ export const releaseProcessResources = async (options: { const host = options.host ?? processCaptureCleanupHost; for (const timer of options.timers) timer.cancel(); let failure: string | undefined; - try { - await options.replay?.close(); - } catch { - failure = "loopback replay cleanup failed"; - } - try { - await options.shimReplay?.close(); - } catch { - failure ??= "command shim replay cleanup failed"; - } try { await options.renderer?.dispose(); } catch { failure ??= "terminal renderer cleanup failed"; } - try { - await options.checkpoints?.dispose(); - } catch { - failure ??= "filesystem checkpoint cleanup failed"; - } if (options.terminal !== undefined && host.platform !== "win32") { for (const processGroupId of new Set(options.capturedProcessGroupIds)) { const cleaned = await host.cleanupProcessGroup({ @@ -405,7 +385,6 @@ export const captureTerminalFrames = (options: { readonly temporaryRoot: string; readonly onOutput: () => void; readonly renderer: TerminalRenderer; - readonly checkpoints: ProcessCheckpoints; readonly recordEvent: RecordProcessCaptureEvent; }): (() => boolean) => { let outputBytes = 0; @@ -434,11 +413,8 @@ export const captureTerminalFrames = (options: { at_ms: atMs, data: normalized, }); - // Queue the observed output before publishing it: reactive subscribers may - // synchronously resize the terminal in response to this journal entry. options.renderer.write(data, atMs); options.recordEvent("frames", sequence); - options.checkpoints.observeTerminal(normalized); }); return () => truncated; }; diff --git a/src/application/ProcessCaptureObservation.test.ts b/src/application/ProcessCaptureObservation.test.ts index e4b2899aa..119b153cc 100644 --- a/src/application/ProcessCaptureObservation.test.ts +++ b/src/application/ProcessCaptureObservation.test.ts @@ -2,7 +2,6 @@ import { expect, it } from "vitest"; import { snapshotRoots } from "./FilesystemSnapshot.js"; import { buildCaptureResult } from "./ProcessCaptureLifecycle.js"; -import { ProcessCheckpoints } from "./ProcessCheckpoints.js"; import { normalizeProcessSamples } from "./ProcessNormalization.js"; import { isInitializedPtyRoot, readLinuxChildren } from "./ProcessSampling.js"; import { TerminalRenderer } from "./TerminalRenderer.js"; @@ -19,7 +18,7 @@ const base = { working_directory: "/tmp", }; -it("returns detached terminal and filesystem checkpoint observations", async () => { +it("returns detached terminal observations", async () => { const observed: string[] = []; const renderer = new TerminalRenderer({ columns: 40, @@ -46,21 +45,6 @@ it("returns detached terminal and filesystem checkpoint observations", async () expect(reread).toHaveLength(frames.length); expect(reread[0]?.cursor_x).toBe(originalCursor); await renderer.dispose(); - - const scenario = parseProcessScenario(base); - const checkpoints = new ProcessCheckpoints( - scenario, - Date.now(), - { files: [], truncated: false }, - { signal: undefined }, - ); - const first = await checkpoints.finish({ files: [], truncated: false }); - const checkpoint = first[0]; - if (checkpoint === undefined) throw new Error("expected checkpoint"); - Reflect.set(checkpoint, "name", "tampered"); - const second = await checkpoints.finish({ files: [], truncated: false }); - expect(second[0]?.name).toBe("before"); - await checkpoints.dispose(); }); it("preserves rendered observation order instead of timestamp sorting", () => { @@ -93,14 +77,6 @@ it("preserves rendered observation order instead of timestamp sorting", () => { frames: [], exit: { exitCode: 0, reason: "exited" }, samples: [], - replay: { - httpUrl: "http://127.0.0.1", - websocketUrl: "ws://127.0.0.1/ws", - events: [], - transitions: [], - truncated: false, - close: () => Promise.resolve(), - }, before: { files: [], truncated: false }, after: { files: [], truncated: false }, truncated: false, @@ -110,7 +86,6 @@ it("preserves rendered observation order instead of timestamp sorting", () => { renderedFrames, interactions: [], checkpoints: capture.filesystem_checkpoints, - shimEvents: [], settlement: { state: capture.settlement.state, elapsed_ms: capture.settlement.elapsed_ms, @@ -128,14 +103,6 @@ it("marks redacted scripted input as an interaction unknown", () => { frames: [], exit: { exitCode: 0, reason: "exited" }, samples: [], - replay: { - httpUrl: "http://127.0.0.1", - websocketUrl: "ws://127.0.0.1/ws", - events: [], - transitions: [], - truncated: false, - close: () => Promise.resolve(), - }, before: { files: [], truncated: false }, after: { files: [], truncated: false }, truncated: false, @@ -157,7 +124,6 @@ it("marks redacted scripted input as an interaction unknown", () => { }, ], checkpoints: capture.filesystem_checkpoints, - shimEvents: [], settlement: { state: capture.settlement.state, elapsed_ms: capture.settlement.elapsed_ms, @@ -259,7 +225,7 @@ it("admits PTY samples only after stable session and token setup", () => { ).toBe(true); }); -it("keeps interaction and shim residual uncertainty in separate scopes", () => { +it("keeps interaction and process residual uncertainty in separate scopes", () => { const baseCapture = emptyCapture(); const interaction = parseProcessCapture({ ...baseCapture, @@ -267,22 +233,24 @@ it("keeps interaction and shim residual uncertainty in separate scopes", () => { { scope: "interaction", reason: "Interaction capture was partial." }, ], }); - const shim = parseProcessCapture({ + const process = parseProcessCapture({ ...baseCapture, - residual_unknowns: [{ scope: "shim", reason: "Shim capture was partial." }], + residual_unknowns: [ + { scope: "process", reason: "Process sampling was partial." }, + ], }); expect(compareProcessCaptures(interaction, baseCapture)).toMatchObject({ status: "unknown", terminal: "unchanged", interaction: "unknown", - shim: "unchanged", + process: "unchanged", }); - expect(compareProcessCaptures(shim, baseCapture)).toMatchObject({ + expect(compareProcessCaptures(process, baseCapture)).toMatchObject({ status: "unknown", terminal: "unchanged", interaction: "unchanged", - shim: "unknown", + process: "unknown", }); }); diff --git a/src/application/ProcessCheckpoints.ts b/src/application/ProcessCheckpoints.ts deleted file mode 100644 index 1eb648c85..000000000 --- a/src/application/ProcessCheckpoints.ts +++ /dev/null @@ -1,216 +0,0 @@ -import type { - FileState, - FilesystemCheckpoint, - ProcessScenario, - RecordProcessCaptureEvent, -} from "../domain/processCapture.js"; -import { snapshotRoots, type SnapshotResult } from "./FilesystemSnapshot.js"; -import { scheduleProcessDelay, type ProcessTimer } from "./ProcessTimer.js"; - -/** Classify path-stable filesystem effects between two bounded states. */ -export const classifyFilesystemEffects = ( - before: readonly FileState[], - after: readonly FileState[], -): FilesystemCheckpoint["effects"] => { - const beforeByPath = new Map(before.map((file) => [file.path, file])); - const afterByPath = new Map(after.map((file) => [file.path, file])); - return [...new Set([...beforeByPath.keys(), ...afterByPath.keys()])] - .sort() - .map((path) => { - const beforeFile = beforeByPath.get(path) ?? null; - const afterFile = afterByPath.get(path) ?? null; - if (beforeFile === null) { - if (afterFile === null) - throw new TypeError(`Filesystem effect ${path} has no file state`); - return { - path, - status: "created", - before: null, - after: afterFile, - } as const; - } - if (afterFile === null) - return { - path, - status: "deleted", - before: beforeFile, - after: null, - } as const; - return { - path, - status: - JSON.stringify(beforeFile) === JSON.stringify(afterFile) - ? "unchanged" - : "modified", - before: beforeFile, - after: afterFile, - } as const; - }); -}; - -/** Coordinates named lifecycle filesystem observations without overlapping scans. */ -export class ProcessCheckpoints { - readonly #captures: FilesystemCheckpoint[] = []; - readonly #captured = new Set(); - readonly #terminalCounts = new Map(); - readonly #terminalTails = new Map(); - readonly #timers = new Set(); - readonly #signal: AbortSignal | undefined; - readonly #recordEvent: RecordProcessCaptureEvent; - #pending: Promise = Promise.resolve(); - - constructor( - private readonly scenario: ProcessScenario, - private readonly started: number, - before: SnapshotResult, - options: { - readonly signal: AbortSignal | undefined; - readonly recordEvent?: RecordProcessCaptureEvent; - } = { signal: undefined }, - ) { - this.#signal = options.signal; - this.#recordEvent = options.recordEvent ?? (() => undefined); - this.#captures.push({ - name: "before", - at_ms: 0, - files: before.files, - effects: [], - truncated: before.truncated, - }); - this.#recordEvent("filesystem_checkpoints", 0); - this.#captured.add("before"); - for (const checkpoint of scenario.checkpoints) { - if (checkpoint.trigger.type !== "time") continue; - const timer = scheduleProcessDelay(checkpoint.trigger.at_ms, () => - this.capture(checkpoint.name), - ); - this.#timers.add(timer); - } - } - - /** Observe normalized terminal text and fire matching literal checkpoints once. */ - observeTerminal(data: string): void { - for (const checkpoint of this.scenario.checkpoints) { - const trigger = checkpoint.trigger; - if ( - trigger.type !== "terminal_literal" || - this.#captured.has(checkpoint.name) - ) - continue; - const combined = `${this.#terminalTails.get(checkpoint.name) ?? ""}${data}`; - const count = - (this.#terminalCounts.get(checkpoint.name) ?? 0) + - countOccurrences(combined, trigger.value); - this.#terminalCounts.set(checkpoint.name, count); - this.#terminalTails.set( - checkpoint.name, - trigger.value.length === 1 - ? "" - : combined.slice(-(trigger.value.length - 1)), - ); - if (count >= trigger.occurrence) this.capture(checkpoint.name); - } - } - - /** Capture every checkpoint assigned to the specified lifecycle trigger. */ - trigger(type: "root_exit" | "settled"): void { - for (const checkpoint of this.scenario.checkpoints) - if (checkpoint.trigger.type === type) this.capture(checkpoint.name); - } - - /** Queue one idempotent named snapshot. */ - capture(name: string): void { - this.#scheduleCapture(name, this.#signal); - } - - /** Read one committed checkpoint for synchronous journal projection. */ - at(index: number): FilesystemCheckpoint | undefined { - const checkpoint = this.#captures[index]; - return checkpoint === undefined ? undefined : structuredClone(checkpoint); - } - - #scheduleCapture(name: string, signal: AbortSignal | undefined): void { - if (this.#captured.has(name)) return; - this.#captured.add(name); - // Serialize scans even when time, terminal, and lifecycle triggers fire - // together. Each effect set is intentionally relative to the immediately - // preceding checkpoint, which preserves transient create/delete behavior. - this.#pending = this.#pending.then(async () => { - const snapshot = await snapshotRoots(this.scenario, signal); - const previous = this.#captures.at(-1)?.files ?? []; - const index = this.#captures.length; - this.#captures.push({ - name, - at_ms: Math.max(0, Date.now() - this.started), - files: snapshot.files, - effects: classifyFilesystemEffects(previous, snapshot.files), - truncated: snapshot.truncated, - }); - this.#recordEvent("filesystem_checkpoints", index); - }); - } - - /** Queue one named snapshot and return its exact captured record. */ - async captureAndRead( - name: string, - signal?: AbortSignal, - ): Promise<{ - readonly index: number; - readonly checkpoint: FilesystemCheckpoint; - }> { - const captureSignal = - signal === undefined - ? this.#signal - : this.#signal === undefined - ? signal - : AbortSignal.any([this.#signal, signal]); - this.#scheduleCapture(name, captureSignal); - const scheduled = this.#pending; - await scheduled; - const index = this.#captures.findIndex( - ({ name: capturedName }) => capturedName === name, - ); - const checkpoint = this.#captures[index]; - if (index < 0 || checkpoint === undefined) - throw new Error(`filesystem checkpoint was not captured: ${name}`); - return { index, checkpoint: structuredClone(checkpoint) }; - } - - /** Finish pending snapshots and return them in observation order. */ - async finish( - after: SnapshotResult, - ): Promise { - for (const timer of this.#timers) timer.cancel(); - await this.#pending; - const previous = this.#captures.at(-1)?.files ?? []; - const index = this.#captures.length; - this.#captures.push({ - name: "after_settlement", - at_ms: Math.max(0, Date.now() - this.started), - files: after.files, - effects: classifyFilesystemEffects(previous, after.files), - truncated: after.truncated, - }); - this.#recordEvent("filesystem_checkpoints", index); - return structuredClone(this.#captures); - } - - /** Cancel scheduled captures and await any snapshot already in progress. */ - async dispose(): Promise { - for (const timer of this.#timers) timer.cancel(); - this.#timers.clear(); - await this.#pending; - } -} - -const countOccurrences = (text: string, value: string): number => { - let count = 0; - let offset = 0; - while (offset <= text.length - value.length) { - const found = text.indexOf(value, offset); - if (found < 0) break; - count += 1; - offset = found + value.length; - } - return count; -}; diff --git a/src/application/ProcessEvidence.test.ts b/src/application/ProcessEvidence.test.ts index 463cb9298..b286cdcf0 100644 --- a/src/application/ProcessEvidence.test.ts +++ b/src/application/ProcessEvidence.test.ts @@ -2,7 +2,6 @@ import { expect, it } from "vitest"; import { createProcessCaptureEvidence } from "./ProcessEvidence.js"; import { createRunManifest } from "./ProcessCaptureLifecycle.js"; -import { normalizeProtocolEvents } from "./ProcessNormalization.js"; import { emptyUnverifiedProcessCapture } from "../domain/processCapture.fixture.js"; import { compareProcessCaptures, @@ -61,28 +60,6 @@ const captureEvidenceForEnvironmentSecret = async (value: string) => { working_directory: "/tmp", environment: { API_TOKEN: value }, events: [{ type: "input", at_ms: 0, data: value }], - command_shims: [ - { - name: "echo", - routes: [ - { - arguments: [], - outputs: [{ at_ms: 0, stream: "stdout", data: value }], - termination: { type: "exit", code: 0 }, - }, - ], - }, - ], - replay: { - http: [ - { - method: "GET", - path: `/token?token=${value}`, - status: 200, - body: value, - }, - ], - }, }); const base = emptyUnverifiedProcessCapture(); const manifest = await createRunManifest(scenario, new Date(0), new Date(1)); @@ -94,21 +71,6 @@ const captureEvidenceForEnvironmentSecret = async (value: string) => { ...base, normalization: scenario.normalization, frames: [{ sequence: 0, at_ms: 0, data: "observed-output" }], - protocol_events: normalizeProtocolEvents( - [ - { - sequence: 0, - at_ms: 0, - protocol: "http", - direction: "request", - method: "GET", - path: `/token?token=${value}`, - data: "", - outcome: "matched", - }, - ], - scenario, - ), residual_unknowns: [ { scope: "environment", @@ -143,7 +105,7 @@ it("does not treat captures with different redacted inputs as equivalent", () => ).toMatchObject({ status: "unknown", interaction: "unknown" }); }); -it("preserves selected local environment, shim, replay, and protocol values", async () => { +it("preserves selected local environment and input values", async () => { const left = await captureEvidenceForEnvironmentSecret("secret-left"); const right = await captureEvidenceForEnvironmentSecret("secret-right"); const serialized = JSON.stringify(left); @@ -151,7 +113,6 @@ it("preserves selected local environment, shim, replay, and protocol values", as const rightCapture = parseProcessCapture(right.normalized_result); expect(serialized).toContain("secret-left"); - expect(serialized).toContain("/token?token=secret-left"); expect(leftCapture.manifest.scenario).toMatchObject({ environment: { API_TOKEN: "secret-left" }, }); diff --git a/src/application/ProcessEvidence.ts b/src/application/ProcessEvidence.ts index bab243fa9..da9f7d04e 100644 --- a/src/application/ProcessEvidence.ts +++ b/src/application/ProcessEvidence.ts @@ -9,7 +9,7 @@ import type { /** Provider identity for controlled process capture evidence. */ export const PROCESS_PROVIDER = { id: "rea-process", - name: "REA deterministic process harness", + name: "REA process capture", version: "3", } as const; @@ -22,8 +22,6 @@ const processEvidenceParameters = ( event_count: scenario.events.length, filesystem_observation_path_count: scenario.filesystem_observation_paths.length, - checkpoint_count: scenario.checkpoints.length, - command_shim_count: scenario.command_shims.length, normalization: scenario.normalization, }); diff --git a/src/application/ProcessFilesystemEffects.ts b/src/application/ProcessFilesystemEffects.ts new file mode 100644 index 000000000..a4c7112c1 --- /dev/null +++ b/src/application/ProcessFilesystemEffects.ts @@ -0,0 +1,45 @@ +import type { + FileState, + FilesystemCheckpoint, +} from "../domain/processCapture.js"; + +/** Classify path-stable filesystem effects between two bounded states. */ +export const classifyFilesystemEffects = ( + before: readonly FileState[], + after: readonly FileState[], +): FilesystemCheckpoint["effects"] => { + const beforeByPath = new Map(before.map((file) => [file.path, file])); + const afterByPath = new Map(after.map((file) => [file.path, file])); + return [...new Set([...beforeByPath.keys(), ...afterByPath.keys()])] + .sort() + .map((path) => { + const beforeFile = beforeByPath.get(path) ?? null; + const afterFile = afterByPath.get(path) ?? null; + if (beforeFile === null) { + if (afterFile === null) + throw new TypeError(`Filesystem effect ${path} has no file state`); + return { + path, + status: "created", + before: null, + after: afterFile, + } as const; + } + if (afterFile === null) + return { + path, + status: "deleted", + before: beforeFile, + after: null, + } as const; + return { + path, + status: + JSON.stringify(beforeFile) === JSON.stringify(afterFile) + ? "unchanged" + : "modified", + before: beforeFile, + after: afterFile, + } as const; + }); +}; diff --git a/src/application/ProcessHarness.test.ts b/src/application/ProcessHarness.test.ts index 136c161dc..fe96c8194 100644 --- a/src/application/ProcessHarness.test.ts +++ b/src/application/ProcessHarness.test.ts @@ -2,6 +2,43 @@ import { expect, it } from "vitest"; import { processScenarioSchema } from "../domain/processScenario.js"; import { AnalysisCapabilityUnavailableError } from "../domain/errors.js"; import { captureProcessScenario } from "./ProcessHarness.js"; +import { settleProcessCaptureJournal } from "./ProcessCaptureLifecycle.js"; +import { processCaptureSchema } from "../domain/processCapture.js"; +import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "../domain/processCapture.fixture.js"; + +it("rejects legacy replay output instead of silently discarding it", () => { + expect( + processCaptureSchema.safeParse({ + ...EMPTY_PROCESS_CAPTURE_EXAMPLE, + protocol_events: [], + }).success, + ).toBe(false); +}); + +it("waits for terminal observations delivered after the exit callback", async () => { + const journal: Array<{ + capture_order: number; + collection: "frames"; + index: number; + }> = [{ capture_order: 0, collection: "frames", index: 0 }]; + const lateFrame = new Promise((resolve) => { + setTimeout(() => { + journal.push({ capture_order: 1, collection: "frames", index: 1 }); + resolve(); + }, 12); + }); + + let settled = false; + const wait = settleProcessCaptureJournal(journal, 20, 200).then(() => { + settled = true; + }); + await lateFrame; + expect(settled).toBe(false); + await wait; + + expect(journal).toHaveLength(2); + expect(journal[1]).toMatchObject({ collection: "frames", index: 1 }); +}); it("fails closed on Windows before resolving or launching scenario paths", async () => { const scenario = processScenarioSchema.parse({ diff --git a/src/application/ProcessHarness.ts b/src/application/ProcessHarness.ts index d7098bca5..faea7d0ae 100644 --- a/src/application/ProcessHarness.ts +++ b/src/application/ProcessHarness.ts @@ -20,20 +20,11 @@ import { processCaptureCancelled, } from "./ProcessCaptureError.js"; export { ProcessCaptureError } from "./ProcessCaptureError.js"; -import { startLoopbackReplay, type LoopbackReplay } from "./LoopbackReplay.js"; import { startProcessSampler } from "./ProcessSampling.js"; import { snapshotRoots } from "./FilesystemSnapshot.js"; -import { ProcessCheckpoints } from "./ProcessCheckpoints.js"; import { TerminalRenderer } from "./TerminalRenderer.js"; import type { ProcessTimer } from "./ProcessTimer.js"; -import { - startCommandShimReplay, - type CommandShimReplay, -} from "./CommandShimReplay.js"; -import { - normalizeProcessShimEvent, - normalizeProcessText, -} from "./ProcessNormalization.js"; +import { normalizeProcessText } from "./ProcessNormalization.js"; import { selectCapturedProcessGroupIds } from "../process/ProcessOwnership.js"; import { awaitTerminalExit, @@ -44,6 +35,7 @@ import { prepareProcessCapture, releaseProcessResources, resolveProcessResult, + settleProcessCaptureJournal, type PendingProcessCapture, } from "./ProcessCaptureLifecycle.js"; import { @@ -53,40 +45,27 @@ import { import { createProcessCaptureJournal, scheduleScenarioInteractions, - type ProcessCaptureJournal, } from "./ProcessCaptureJournal.js"; -import { - assertSupportedReactiveScenario, - projectProcessReactiveRun, - startProcessReactiveHarness, - type ProcessReactiveHarness, -} from "./ProcessReactiveHarness.js"; import { makeProcessCaptureEnvironment } from "./ProcessCaptureEnvironment.js"; +import { classifyFilesystemEffects } from "./ProcessFilesystemEffects.js"; import { processCaptureOwnershipUnavailableReason } from "./ProcessCaptureCapability.js"; export { probeProcessCaptureCapability } from "./ProcessCaptureCapability.js"; interface StartedCaptureRuntime { - readonly replay: LoopbackReplay; readonly renderer: TerminalRenderer; - readonly checkpoints: ProcessCheckpoints; - readonly shimReplay: CommandShimReplay; readonly terminal: IPty; readonly started: number; readonly startedAt: Date; readonly lastOutput: () => number; readonly framesTruncated: () => boolean; readonly stopSampler: () => Promise<{ readonly partial: boolean }>; - readonly reactive: ProcessReactiveHarness | undefined; } const cleanupFailedStartup = async (options: { readonly cause: unknown; readonly timers: Set; - readonly replay: LoopbackReplay | undefined; readonly terminal: IPty | undefined; readonly renderer: TerminalRenderer | undefined; - readonly shimReplay: CommandShimReplay | undefined; - readonly checkpoints: ProcessCheckpoints | undefined; readonly runId: string; readonly temporaryRoot: string; }): Promise => { @@ -125,67 +104,23 @@ interface StartCaptureRuntimeOptions { readonly hostEnvironment: Readonly>; readonly temporaryRoot: string; readonly runId: string; - readonly before: Awaited>; readonly frames: TerminalFrame[]; readonly samples: ProcessSample[]; readonly interactions: InteractionEvent[]; readonly timers: Set; readonly dispatchedEventIndexes: Set; readonly recordEvent: RecordProcessCaptureEvent; - readonly journal: ProcessCaptureJournal; readonly signal?: AbortSignal; } -/** - * Wait until the capture journal stops growing. - * - * node-pty reports buffered output through `onData` callbacks rather than an - * awaitable read, so chunks can still be in flight after the child exits. The - * quiet interval is measured in elapsed time rather than scheduler turns: - * consecutive `setImmediate` turns elapse in microseconds, so any fixed number - * of them finishes long before a delayed pty callback under host contention, - * which is exactly when the trailing chunk matters. `maxWaitMs` bounds the - * total wait so a pathological stream cannot stall exit. - */ -const settleTrailingJournal = async ( - journal: readonly ProcessCaptureEventJournalEntry[], - quietMs = 25, - maxWaitMs = 500, -): Promise => { - const deadline = Date.now() + maxWaitMs; - let observed = journal.length; - let lastChangeAt = Date.now(); - while (Date.now() < deadline) { - await new Promise((resolve) => setTimeout(resolve, 4)); - if (journal.length !== observed) { - observed = journal.length; - lastChangeAt = Date.now(); - } else if (Date.now() - lastChangeAt >= quietMs) return; - } -}; - -const reactiveCapture = ( - options: StartCaptureRuntimeOptions, - protocolEvents: () => LoopbackReplay["events"], -): Parameters[0]["capture"] => ({ - ...options, - processSamples: options.samples, - protocolEvents, -}); - const startCaptureRuntime = async ( options: StartCaptureRuntimeOptions, ): Promise => { const { scenario } = options; - let replay: LoopbackReplay | undefined; let renderer: TerminalRenderer | undefined; - let checkpoints: ProcessCheckpoints | undefined; - let shimReplay: CommandShimReplay | undefined; let terminal: IPty | undefined; - let reactive: ProcessReactiveHarness | undefined; try { const { spawn } = await import("@lydell/node-pty"); - replay = await startLoopbackReplay(scenario, options.recordEvent); const startedAt = new Date(); const started = Date.now(); let lastOutput = started; @@ -195,19 +130,9 @@ const startCaptureRuntime = async ( () => terminal?.pid ?? -1, options.recordEvent, ); - checkpoints = new ProcessCheckpoints(scenario, started, options.before, { - signal: options.signal, - recordEvent: options.recordEvent, - }); - shimReplay = await startCommandShimReplay( - scenario, - options.temporaryRoot, - started, - options.recordEvent, - ); terminal = spawn(scenario.executable, [...scenario.arguments], { cwd: scenario.working_directory, - env: makeProcessCaptureEnvironment({ ...options, replay, shimReplay }), + env: makeProcessCaptureEnvironment(options), cols: scenario.terminal.columns, rows: scenario.terminal.rows, name: "xterm-256color", @@ -218,16 +143,6 @@ const startCaptureRuntime = async ( started, onOutput: () => (lastOutput = Date.now()), renderer, - checkpoints, - }); - reactive = startProcessReactiveHarness({ - capture: reactiveCapture(options, () => replay?.events ?? []), - scenario, - terminal: () => terminal, - renderer, - checkpoints, - shimReplay, - started, }); scheduleScenarioInteractions({ ...options, @@ -244,49 +159,26 @@ const startCaptureRuntime = async ( recordEvent: options.recordEvent, }); return { - replay, renderer, - checkpoints, - shimReplay, terminal, started, startedAt, lastOutput: () => lastOutput, framesTruncated, stopSampler, - reactive, }; } catch (cause: unknown) { - reactive?.unsubscribe(); - await reactive?.coordinator.close(); return cleanupFailedStartup({ cause, timers: options.timers, - replay, terminal, renderer, - shimReplay, - checkpoints, runId: options.runId, temporaryRoot: options.temporaryRoot, }); } }; -const normalizedShimEvents = ( - runtime: StartedCaptureRuntime, - scenario: ProcessScenario, - temporaryRoot: string, -): UnverifiedProcessCapture["shim_events"] => - runtime.shimReplay.events.map((event) => - normalizeProcessShimEvent( - event, - scenario, - temporaryRoot, - runtime.terminal.pid, - ), - ); - const finishProcessRun = async (options: { readonly runtime: StartedCaptureRuntime | undefined; readonly timers: Set; @@ -297,15 +189,11 @@ const finishProcessRun = async (options: { readonly capture: PendingProcessCapture | undefined; readonly executionFailure: unknown; }): Promise => { - options.runtime?.reactive?.unsubscribe(); await options.stopSampler(); const cleanupFailure = await releaseProcessResources({ timers: options.timers, - replay: options.runtime?.replay, terminal: options.runtime?.terminal, renderer: options.runtime?.renderer, - shimReplay: options.runtime?.shimReplay, - checkpoints: options.runtime?.checkpoints, runId: options.runId, temporaryRoot: options.temporaryRoot, capturedProcessGroupIds: @@ -316,11 +204,6 @@ const finishProcessRun = async (options: { options.samples, ), }); - if (cleanupFailure !== undefined) - await options.runtime?.reactive?.coordinator.submit({ - kind: "cleanup_failed", - }); - await options.runtime?.reactive?.coordinator.close(); let { capture, executionFailure } = options; let verifiedCapture: ProcessCapture | undefined; if (capture !== undefined && cleanupFailure === undefined) { @@ -330,7 +213,6 @@ const finishProcessRun = async (options: { : { ...capture.settlement, cleanup_outcome: "cleaned" }; const completedCapture: UnverifiedProcessCapture = { ...capture, - reactive_run: projectProcessReactiveRun(options.runtime?.reactive), settlement, cleanup: { owned_process_group: "verified", @@ -369,45 +251,36 @@ const completeCapture = async (options: { readonly recordEvent: RecordProcessCaptureEvent; }): Promise => { const { runtime, scenario } = options; - runtime.checkpoints.trigger("root_exit"); const { reason } = options.exit; - if (reason === "cancelled") { - if (runtime.reactive !== undefined) { - await runtime.reactive.coordinator.submit({ kind: "cancelled" }); - runtime.reactive.unsubscribe(); - } - throw processCaptureCancelled(); - } + if (reason === "cancelled") throw processCaptureCancelled(); const settlement = await observeSettlement( options.runId, selectCapturedProcessGroupIds(runtime.terminal.pid, options.samples), scenario.settle_ms, options.recordEvent, ); - runtime.checkpoints.trigger("settled"); const samplingPartial = (await runtime.stopSampler()).partial; - if (runtime.reactive !== undefined) { - // Process, filesystem, shim, and protocol observations can be recorded - // during settlement after the PTY exits. Make target loss terminal only - // after that journal has drained, otherwise the coordinator's control - // priority discards a valid multi-source completion predicate. - // - // Draining the coordinator is not sufficient on its own: node-pty delivers - // buffered output through onData callbacks, which run outside the - // coordinator's queue. A trailing chunk that has not been delivered yet has - // produced no journal entry, so the drain has nothing to wait for and the - // target is declared lost while a terminal trigger is still satisfiable. - // Let any trailing chunks land first. - await settleTrailingJournal(options.eventJournal); - await runtime.reactive.coordinator.drain(); - await runtime.reactive.coordinator.submit({ kind: "target_lost" }); - runtime.reactive.unsubscribe(); - } + await settleProcessCaptureJournal(options.eventJournal); assertNotCancelled(options.signal); const after = await snapshotRoots(scenario, options.signal); + options.recordEvent("filesystem_checkpoints", 1); const renderedFrames = await runtime.renderer.frames(); - const checkpoints = await runtime.checkpoints.finish(after); - await runtime.replay.close(); + const checkpoints: UnverifiedProcessCapture["filesystem_checkpoints"] = [ + { + name: "before", + at_ms: 0, + files: options.before.files, + effects: [], + truncated: options.before.truncated, + }, + { + name: "after_settlement", + at_ms: Math.max(0, Date.now() - runtime.started), + files: after.files, + effects: classifyFilesystemEffects(options.before.files, after.files), + truncated: after.truncated, + }, + ]; const manifest = await createRunManifest( scenario, runtime.startedAt, @@ -416,8 +289,6 @@ const completeCapture = async (options: { const truncated = options.initiallyTruncated || after.truncated || - runtime.replay.truncated || - runtime.shimReplay.truncated || runtime.framesTruncated() || checkpoints.some(({ truncated: partial }) => partial) || samplingPartial || @@ -426,7 +297,6 @@ const completeCapture = async (options: { frames: options.frames, exit: { ...options.exit, reason }, samples: options.samples, - replay: runtime.replay, before: options.before, after, truncated, @@ -436,7 +306,6 @@ const completeCapture = async (options: { renderedFrames, interactions: options.interactions, checkpoints, - shimEvents: normalizedShimEvents(runtime, scenario, options.temporaryRoot), settlement, manifest, eventJournal: options.eventJournal, @@ -449,7 +318,6 @@ const runProcessScenario = async ( signal?: AbortSignal, hostEnvironment: Readonly> = process.env, ): Promise => { - assertSupportedReactiveScenario(scenario); const { temporaryRoot, runId, before } = await prepareProcessCapture( scenario, signal, @@ -458,6 +326,7 @@ const runProcessScenario = async ( const samples: ProcessSample[] = []; const journal = createProcessCaptureJournal(); const { entries: eventJournal, recordEvent } = journal; + recordEvent("filesystem_checkpoints", 0); let runtime: StartedCaptureRuntime | undefined; const timers = new Set(); let capture: PendingProcessCapture | undefined; @@ -472,14 +341,12 @@ const runProcessScenario = async ( hostEnvironment, temporaryRoot, runId, - before, frames, samples, interactions, timers, dispatchedEventIndexes, recordEvent, - journal, ...(signal === undefined ? {} : { signal }), }); stopSampler = runtime.stopSampler; diff --git a/src/application/ProcessNormalization.ts b/src/application/ProcessNormalization.ts index 58cc5bb01..2c3c1236f 100644 --- a/src/application/ProcessNormalization.ts +++ b/src/application/ProcessNormalization.ts @@ -1,8 +1,6 @@ import type { - ProcessCapture, ProcessSample, ProcessScenario, - ShimEvent, } from "../domain/processCapture.js"; /** Bucket one elapsed process-capture timestamp under scenario normalization. */ @@ -88,25 +86,6 @@ export const normalizeProcessSamples = ( })); }; -/** Normalize one shim observation identically for live matching and capture. */ -export const normalizeProcessShimEvent = ( - event: ShimEvent, - scenario: ProcessScenario, - temporaryRoot: string, - rootPid: number, -): ShimEvent => ({ - ...event, - arguments: event.arguments.map((argument) => - normalizeProcessText(argument, scenario, temporaryRoot, rootPid), - ), - working_directory: normalizeProcessText( - event.working_directory, - scenario, - temporaryRoot, - rootPid, - ), -}); - const normalizePidTokens = ( value: string, identifiers: readonly number[], @@ -121,12 +100,3 @@ const normalizePidTokens = ( "", ); }; - -export const normalizeProtocolEvents = ( - events: readonly ProcessCapture["protocol_events"][number][], - scenario: ProcessScenario, -): readonly ProcessCapture["protocol_events"][number][] => - events.map((event) => ({ - ...event, - data: normalizeProcessText(event.data, scenario, "", -1), - })); diff --git a/src/application/ProcessReactiveCoordinator.test.ts b/src/application/ProcessReactiveCoordinator.test.ts deleted file mode 100644 index 6a9c7602c..000000000 --- a/src/application/ProcessReactiveCoordinator.test.ts +++ /dev/null @@ -1,301 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { - ProcessReactiveCoordinator, - type ProcessReactiveTimerHost, -} from "./ProcessReactiveCoordinator.js"; -import { executeProcessReactiveEffects } from "./ProcessReactiveEffects.js"; -import { createProcessCaptureJournal } from "./ProcessCaptureJournal.js"; -import { subscribeProcessReactiveObservations } from "./ProcessReactiveObservations.js"; -import type { - FilesystemCheckpoint, - InteractionEvent, - TerminalFrame, -} from "../domain/processCapture.js"; -import { parseProcessScenario } from "../domain/processScenario.js"; -import { - processReactiveScenarioSchema, - type ProcessReactiveScenario, -} from "../domain/processReactiveScenario.js"; -const terminalTrigger = () => ({ - kind: "terminal_text" as const, - literal: "Ready", - occurrence: 1, - since: { kind: "scenario_start" as const }, - consume: true, -}); -const timerHost = () => { - const scheduled: Array<{ - readonly callback: () => void; - readonly delayMs: number; - cancelled: boolean; - }> = []; - const host: ProcessReactiveTimerHost = { - schedule: (callback, delayMs) => { - const timer = { callback, delayMs, cancelled: false }; - scheduled.push(timer); - return { cancel: () => (timer.cancelled = true) }; - }, - }; - return { host, scheduled }; -}; -const twoStateScenario = (): ProcessReactiveScenario => - processReactiveScenarioSchema.parse({ - initial_state: "starting", - deadline_ms: 30000, - states: [ - { - id: "starting", - max_visits: 1, - deadline_ms: 5000, - on: [ - { - id: "send", - priority: 1, - max_uses: 1, - when: terminalTrigger(), - actions: [{ type: "send_input", data: "go" }], - target: { kind: "goto", state: "sent" }, - }, - ], - }, - { - id: "sent", - max_visits: 1, - deadline_ms: 5000, - on: [ - { - id: "confirm", - priority: 1, - max_uses: 1, - when: { - kind: "event", - source: "interaction", - exact: { type: "input", data: "go", outcome: "dispatched" }, - ignore_fields: [ - "sequence", - "scheduled_at_ms", - "dispatched_at_ms", - ], - since: { kind: "scenario_start" }, - consume: true, - cardinality: { min: 1, max: 1 }, - }, - actions: [], - target: { kind: "finish" }, - }, - ], - }, - ], - }); -const createHarness = (scenario: ProcessReactiveScenario) => { - const journal = createProcessCaptureJournal(); - const frames: TerminalFrame[] = []; - const interactions: InteractionEvent[] = []; - const checkpoints: FilesystemCheckpoint[] = []; - const terminalCalls: string[] = []; - const timers = timerHost(); - let now = 100; - const effectHost = { - scenario: parseProcessScenario({ executable: "node" }), - terminal: () => ({ - write: (data: string) => terminalCalls.push(`write:${data}`), - resize: (columns: number, rows: number) => - terminalCalls.push(`resize:${String(columns)}x${String(rows)}`), - closeInput: () => terminalCalls.push("close-input"), - kill: (signal: "SIGINT" | "SIGTERM" | "SIGKILL") => - terminalCalls.push(`kill:${signal}`), - }), - renderer: { - resize: (columns: number, rows: number) => - terminalCalls.push(`render:${String(columns)}x${String(rows)}`), - }, - checkpoints: { - captureAndRead: async (name: string) => { - const index = checkpoints.length; - const checkpoint: FilesystemCheckpoint = { - name, - at_ms: now - 100, - files: [], - effects: [], - truncated: false, - }; - checkpoints.push(checkpoint); - journal.record("filesystem_checkpoints", index); - return { index, checkpoint }; - }, - }, - interactions, - journal, - startedAtMs: 100, - now: () => now, - // Matches the processScenario default; rendered frames are normalized with - // this so they share a clock with captured frames. - timeBucketMs: 10, - }; - const coordinator = new ProcessReactiveCoordinator({ - scenario, - executor: { - execute: (actions, signal) => - executeProcessReactiveEffects(effectHost, actions, signal), - }, - timerHost: timers.host, - }); - const unsubscribe = subscribeProcessReactiveObservations({ - journal, - frames, - interactions, - checkpointAt: (index) => checkpoints[index], - processSampleAt: () => undefined, - protocolEventAt: () => undefined, - shimEventAt: () => undefined, - sink: coordinator, - }); - return { - coordinator, - frames, - interactions, - checkpoints, - journal, - terminalCalls, - timers: timers.scheduled, - setNow: (value: number) => (now = value), - unsubscribe, - }; -}; -describe("process reactive coordinator ordering", () => { - it("commits terminal effects before evaluating their journal observations", async () => { - const harness = createHarness(twoStateScenario()); - harness.frames.push({ sequence: 0, at_ms: 0, data: "Ready" }); - harness.journal.record("frames", 0); - await harness.coordinator.drain(); - expect(harness.coordinator.snapshot).toMatchObject({ - status: "finished", - outcome: "passed", - active_state: "sent", - }); - expect( - harness.coordinator.snapshot.transitions.map( - ({ transition_id }) => transition_id, - ), - ).toEqual(["send", "confirm"]); - expect(harness.terminalCalls).toEqual(["write:go"]); - expect(harness.journal.entries).toEqual([ - { collection: "frames", index: 0, capture_order: 0 }, - { collection: "interaction_events", index: 0, capture_order: 1 }, - ]); - expect(harness.interactions[0]).toMatchObject({ - type: "input", - data: "go", - outcome: "dispatched", - }); - harness.unsubscribe(); - await harness.coordinator.close(); - }); - it("executes input, resize, root signal, and checkpoint in journal order", async () => { - const scenario = processReactiveScenarioSchema.parse({ - initial_state: "ready", - deadline_ms: 30000, - states: [ - { - id: "ready", - max_visits: 1, - deadline_ms: 5000, - on: [ - { - id: "act", - priority: 1, - max_uses: 1, - when: terminalTrigger(), - actions: [ - { type: "send_input", data: "secret", sensitive: true }, - { type: "resize", columns: 100, rows: 40 }, - { type: "close_stdin" }, - { - type: "send_signal", - target: { kind: "root" }, - signal: "SIGINT", - }, - { type: "checkpoint", name: "stopped" }, - ], - target: { kind: "finish" }, - }, - ], - }, - ], - }); - const harness = createHarness(scenario); - harness.setNow(125); - harness.frames.push({ sequence: 0, at_ms: 20, data: "Ready" }); - harness.journal.record("frames", 0); - await harness.coordinator.drain(); - expect(harness.terminalCalls).toEqual([ - "write:secret", - "resize:100x40", - "render:100x40", - "close-input", - "kill:SIGINT", - ]); - expect(harness.interactions.map(({ data }) => data)).toEqual([ - "", - "100x40", - "", - "SIGINT", - ]); - expect(harness.checkpoints).toHaveLength(1); - expect( - harness.coordinator.snapshot.transitions[0]?.action_event_ids, - ).toEqual([ - "obs.interaction_events.0", - "obs.interaction_events.1", - "obs.interaction_events.2", - "obs.interaction_events.3", - "obs.filesystem_checkpoints.0", - ]); - await harness.coordinator.close(); - }); - it("ignores a stale state timer after a transition", async () => { - const base = twoStateScenario(); - const first = base.states[0]; - const second = base.states[1]; - if (first === undefined || second === undefined) - throw new Error("two-state fixture is incomplete"); - const scenario = processReactiveScenarioSchema.parse({ - ...base, - states: [ - { - ...first, - on: first.on.map((transition) => ({ - ...transition, - actions: [], - })), - }, - { - ...second, - on: second.on.map((transition) => ({ - ...transition, - when: { ...terminalTrigger(), literal: "Later" }, - })), - }, - ], - }); - const harness = createHarness(scenario); - const oldStateTimer = harness.timers[1]; - expect(oldStateTimer?.delayMs).toBe(5000); - harness.frames.push({ sequence: 0, at_ms: 0, data: "Ready" }); - harness.journal.record("frames", 0); - await harness.coordinator.drain(); - expect(oldStateTimer?.cancelled).toBe(true); - oldStateTimer?.callback(); - await harness.coordinator.drain(); - expect(harness.coordinator.snapshot).toMatchObject({ - status: "running", - active_state: "sent", - outcome: null, - }); - const currentStateTimer = harness.timers[2]; - currentStateTimer?.callback(); - await harness.coordinator.drain(); - expect(harness.coordinator.snapshot.outcome).toBe("predicate_timeout"); - await harness.coordinator.close(); - }); -}); diff --git a/src/application/ProcessReactiveCoordinator.ts b/src/application/ProcessReactiveCoordinator.ts deleted file mode 100644 index d767d9ef3..000000000 --- a/src/application/ProcessReactiveCoordinator.ts +++ /dev/null @@ -1,300 +0,0 @@ -import { - commitProcessReactiveProposal, - createProcessReactiveSnapshot, - reduceProcessReactiveScenario, - type ProcessReactiveDecision, - type ProcessReactiveEffectResult, - type ProcessReactiveInput, - type ProcessReactiveSnapshot, -} from "../domain/processReactiveRuntime.js"; -import type { - ProcessReactiveAction, - ProcessReactiveScenario, -} from "../domain/processReactiveScenario.js"; -import { scheduleProcessDelay } from "./ProcessTimer.js"; - -/** Effect boundary owned by the serialized reactive coordinator. */ -export interface ProcessReactiveExecutor { - execute( - actions: readonly ProcessReactiveAction[], - signal: AbortSignal, - ): Promise; -} - -/** Cancel handle for one coordinator-owned deadline. */ -export type ProcessReactiveTimer = ReturnType; - -/** Injectable deadline scheduler used by deterministic coordinator tests. */ -export interface ProcessReactiveTimerHost { - readonly schedule: ( - callback: () => void, - delayMs: number, - ) => ProcessReactiveTimer; -} - -const systemTimerHost: ProcessReactiveTimerHost = { - schedule: (callback, delayMs) => scheduleProcessDelay(delayMs, callback), -}; - -/** - * Serializes live observations, deadlines, and effect commits for one run. - * Producer callbacks enqueue work without awaiting it, preventing reentrancy. - */ -export class ProcessReactiveCoordinator { - readonly #scenario: ProcessReactiveScenario; - readonly #executor: ProcessReactiveExecutor; - readonly #timerHost: ProcessReactiveTimerHost; - readonly #now: () => number; - readonly #scenarioDeadlineAt: number; - readonly #onDecision: - | ((decision: ProcessReactiveDecision, input: ProcessReactiveInput) => void) - | undefined; - #snapshot: ProcessReactiveSnapshot; - readonly #pendingInputs: ProcessReactiveInput[] = []; - #tail: Promise = Promise.resolve(); - #running = false; - #failure: unknown; - #stateTimer: ProcessReactiveTimer | undefined; - #scenarioTimer: ProcessReactiveTimer | undefined; - #stateDeadlineAt = 0; - #effectAbort: AbortController | undefined; - #accepting = true; - #closed = false; - - constructor(options: { - readonly scenario: ProcessReactiveScenario; - readonly executor: ProcessReactiveExecutor; - readonly timerHost?: ProcessReactiveTimerHost; - readonly now?: () => number; - readonly onDecision?: ( - decision: ProcessReactiveDecision, - input: ProcessReactiveInput, - ) => void; - }) { - this.#scenario = options.scenario; - this.#executor = options.executor; - this.#timerHost = options.timerHost ?? systemTimerHost; - this.#now = options.now ?? Date.now; - this.#scenarioDeadlineAt = this.#now() + options.scenario.deadline_ms; - this.#onDecision = options.onDecision; - this.#snapshot = createProcessReactiveSnapshot(options.scenario); - this.#scheduleScenarioDeadline(); - this.#scheduleStateDeadline(); - } - - /** Current immutable reducer snapshot after all completed turns. */ - get snapshot(): ProcessReactiveSnapshot { - return this.#snapshot; - } - - /** Enqueue producer work without creating a floating promise. */ - enqueue(input: ProcessReactiveInput): void { - if (!this.#accepting) return; - if (this.#interruptsEffects(input)) this.#effectAbort?.abort(); - this.#enqueueOwned(input); - } - - /** Submit one input and wait until every turn queued before it completes. */ - async submit(input: ProcessReactiveInput): Promise { - this.enqueue(input); - await this.drain(); - return this.#snapshot; - } - - /** Wait for currently queued reducer/effect work and surface host failures. */ - async drain(): Promise { - for (;;) { - const observedTail = this.#tail; - await observedTail; - if (observedTail === this.#tail) break; - } - if (this.#failure !== undefined) throw this.#failure; - } - - /** Stop owned deadlines after queued work settles. */ - async close(): Promise { - this.#accepting = false; - this.#clearTimers(); - await this.drain(); - this.#closed = true; - } - - #enqueueOwned(input: ProcessReactiveInput): void { - if (this.#closed || this.#failure !== undefined) return; - this.#pendingInputs.push(input); - this.#startWorker(); - } - - #startWorker(): void { - if (this.#running || this.#pendingInputs.length === 0) return; - this.#running = true; - this.#tail = this.#runQueue() - .catch((cause: unknown) => this.#fail(cause)) - .finally(() => { - this.#running = false; - if (this.#pendingInputs.length > 0) this.#startWorker(); - }); - } - - async #runQueue(): Promise { - for (;;) { - const input = this.#nextInput(); - if (input === undefined) return; - await this.#advance(input); - } - } - - #nextInput(): ProcessReactiveInput | undefined { - const terminalIndex = this.#pendingInputs.findIndex( - ({ kind }) => kind === "cancelled" || kind === "cleanup_failed", - ); - if (terminalIndex >= 0) - return this.#pendingInputs.splice(terminalIndex, 1)[0]; - let observationIndex = -1; - let captureOrder = Number.POSITIVE_INFINITY; - for (const [index, input] of this.#pendingInputs.entries()) - if ( - input.kind === "observation" && - input.observation.capture_order < captureOrder - ) { - observationIndex = index; - captureOrder = input.observation.capture_order; - } - return observationIndex >= 0 - ? this.#pendingInputs.splice(observationIndex, 1)[0] - : this.#pendingInputs.shift(); - } - - #fail(cause: unknown): void { - this.#failure ??= cause; - this.#accepting = false; - this.#closed = true; - this.#effectAbort?.abort(); - this.#pendingInputs.length = 0; - this.#clearTimers(); - } - - async #advance(input: ProcessReactiveInput): Promise { - const before = this.#snapshot; - let decision = reduceProcessReactiveScenario(this.#scenario, before, input); - let effectResults: readonly ProcessReactiveEffectResult[] = []; - if (decision.kind === "proposal") { - const effectAbort = new AbortController(); - this.#effectAbort = effectAbort; - try { - effectResults = await this.#executor.execute( - decision.effects, - effectAbort.signal, - ); - } catch (cause: unknown) { - if (effectAbort.signal.aborted) return; - throw cause; - } finally { - if (this.#effectAbort === effectAbort) this.#effectAbort = undefined; - } - if (effectAbort.signal.aborted) return; - const expired = this.#expiredDeadlineInput(); - if (expired !== undefined) { - this.#enqueueOwned(expired); - return; - } - decision = commitProcessReactiveProposal( - this.#scenario, - decision, - effectResults, - ); - } - this.#snapshot = decision.snapshot; - this.#onDecision?.(decision, input); - if (this.#snapshot.status === "finished") this.#clearTimers(); - else if ( - this.#accepting && - (before.active_state !== this.#snapshot.active_state || - before.state_entry_capture_order !== - this.#snapshot.state_entry_capture_order) - ) - this.#scheduleStateDeadline(); - for (const result of effectResults) - if ( - result.status === "succeeded" && - !this.#hasObservation(result.observation.event_id) - ) - this.#enqueueOwned({ - kind: "observation", - observation: result.observation, - }); - } - - #hasObservation(eventId: string): boolean { - return ( - this.#snapshot.observations.some( - (observation) => observation.event_id === eventId, - ) || - this.#pendingInputs.some( - (input) => - input.kind === "observation" && - input.observation.event_id === eventId, - ) - ); - } - - #interruptsEffects(input: ProcessReactiveInput): boolean { - if ( - input.kind === "cancelled" || - input.kind === "cleanup_failed" || - input.kind === "scenario_deadline" || - input.kind === "target_lost" - ) - return true; - return ( - input.kind === "state_deadline" && - input.state_id === this.#snapshot.active_state && - input.state_entry_capture_order === - this.#snapshot.state_entry_capture_order - ); - } - - #expiredDeadlineInput(): ProcessReactiveInput | undefined { - const now = this.#now(); - if (now >= this.#scenarioDeadlineAt) return { kind: "scenario_deadline" }; - if (now < this.#stateDeadlineAt) return undefined; - return { - kind: "state_deadline", - state_id: this.#snapshot.active_state, - state_entry_capture_order: this.#snapshot.state_entry_capture_order, - }; - } - - #scheduleScenarioDeadline(): void { - if (!this.#accepting) return; - this.#scenarioTimer = this.#timerHost.schedule( - () => this.enqueue({ kind: "scenario_deadline" }), - this.#scenario.deadline_ms, - ); - } - - #scheduleStateDeadline(): void { - if (!this.#accepting) return; - this.#stateTimer?.cancel(); - const state = this.#scenario.states.find( - ({ id }) => id === this.#snapshot.active_state, - ); - if (state === undefined) return; - this.#stateDeadlineAt = this.#now() + state.deadline_ms; - const identity = { - state_id: state.id, - state_entry_capture_order: this.#snapshot.state_entry_capture_order, - }; - this.#stateTimer = this.#timerHost.schedule( - () => this.enqueue({ kind: "state_deadline", ...identity }), - state.deadline_ms, - ); - } - - #clearTimers(): void { - this.#stateTimer?.cancel(); - this.#scenarioTimer?.cancel(); - this.#stateTimer = undefined; - this.#scenarioTimer = undefined; - } -} diff --git a/src/application/ProcessReactiveCoordinatorFailures.fixture.ts b/src/application/ProcessReactiveCoordinatorFailures.fixture.ts deleted file mode 100644 index 22d8a828f..000000000 --- a/src/application/ProcessReactiveCoordinatorFailures.fixture.ts +++ /dev/null @@ -1,77 +0,0 @@ -import type { ProcessReactiveTimerHost } from "./ProcessReactiveCoordinator.js"; -import { - processReactiveScenarioSchema, - type ProcessReactiveScenario, -} from "../domain/processReactiveScenario.js"; - -export const terminalTrigger = () => ({ - kind: "terminal_text" as const, - literal: "Ready", - occurrence: 1, - since: { kind: "scenario_start" as const }, - consume: true, -}); -export const timerHost = () => { - const scheduled: Array<{ - readonly callback: () => void; - readonly delayMs: number; - cancelled: boolean; - }> = []; - const host: ProcessReactiveTimerHost = { - schedule: (callback, delayMs) => { - const timer = { callback, delayMs, cancelled: false }; - scheduled.push(timer); - return { cancel: () => (timer.cancelled = true) }; - }, - }; - return { host, scheduled }; -}; -export const twoStateScenario = (): ProcessReactiveScenario => - processReactiveScenarioSchema.parse({ - initial_state: "starting", - deadline_ms: 30000, - states: [ - { - id: "starting", - max_visits: 1, - deadline_ms: 5000, - on: [ - { - id: "send", - priority: 1, - max_uses: 1, - when: terminalTrigger(), - actions: [{ type: "send_input", data: "go" }], - target: { kind: "goto", state: "sent" }, - }, - ], - }, - { - id: "sent", - max_visits: 1, - deadline_ms: 5000, - on: [ - { - id: "confirm", - priority: 1, - max_uses: 1, - when: { - kind: "event", - source: "interaction", - exact: { type: "input", data: "go", outcome: "dispatched" }, - ignore_fields: [ - "sequence", - "scheduled_at_ms", - "dispatched_at_ms", - ], - since: { kind: "scenario_start" }, - consume: true, - cardinality: { min: 1, max: 1 }, - }, - actions: [], - target: { kind: "finish" }, - }, - ], - }, - ], - }); diff --git a/src/application/ProcessReactiveCoordinatorFailures.test.ts b/src/application/ProcessReactiveCoordinatorFailures.test.ts deleted file mode 100644 index 578fbd7cf..000000000 --- a/src/application/ProcessReactiveCoordinatorFailures.test.ts +++ /dev/null @@ -1,198 +0,0 @@ -import { describe, expect, it } from "vitest"; -import { ProcessReactiveCoordinator } from "./ProcessReactiveCoordinator.js"; -import { unsupportedProcessReactiveFeatures } from "./ProcessReactiveEffects.js"; -import { createProcessObservation } from "../domain/processObservation.js"; -import type { ProcessReactiveEffectResult } from "../domain/processReactiveRuntime.js"; -import { processReactiveScenarioSchema } from "../domain/processReactiveScenario.js"; -import { - timerHost, - twoStateScenario, -} from "./ProcessReactiveCoordinatorFailures.fixture.js"; - -describe("process reactive coordinator failures: host preflight and ordering", () => { - it("preflights signal selectors the host cannot execute", () => { - const input = twoStateScenario(); - const first = input.states[0]; - const second = input.states[1]; - const transition = first?.on[0]; - if (first === undefined || second === undefined || transition === undefined) - throw new Error("two-state fixture is incomplete"); - const scenario = processReactiveScenarioSchema.parse({ - ...input, - states: [ - { - ...first, - on: [ - { - ...transition, - actions: [ - { - type: "send_signal", - target: { kind: "process_group" }, - signal: "SIGTERM", - }, - ], - }, - ], - }, - second, - ], - }); - expect(unsupportedProcessReactiveFeatures(scenario)).toEqual([ - "send:target:process_group", - ]); - }); - it("orders delayed effect observations before later producer records", async () => { - const timers = timerHost(); - let executions = 0; - let resolveEffects: - | ((results: readonly ProcessReactiveEffectResult[]) => void) - | undefined; - const effects = new Promise( - (resolve) => (resolveEffects = resolve), - ); - const coordinator = new ProcessReactiveCoordinator({ - scenario: twoStateScenario(), - executor: { - execute: () => { - executions += 1; - return executions === 1 ? effects : Promise.resolve([]); - }, - }, - timerHost: timers.host, - }); - coordinator.enqueue({ - kind: "observation", - observation: createProcessObservation({ - source: "terminal_raw", - source_sequence: 0, - captured_at_ms: 0, - subject_id: null, - location: { collection: "frames", index: 0, capture_order: 0 }, - payload: { sequence: 0, at_ms: 0, data: "Ready" }, - }), - }); - await Promise.resolve(); - coordinator.enqueue({ - kind: "observation", - observation: createProcessObservation({ - source: "terminal_raw", - source_sequence: 1, - captured_at_ms: 2, - subject_id: null, - location: { collection: "frames", index: 1, capture_order: 2 }, - payload: { sequence: 1, at_ms: 2, data: "later" }, - }), - }); - if (resolveEffects === undefined) - throw new Error("effect executor did not start"); - resolveEffects([ - { - status: "succeeded", - observation: createProcessObservation({ - source: "interaction", - source_sequence: 0, - captured_at_ms: 1, - subject_id: null, - location: { - collection: "interaction_events", - index: 0, - capture_order: 1, - }, - payload: { - sequence: 0, - scheduled_at_ms: 1, - dispatched_at_ms: 1, - type: "input", - data: "go", - outcome: "dispatched", - }, - }), - }, - ]); - await coordinator.drain(); - expect(coordinator.snapshot).toMatchObject({ - status: "finished", - outcome: "passed", - }); - expect( - coordinator.snapshot.transitions.map( - ({ transition_id }) => transition_id, - ), - ).toEqual(["send", "confirm"]); - await coordinator.close(); - }); - it("cancels timers and rejects later work after an executor failure", async () => { - const timers = timerHost(); - let calls = 0; - const coordinator = new ProcessReactiveCoordinator({ - scenario: twoStateScenario(), - executor: { - execute: () => { - calls += 1; - throw new Error("executor failed"); - }, - }, - timerHost: timers.host, - }); - const ready = createProcessObservation({ - source: "terminal_raw", - source_sequence: 0, - captured_at_ms: 0, - subject_id: null, - location: { collection: "frames", index: 0, capture_order: 0 }, - payload: { sequence: 0, at_ms: 0, data: "Ready" }, - }); - coordinator.enqueue({ kind: "observation", observation: ready }); - await expect(coordinator.drain()).rejects.toThrow("executor failed"); - coordinator.enqueue({ kind: "observation", observation: ready }); - expect(calls).toBe(1); - expect(timers.scheduled.every(({ cancelled }) => cancelled)).toBe(true); - }); -}); - -describe("process reactive coordinator failures: effect deadlines", () => { - it("aborts an in-flight effect before committing a state deadline", async () => { - const timers = timerHost(); - let effectAborted = false; - const coordinator = new ProcessReactiveCoordinator({ - scenario: twoStateScenario(), - executor: { - execute: (_actions, signal) => - new Promise((resolve) => { - signal.addEventListener( - "abort", - () => { - effectAborted = true; - resolve([]); - }, - { once: true }, - ); - }), - }, - timerHost: timers.host, - }); - coordinator.enqueue({ - kind: "observation", - observation: createProcessObservation({ - source: "terminal_raw", - source_sequence: 0, - captured_at_ms: 0, - subject_id: null, - location: { collection: "frames", index: 0, capture_order: 0 }, - payload: { sequence: 0, at_ms: 0, data: "Ready" }, - }), - }); - await Promise.resolve(); - timers.scheduled[1]?.callback(); - await coordinator.drain(); - expect(effectAborted).toBe(true); - expect(coordinator.snapshot).toMatchObject({ - status: "finished", - outcome: "predicate_timeout", - active_state: "starting", - transitions: [], - }); - await coordinator.close(); - }); -}); diff --git a/src/application/ProcessReactiveEffects.ts b/src/application/ProcessReactiveEffects.ts deleted file mode 100644 index 8f6360629..000000000 --- a/src/application/ProcessReactiveEffects.ts +++ /dev/null @@ -1,254 +0,0 @@ -import type { - FilesystemCheckpoint, - InteractionEvent, -} from "../domain/processCapture.js"; -import { createProcessObservation } from "../domain/processObservation.js"; -import type { ProcessReactiveEffectResult } from "../domain/processReactiveRuntime.js"; -import type { - ProcessReactiveAction, - ProcessReactiveScenario, -} from "../domain/processReactiveScenario.js"; -import type { ProcessScenario } from "../domain/processScenario.js"; -import type { ProcessCaptureJournal } from "./ProcessCaptureJournal.js"; -import { - normalizeProcessElapsedTime, - normalizeProcessText, -} from "./ProcessNormalization.js"; - -/** Minimal PTY authority used by the admitted reactive action slice. */ -export interface ProcessReactiveTerminal { - write(data: string): void; - resize(columns: number, rows: number): void; - closeInput(): void; - kill(signal: "SIGINT" | "SIGTERM" | "SIGKILL"): void; -} - -/** Rendered-terminal resize seam kept in lockstep with the PTY. */ -export interface ProcessReactiveRenderer { - resize(columns: number, rows: number, atMs: number): void; -} - -/** Awaited filesystem checkpoint seam used by reactive effects. */ -export interface ProcessReactiveCheckpoints { - captureAndRead( - name: string, - signal?: AbortSignal, - ): Promise<{ - readonly index: number; - readonly checkpoint: FilesystemCheckpoint; - }>; -} - -/** Host dependencies for journal-backed reactive process actions. */ -export interface ProcessReactiveEffectHost { - readonly scenario: ProcessScenario; - readonly terminal: () => ProcessReactiveTerminal | undefined; - readonly renderer: ProcessReactiveRenderer; - readonly checkpoints: ProcessReactiveCheckpoints; - readonly interactions: InteractionEvent[]; - readonly journal: ProcessCaptureJournal; - readonly startedAtMs: number; - readonly now: () => number; - /** Time bucket the scenario normalizes rendered-frame timestamps with. */ - readonly timeBucketMs: number; -} - -const elapsed = (host: ProcessReactiveEffectHost): number => - Math.max(0, host.now() - host.startedAtMs); - -const interactionData = ( - action: Exclude, - scenario: ProcessScenario, -): string => { - if (action.type === "send_input") - return action.sensitive - ? `` - : normalizeProcessText(action.data, scenario, "", -1); - if (action.type === "resize") - return `${String(action.columns)}x${String(action.rows)}`; - if (action.type === "close_stdin") return ""; - return action.signal; -}; - -const interactionType = ( - action: Exclude, -): InteractionEvent["type"] => { - if (action.type === "send_input") return "input"; - if (action.type === "resize") return "resize"; - if (action.type === "close_stdin") return "stdin_close"; - return "signal"; -}; - -const performTerminalAction = ( - host: Pick, - terminal: ProcessReactiveTerminal, - action: Exclude, - atMs: number, -): void => { - if (action.type === "send_input") terminal.write(action.data); - else if (action.type === "resize") { - terminal.resize(action.columns, action.rows); - // Rendered frames share the normalized clock used by captured terminal - // frames and by the scheduled-event resize path. Passing the raw elapsed - // time here stamped this frame on a different clock, so the next bucketed - // frame could appear to move backwards and fail capture validation with - // "rendered_frames: timestamps must be ordered". - host.renderer.resize( - action.columns, - action.rows, - normalizeProcessElapsedTime(atMs, host.timeBucketMs), - ); - } else if (action.type === "close_stdin") terminal.closeInput(); - else terminal.kill(action.signal); -}; - -const recordInteraction = ( - host: ProcessReactiveEffectHost, - action: Exclude, - atMs: number, - outcome: InteractionEvent["outcome"], -): ProcessReactiveEffectResult => { - const index = host.interactions.length; - const event: InteractionEvent = { - sequence: index, - scheduled_at_ms: atMs, - dispatched_at_ms: atMs, - type: interactionType(action), - data: interactionData(action, host.scenario), - outcome, - }; - host.interactions.push(event); - const location = host.journal.record("interaction_events", index); - if (outcome !== "dispatched") return { status: "rejected" }; - return { - status: "succeeded", - observation: createProcessObservation({ - source: "interaction", - source_sequence: index, - captured_at_ms: atMs, - subject_id: null, - location, - payload: event, - }), - }; -}; - -const executeTerminalAction = ( - host: ProcessReactiveEffectHost, - action: Exclude, -): ProcessReactiveEffectResult => { - if (action.type === "send_signal" && action.target.kind !== "root") - return { status: "rejected" }; - const terminal = host.terminal(); - if (terminal === undefined) return { status: "target_lost" }; - const atMs = elapsed(host); - let outcome: InteractionEvent["outcome"] = "dispatched"; - try { - performTerminalAction(host, terminal, action, atMs); - } catch { - outcome = "failed"; - } - return recordInteraction(host, action, atMs, outcome); -}; - -const executeCheckpoint = async ( - host: ProcessReactiveEffectHost, - action: Extract, - signal: AbortSignal, -): Promise => { - try { - const { index, checkpoint } = await host.checkpoints.captureAndRead( - action.name, - signal, - ); - const location = host.journal.entries.findLast( - (entry) => - entry.collection === "filesystem_checkpoints" && entry.index === index, - ); - if (location === undefined) return { status: "rejected" }; - return { - status: "succeeded", - observation: createProcessObservation({ - source: "filesystem", - source_sequence: index, - captured_at_ms: checkpoint.at_ms, - subject_id: `checkpoint:${checkpoint.name}`, - location, - payload: checkpoint, - }), - }; - } catch { - return { status: "rejected" }; - } -}; - -/** Execute proposed effects in order and stop after the first failure. */ -export const executeProcessReactiveEffects = async ( - host: ProcessReactiveEffectHost, - actions: readonly ProcessReactiveAction[], - signal: AbortSignal, -): Promise => { - const results: ProcessReactiveEffectResult[] = []; - for (const action of actions) { - if (signal.aborted) return results; - const result = - action.type === "checkpoint" - ? await executeCheckpoint(host, action, signal) - : executeTerminalAction(host, action); - results.push(result); - if (result.status !== "succeeded") break; - } - return results; -}; - -const triggerSources = ( - trigger: ProcessReactiveScenario["states"][number]["on"][number]["when"], -): readonly string[] => { - if (trigger.kind === "terminal_text") return []; - if (trigger.kind === "event") - return [ - "terminal_raw", - "interaction", - "process", - "filesystem", - "http", - "websocket", - "shim", - ].includes(trigger.source) - ? [] - : [trigger.source]; - return trigger.kind === "repeat" - ? triggerSources(trigger.trigger) - : trigger.triggers.flatMap(triggerSources); -}; - -/** Return unsupported sources, selectors, and checkpoint collisions pre-launch. */ -export const unsupportedProcessReactiveFeatures = ( - scenario: ProcessReactiveScenario, - reservedCheckpointNames: ReadonlySet = new Set([ - "before", - "after_settlement", - ]), -): readonly string[] => [ - ...scenario.states.flatMap((state) => - state.on.flatMap((transition) => - triggerSources(transition.when).map( - (source) => `${transition.id}:source:${source}`, - ), - ), - ), - ...scenario.states.flatMap((state) => - state.on.flatMap((transition) => - transition.actions.flatMap((action) => { - if (action.type === "send_signal" && action.target.kind !== "root") - return [`${transition.id}:target:${action.target.kind}`]; - if ( - action.type === "checkpoint" && - reservedCheckpointNames.has(action.name) - ) - return [`${transition.id}:checkpoint:${action.name}`]; - return []; - }), - ), - ), -]; diff --git a/src/application/ProcessReactiveHarness.ts b/src/application/ProcessReactiveHarness.ts deleted file mode 100644 index 6271a27d4..000000000 --- a/src/application/ProcessReactiveHarness.ts +++ /dev/null @@ -1,185 +0,0 @@ -import type { IPty } from "@lydell/node-pty"; - -import type { - InteractionEvent, - ProcessCapture, - ProcessReactiveControlRecord, - ProcessSample, - ProcessScenario, - ProtocolEvent, - TerminalFrame, -} from "../domain/processCapture.js"; -import type { ProcessReactiveInput } from "../domain/processReactiveRuntime.js"; -import { ProcessCaptureError } from "./ProcessCaptureError.js"; -import type { ProcessCaptureJournal } from "./ProcessCaptureJournal.js"; -import type { ProcessCheckpoints } from "./ProcessCheckpoints.js"; -import type { CommandShimReplay } from "./CommandShimReplay.js"; -import { ProcessReactiveCoordinator } from "./ProcessReactiveCoordinator.js"; -import { - executeProcessReactiveEffects, - type ProcessReactiveTerminal, - unsupportedProcessReactiveFeatures, -} from "./ProcessReactiveEffects.js"; -import { subscribeProcessReactiveObservations } from "./ProcessReactiveObservations.js"; -import { - normalizeProcessSamples, - normalizeProcessShimEvent, - normalizeProtocolEvents, -} from "./ProcessNormalization.js"; -import type { TerminalRenderer } from "./TerminalRenderer.js"; - -/** Coordinator and subscription owned by one live process capture. */ -export interface ProcessReactiveHarness { - readonly coordinator: ProcessReactiveCoordinator; - readonly controls: readonly ProcessReactiveControlRecord[]; - readonly unsubscribe: () => void; -} - -const reactiveTerminalFor = ( - terminal: IPty | undefined, -): ProcessReactiveTerminal | undefined => { - if (terminal === undefined) return undefined; - return { - write: (data) => terminal.write(data), - resize: (columns, rows) => terminal.resize(columns, rows), - closeInput: () => { - const end: unknown = Reflect.get(terminal, "end"); - if (typeof end !== "function") - throw new ProcessCaptureError( - "PTY backend does not expose an stdin-close operation", - ); - Reflect.apply(end, terminal, []); - }, - kill: (signal) => terminal.kill(signal), - }; -}; - -const controlKind = ( - input: ProcessReactiveInput, -): ProcessReactiveControlRecord["kind"] | undefined => - input.kind === "observation" ? undefined : input.kind; - -/** Reject reactive declarations the current process adapter cannot execute. */ -export const assertSupportedReactiveScenario = ( - scenario: ProcessScenario, -): void => { - if (scenario.reactive === null) return; - const unsupported = unsupportedProcessReactiveFeatures(scenario.reactive); - if (unsupported.length === 0) return; - throw new ProcessCaptureError( - `reactive scenario requests unsupported features: ${unsupported.join(", ")}`, - ); -}; - -/** - * Attach the serialized reactive runtime once the target PID is available. - * - * Subscription replays journal entries admitted during launcher startup before - * observing new records, so PID-dependent normalization cannot drop them. - */ -export const startProcessReactiveHarness = (options: { - readonly scenario: ProcessScenario; - readonly terminal: () => IPty | undefined; - readonly renderer: TerminalRenderer; - readonly checkpoints: ProcessCheckpoints; - readonly shimReplay: CommandShimReplay; - readonly started: number; - readonly capture: { - readonly interactions: InteractionEvent[]; - readonly journal: ProcessCaptureJournal; - readonly frames: readonly TerminalFrame[]; - readonly processSamples: readonly ProcessSample[]; - readonly protocolEvents: () => readonly ProtocolEvent[]; - readonly temporaryRoot: string; - }; -}): ProcessReactiveHarness | undefined => { - if (options.scenario.reactive === null) return undefined; - const controls: ProcessReactiveControlRecord[] = []; - const coordinator = new ProcessReactiveCoordinator({ - scenario: options.scenario.reactive, - executor: { - execute: (actions, signal) => - executeProcessReactiveEffects( - { - scenario: options.scenario, - terminal: () => reactiveTerminalFor(options.terminal()), - renderer: options.renderer, - checkpoints: options.checkpoints, - interactions: options.capture.interactions, - journal: options.capture.journal, - startedAtMs: options.started, - now: Date.now, - timeBucketMs: options.scenario.normalization.time_bucket_ms, - }, - actions, - signal, - ), - }, - onDecision: (decision, input) => { - const kind = controlKind(input); - if (kind === undefined || decision.kind !== "finished") return; - controls.push({ - sequence: controls.length, - kind, - after_capture_order: - decision.snapshot.observations.at(-1)?.capture_order ?? -1, - }); - }, - }); - return { - coordinator, - controls, - unsubscribe: subscribeProcessReactiveObservations({ - journal: options.capture.journal, - frames: options.capture.frames, - interactions: options.capture.interactions, - checkpointAt: (index) => options.checkpoints.at(index), - processSampleAt: (index) => { - const rootPid = options.terminal()?.pid; - return rootPid === undefined - ? undefined - : normalizeProcessSamples( - options.capture.processSamples, - options.scenario, - rootPid, - )[index]; - }, - protocolEventAt: (index) => - normalizeProtocolEvents( - options.capture.protocolEvents().slice(index, index + 1), - options.scenario, - )[0], - shimEventAt: (index) => { - const event = options.shimReplay.events[index]; - const rootPid = options.terminal()?.pid; - return event === undefined || rootPid === undefined - ? undefined - : normalizeProcessShimEvent( - event, - options.scenario, - options.capture.temporaryRoot, - rootPid, - ); - }, - sink: coordinator, - }), - }; -}; - -/** Project internal reducer state into the stable Process Capture shape. */ -export const projectProcessReactiveRun = ( - harness: ProcessReactiveHarness | undefined, -): ProcessCapture["reactive_run"] => { - if (harness === undefined) return null; - const snapshot = harness.coordinator.snapshot; - const completion = - snapshot.status === "running" - ? { status: snapshot.status, outcome: null } - : { status: snapshot.status, outcome: snapshot.outcome }; - return { - ...completion, - active_state: snapshot.active_state, - transitions: snapshot.transitions, - controls: harness.controls, - }; -}; diff --git a/src/application/ProcessReactiveObservations.ts b/src/application/ProcessReactiveObservations.ts deleted file mode 100644 index d2c4520da..000000000 --- a/src/application/ProcessReactiveObservations.ts +++ /dev/null @@ -1,164 +0,0 @@ -import type { - InteractionEvent, - FilesystemCheckpoint, - ProcessCaptureEventJournalEntry, - ProcessSample, - ProtocolEvent, - ShimEvent, - TerminalFrame, -} from "../domain/processCapture.js"; -import { - createProcessObservation, - processObservationSubject, - type ProcessObservation, -} from "../domain/processObservation.js"; -import type { ProcessReactiveInput } from "../domain/processReactiveRuntime.js"; -import type { ProcessCaptureJournal } from "./ProcessCaptureJournal.js"; - -/** Non-blocking input seam implemented by the reactive coordinator. */ -export interface ProcessReactiveObservationSink { - enqueue(input: ProcessReactiveInput): void; -} - -interface ProcessReactiveObservationOptions { - readonly journal: ProcessCaptureJournal; - readonly frames: readonly TerminalFrame[]; - readonly interactions: readonly InteractionEvent[]; - readonly checkpointAt: (index: number) => FilesystemCheckpoint | undefined; - readonly processSampleAt: (index: number) => ProcessSample | undefined; - readonly protocolEventAt: (index: number) => ProtocolEvent | undefined; - readonly shimEventAt: (index: number) => ShimEvent | undefined; - readonly sink: ProcessReactiveObservationSink; -} - -const terminalObservation = ( - options: ProcessReactiveObservationOptions, - entry: ProcessCaptureEventJournalEntry, -): ProcessObservation | undefined => { - const value = options.frames[entry.index]; - return value === undefined - ? undefined - : createProcessObservation({ - source: "terminal_raw", - source_sequence: value.sequence, - captured_at_ms: value.at_ms, - subject_id: null, - location: entry, - payload: value, - }); -}; - -const interactionObservation = ( - options: ProcessReactiveObservationOptions, - entry: ProcessCaptureEventJournalEntry, -): ProcessObservation | undefined => { - const value = options.interactions[entry.index]; - return value === undefined - ? undefined - : createProcessObservation({ - source: "interaction", - source_sequence: value.sequence, - captured_at_ms: value.dispatched_at_ms, - subject_id: null, - location: entry, - payload: value, - }); -}; - -const filesystemObservation = ( - options: ProcessReactiveObservationOptions, - entry: ProcessCaptureEventJournalEntry, -): ProcessObservation | undefined => { - const value = options.checkpointAt(entry.index); - return value === undefined - ? undefined - : createProcessObservation({ - source: "filesystem", - source_sequence: entry.index, - captured_at_ms: value.at_ms, - subject_id: processObservationSubject("filesystem", value), - location: entry, - payload: value, - }); -}; - -const processObservation = ( - options: ProcessReactiveObservationOptions, - entry: ProcessCaptureEventJournalEntry, -): ProcessObservation | undefined => { - const value = options.processSampleAt(entry.index); - return value === undefined - ? undefined - : createProcessObservation({ - source: "process", - source_sequence: entry.index, - captured_at_ms: value.at_ms, - subject_id: processObservationSubject("process", value), - location: entry, - payload: value, - }); -}; - -const protocolObservation = ( - options: ProcessReactiveObservationOptions, - entry: ProcessCaptureEventJournalEntry, -): ProcessObservation | undefined => { - const value = options.protocolEventAt(entry.index); - return value === undefined - ? undefined - : createProcessObservation({ - source: value.protocol, - source_sequence: value.sequence, - captured_at_ms: value.at_ms, - subject_id: processObservationSubject(value.protocol, value), - location: entry, - payload: value, - }); -}; - -const shimObservation = ( - options: ProcessReactiveObservationOptions, - entry: ProcessCaptureEventJournalEntry, -): ProcessObservation | undefined => { - const normalized = options.shimEventAt(entry.index); - if (normalized === undefined) return undefined; - return createProcessObservation({ - source: "shim", - source_sequence: normalized.sequence, - captured_at_ms: normalized.at_ms, - subject_id: processObservationSubject("shim", normalized), - location: entry, - payload: normalized, - }); -}; - -const observationFor = ( - options: ProcessReactiveObservationOptions, - entry: ProcessCaptureEventJournalEntry, -): ProcessObservation | undefined => { - if (entry.collection === "frames") return terminalObservation(options, entry); - if (entry.collection === "interaction_events") - return interactionObservation(options, entry); - if (entry.collection === "filesystem_checkpoints") - return filesystemObservation(options, entry); - if (entry.collection === "process_samples") - return processObservation(options, entry); - if (entry.collection === "protocol_events") - return protocolObservation(options, entry); - if (entry.collection === "shim_events") - return shimObservation(options, entry); - return undefined; -}; - -/** Subscribe the reactive coordinator to admitted normalized journal records. */ -export const subscribeProcessReactiveObservations = ( - options: ProcessReactiveObservationOptions, -): (() => void) => { - const enqueue = (entry: ProcessCaptureEventJournalEntry): void => { - const observation = observationFor(options, entry); - if (observation !== undefined) - options.sink.enqueue({ kind: "observation", observation }); - }; - for (const entry of options.journal.entries) enqueue(entry); - return options.journal.subscribe(enqueue); -}; diff --git a/src/application/ProcessTimer.test.ts b/src/application/ProcessTimer.test.ts index fe6700a6c..3e2224e46 100644 --- a/src/application/ProcessTimer.test.ts +++ b/src/application/ProcessTimer.test.ts @@ -1,6 +1,5 @@ import { describe, expect, it } from "vitest"; -import { ReplayDelayScheduler } from "./LoopbackReplayRecorder.js"; import { scheduleProcessDelay } from "./ProcessTimer.js"; describe("process delay scheduling", () => { @@ -36,15 +35,4 @@ describe("process delay scheduling", () => { scheduled[1]?.callback(); expect(fired).toBe(false); }); - - it("releases owned replay delays when the endpoint closes", async () => { - const scheduler = new ReplayDelayScheduler(); - const waiting = scheduler.wait(Number.MAX_SAFE_INTEGER); - - scheduler.close(); - scheduler.close(); - await waiting; - - await scheduler.wait(Number.MAX_SAFE_INTEGER); - }); }); diff --git a/src/application/RuntimeExecutableDiagnostics.ts b/src/application/RuntimeExecutableDiagnostics.ts deleted file mode 100644 index fcc1fb3b7..000000000 --- a/src/application/RuntimeExecutableDiagnostics.ts +++ /dev/null @@ -1,390 +0,0 @@ -import { spawn, type ChildProcess } from "node:child_process"; -import { constants } from "node:fs"; -import { access, realpath } from "node:fs/promises"; -import { delimiter, join } from "node:path"; - -const TOOL_NAMES = ["node", "npm", "npx"] as const; -const PROBE_CONCURRENCY = 4; - -type RuntimeToolName = (typeof TOOL_NAMES)[number]; -type RuntimeProbeFailureCode = - | "runtime_dynamic_library_missing" - | "runtime_invalid_version_output" - | "runtime_timeout" - | "runtime_signal" - | "runtime_spawn_failed" - | "runtime_nonzero_exit"; - -/** Classification of one failed executable probe with its complete stderr. */ -interface RuntimeProbeFailure { - readonly code: RuntimeProbeFailureCode; - readonly exit_code: number | null; - readonly signal: NodeJS.Signals | null; - readonly dependency: string | null; - readonly stderr: string; -} - -interface RuntimeExecutableIdentity { - readonly tool: RuntimeToolName; - readonly lexical_path: string; - readonly canonical_path: string; - readonly path_index: number | null; - readonly selection: "rea-launcher" | "path-primary" | "path-shadowed"; -} - -/** One lexical PATH candidate and its canonical executable probe result. */ -type RuntimeExecutableDiagnostic = RuntimeExecutableIdentity & - ( - | { - readonly version: string; - readonly healthy: true; - readonly failure: null; - } - | { - readonly version: null; - readonly healthy: false; - readonly failure: RuntimeProbeFailure; - } - ); - -/** Runtime identities observed under one exact effective environment. */ -export interface RuntimeExecutableInventory { - readonly launcher_node: string; - readonly candidates: readonly RuntimeExecutableDiagnostic[]; -} - -/** Host inputs that determine executable discovery and shebang resolution. */ -export interface RuntimeExecutableInventoryOptions { - readonly platform: NodeJS.Platform; - readonly path: string; - readonly launcherNode: string; - readonly pathExtensions?: readonly string[]; - readonly timeoutMs?: number; -} - -/** Inventory and probe Node toolchain candidates under one exact PATH. */ -export const inspectRuntimeExecutables = async ( - options: RuntimeExecutableInventoryOptions, -): Promise => { - const pathEntries = unique(options.path.split(delimiter).filter(Boolean)); - const candidates: Array<{ - readonly tool: RuntimeToolName; - readonly path: string; - readonly pathIndex: number | null; - readonly selection: RuntimeExecutableDiagnostic["selection"]; - }> = [ - { - tool: "node", - path: options.launcherNode, - pathIndex: null, - selection: "rea-launcher", - }, - ]; - for (const tool of TOOL_NAMES) { - const discovered = await discoverToolCandidates( - tool, - pathEntries, - options.platform, - options.pathExtensions, - ); - for (const [index, candidate] of discovered.entries()) - candidates.push({ - tool, - path: candidate.path, - pathIndex: candidate.pathIndex, - selection: index === 0 ? "path-primary" : "path-shadowed", - }); - } - const seen = new Set(); - const uniqueCandidates: typeof candidates = []; - for (const candidate of candidates) { - const key = `${candidate.tool}\0${candidate.path}`; - if (seen.has(key)) continue; - seen.add(key); - uniqueCandidates.push(candidate); - } - const diagnostics = await mapConcurrentBounded( - uniqueCandidates, - PROBE_CONCURRENCY, - (candidate) => - probeCandidate( - candidate, - options.timeoutMs, - options.path, - options.platform, - ), - ); - return { - launcher_node: await canonicalPath(options.launcherNode), - candidates: diagnostics, - }; -}; - -const discoverToolCandidates = async ( - tool: RuntimeToolName, - pathEntries: readonly string[], - platform: NodeJS.Platform, - configuredExtensions: readonly string[] | undefined, -): Promise< - readonly { readonly path: string; readonly pathIndex: number }[] -> => { - const extensions = - platform === "win32" - ? (configuredExtensions ?? [".COM", ".EXE", ".BAT", ".CMD"]) - : [""]; - const candidates: Array<{ - readonly path: string; - readonly pathIndex: number; - }> = []; - for (const [pathIndex, directory] of pathEntries.entries()) { - for (const extension of extensions) { - const path = join(directory, `${tool}${extension}`); - if (await isExecutable(path, platform)) { - candidates.push({ path, pathIndex }); - break; - } - } - } - return candidates; -}; - -const probeCandidate = async ( - candidate: { - readonly tool: RuntimeToolName; - readonly path: string; - readonly pathIndex: number | null; - readonly selection: RuntimeExecutableDiagnostic["selection"]; - }, - timeoutMs: number | undefined, - effectivePath: string, - platform: NodeJS.Platform, -): Promise => { - const canonical = await canonicalPath(candidate.path); - const result = await executeVersion( - candidate.path, - timeoutMs, - effectivePath, - platform, - ); - const identity = { - tool: candidate.tool, - lexical_path: candidate.path, - canonical_path: canonical, - path_index: candidate.pathIndex, - selection: candidate.selection, - }; - return result.ok - ? { ...identity, version: result.version, healthy: true, failure: null } - : { - ...identity, - version: null, - healthy: false, - failure: result.failure, - }; -}; - -type VersionResult = - | { readonly ok: true; readonly version: string } - | { readonly ok: false; readonly failure: RuntimeProbeFailure }; - -const executeVersion = ( - path: string, - timeoutMs: number | undefined, - effectivePath: string, - platform: NodeJS.Platform = process.platform, -): Promise => - new Promise((resolve) => { - // Node >= 18.20 refuses to spawn .cmd/.bat files without a shell - // (CVE-2024-27980 mitigation) and throws spawn EINVAL. On Windows, npm and - // npx PATH shims are .CMD files, so every probe of them failed. Route - // batch-file candidates through cmd.exe instead. - const command = windowsBatchCommand(path, platform); - const child = command - ? spawn(command.executable, command.arguments, { - windowsHide: true, - windowsVerbatimArguments: true, - env: environmentWithPath(effectivePath), - stdio: ["ignore", "pipe", "pipe"], - }) - : spawn(path, ["--version"], { - windowsHide: true, - env: environmentWithPath(effectivePath), - stdio: ["ignore", "pipe", "pipe"], - }); - let stdout = ""; - let stderr = ""; - let spawnError: Error | undefined; - let timeout: NodeJS.Timeout | undefined; - let timedOut = false; - child.stdout?.setEncoding("utf8"); - child.stderr?.setEncoding("utf8"); - child.stdout?.on("data", (chunk: string) => { - stdout += chunk; - }); - child.stderr?.on("data", (chunk: string) => { - stderr += chunk; - }); - child.once("error", (cause: Error) => { - spawnError = cause; - }); - if (timeoutMs !== undefined && timeoutMs > 0) { - timeout = setTimeout(() => { - timedOut = true; - child.kill(); - }, timeoutMs); - timeout.unref(); - } - child.once("close", () => { - if (timeout !== undefined) clearTimeout(timeout); - if (spawnError === undefined && child.exitCode === 0) { - const version = firstNonemptyLine(stdout) ?? firstNonemptyLine(stderr); - if (version !== undefined) { - resolve({ ok: true, version }); - return; - } - resolve({ - ok: false, - failure: failure("runtime_invalid_version_output", child, stderr), - }); - return; - } - const cause = - spawnError ?? - new Error("Runtime version probe did not exit successfully"); - resolve({ - ok: false, - failure: timedOut - ? failure("runtime_timeout", child, stderr) - : classifyProbeFailure(cause, child, stderr), - }); - }); - }); - -/** - * Build the cmd.exe invocation for a Windows batch-file candidate - * (.cmd/.bat/.CMD/.BAT). Returns null for anything else, including on - * non-Windows platforms. The whole command line is passed as one - * /c argument so paths with spaces survive; `windowsVerbatimArguments` - * keeps Node from re-quoting it. Embedded double quotes are doubled, - * since a bare quote would terminate the /c string and allow argument - * injection via a crafted PATH entry. - */ -const windowsBatchCommand = ( - path: string, - platform: NodeJS.Platform = process.platform, - systemRoot: string = process.env.SystemRoot ?? "C:\\Windows", -): { executable: string; arguments: string[] } | null => { - if (platform !== "win32") return null; - if (!/\.(cmd|bat)$/iu.test(path)) return null; - return { - executable: `${systemRoot}\\System32\\cmd.exe`, - arguments: ["/d", "/s", "/c", `"${path.replaceAll('"', '""')}" --version`], - }; -}; - -/** - * Testing-only re-export of the batch-command builder. Pure and - * platform-injected, so it is fully exercisable on non-Windows hosts. - */ -export const windowsBatchCommandForTesting = windowsBatchCommand; - -/** Testing-only re-export of the version probe. */ -export const executeVersionForTesting = executeVersion; - -const classifyProbeFailure = ( - cause: Error, - child: ChildProcess, - stderr: string, -): RuntimeProbeFailure => { - const dependency = missingDynamicLibrary(stderr); - if (dependency !== null) - return failure( - "runtime_dynamic_library_missing", - child, - stderr, - dependency, - ); - if ("killed" in cause && cause.killed === true) - return failure("runtime_timeout", child, stderr); - if (child.signalCode !== null) - return failure("runtime_signal", child, stderr); - if ("code" in cause && typeof cause.code === "string") - return failure("runtime_spawn_failed", child, stderr); - return failure("runtime_nonzero_exit", child, stderr); -}; - -const failure = ( - code: RuntimeProbeFailureCode, - child: ChildProcess, - stderr: string, - dependency: string | null = null, -): RuntimeProbeFailure => ({ - code, - exit_code: child.exitCode, - signal: child.signalCode, - dependency, - stderr: stderr.trim(), -}); - -const missingDynamicLibrary = (stderr: string): string | null => - /(?:dyld(?:\[[^\]]+\])?: )?Library not loaded:\s*([^\r\n]+)/u - .exec(stderr)?.[1] - ?.trim() ?? null; - -const isExecutable = async ( - path: string, - platform: NodeJS.Platform, -): Promise => { - try { - await access(path, platform === "win32" ? constants.F_OK : constants.X_OK); - return true; - } catch { - return false; - } -}; - -const canonicalPath = async (path: string): Promise => { - try { - return await realpath(path); - } catch { - return path; - } -}; - -const firstNonemptyLine = (value: string): string | undefined => - value - .split(/\r?\n/u) - .find((line) => line.trim().length > 0) - ?.trim(); - -const unique = (values: readonly string[]): string[] => [...new Set(values)]; - -const environmentWithPath = (path: string): NodeJS.ProcessEnv => { - const environment: NodeJS.ProcessEnv = {}; - for (const [name, value] of Object.entries(process.env)) - if (name.toUpperCase() !== "PATH") environment[name] = value; - environment.PATH = path; - return environment; -}; - -const mapConcurrentBounded = async ( - inputs: readonly Input[], - concurrency: number, - operation: (input: Input) => Promise, -): Promise => { - const outputs: Output[] = []; - let nextIndex = 0; - const workers = Array.from( - { length: Math.min(concurrency, inputs.length) }, - async () => { - while (nextIndex < inputs.length) { - const index = nextIndex; - nextIndex += 1; - const input = inputs[index]; - if (input !== undefined) outputs[index] = await operation(input); - } - }, - ); - await Promise.all(workers); - return outputs; -}; diff --git a/src/application/RuntimeExecutableDiagnostics.win32.test.ts b/src/application/RuntimeExecutableDiagnostics.win32.test.ts deleted file mode 100644 index c9aa52773..000000000 --- a/src/application/RuntimeExecutableDiagnostics.win32.test.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { mkdtemp, rm, writeFile } from "node:fs/promises"; -import { tmpdir } from "node:os"; -import { join } from "node:path"; - -import { afterEach, describe, expect, it } from "vitest"; - -import { - executeVersionForTesting as executeVersion, - windowsBatchCommandForTesting as windowsBatchCommand, -} from "./RuntimeExecutableDiagnostics.js"; - -const roots: string[] = []; - -afterEach(async () => { - await Promise.all( - roots.splice(0).map((root) => rm(root, { recursive: true, force: true })), - ); -}); - -describe("windowsBatchCommand", () => { - it("returns null off Windows even for batch files", () => { - expect(windowsBatchCommand("C:\\tools\\npm.cmd", "linux")).toBeNull(); - expect(windowsBatchCommand("C:\\tools\\npm.cmd", "darwin")).toBeNull(); - }); - - it("returns null for non-batch candidates on win32", () => { - expect(windowsBatchCommand("C:\\tools\\node.exe", "win32")).toBeNull(); - expect(windowsBatchCommand("/usr/local/bin/npm", "win32")).toBeNull(); - }); - - it.each(["npm.cmd", "npm.CMD", "tool.bat", "tool.BAT"])( - "routes %s through cmd.exe on win32", - (file) => { - expect(windowsBatchCommand(`C:\\tools\\${file}`, "win32")).toEqual({ - executable: "C:\\Windows\\System32\\cmd.exe", - arguments: ["/d", "/s", "/c", `"C:\\tools\\${file}" --version`], - }); - }, - ); - - it("preserves paths with spaces in a single /c argument", () => { - const command = windowsBatchCommand( - "C:\\Program Files\\nodejs\\npm.cmd", - "win32", - ); - expect(command?.arguments[3]).toBe( - '"C:\\Program Files\\nodejs\\npm.cmd" --version', - ); - }); - - it("doubles embedded quotes so they cannot break out of the /c string", () => { - const command = windowsBatchCommand('C:\\tools\\evil".cmd', "win32"); - expect(command?.arguments[3]).toBe('"C:\\tools\\evil"".cmd" --version'); - }); - - it("honours an explicit SystemRoot", () => { - const command = windowsBatchCommand( - "C:\\tools\\npm.cmd", - "win32", - "D:\\Win", - ); - expect(command?.executable).toBe("D:\\Win\\System32\\cmd.exe"); - }); -}); - -describe.runIf(process.platform === "win32")("executeVersion on win32", () => { - it("probes a real .bat shim without spawn EINVAL", async () => { - const dir = await mkdtemp(join(tmpdir(), "rea-win32-")); - roots.push(dir); - const shim = join(dir, "probe.bat"); - await writeFile(shim, "@echo 9.9.9\r\n"); - const result = await executeVersion( - shim, - 10_000, - process.env.PATH ?? "", - "win32", - ); - expect(result).toMatchObject({ ok: true, version: "9.9.9" }); - }); -}); diff --git a/src/application/SetupSkill.ts b/src/application/SetupSkill.ts index 5515ae569..6bb880e68 100644 --- a/src/application/SetupSkill.ts +++ b/src/application/SetupSkill.ts @@ -10,7 +10,6 @@ const SKILL_FILES = [ "references/javascript-applications.md", "references/runtime-observation.md", "references/evidence-workflows.md", - "references/controlled-replay.md", ] as const; interface CanonicalSkillFile { diff --git a/src/browser/BrowserScenario.test.ts b/src/browser/BrowserScenario.test.ts index c847226f1..a83f0601b 100644 --- a/src/browser/BrowserScenario.test.ts +++ b/src/browser/BrowserScenario.test.ts @@ -18,7 +18,6 @@ const baseScenario = () => ({ url: "https://app.example.test/", query: [{ name: "token", value: secret("session") }], }, - allowed_origins: ["https://api.example.test", "https://app.example.test"], actions: [ { step_id: "login", @@ -60,28 +59,6 @@ const baseScenario = () => ({ }, ], }, - request_replay: { - mode: "exact", - unmatched: "abort", - routes: [ - { - route_id: "profile", - method: "GET", - request: { url: "https://api.example.test/profile" }, - response: { - kind: "response", - status: 200, - headers: [ - { - name: "content-type", - value: literal("application/json"), - }, - ], - body: literal('{"name":"Ada"}'), - }, - }, - ], - }, secrets: [ { secret_id: "session", @@ -106,10 +83,6 @@ const baseScenario = () => ({ describe("browserScenarioSchema", () => { it("accepts and normalizes a declared scenario", () => { const parsed = browserScenarioSchema.parse(baseScenario()); - expect(parsed.allowed_origins).toEqual([ - "https://api.example.test", - "https://app.example.test", - ]); expect(parsed.browser).toMatchObject({ mode: "launch", headless: true }); expect(parsed.environment).toMatchObject({ viewport: { width: 1_280, height: 720, device_scale_factor: 1 }, @@ -119,11 +92,6 @@ describe("browserScenarioSchema", () => { reduced_motion: "reduce", service_workers: "block", }); - expect(parsed.request_replay).toEqual({ - mode: "exact", - unmatched: "abort", - routes: expect.any(Array), - }); expect(parsed.capture).toEqual({ after_each_step: ["screenshot", "url", "accessibility"], at_end: ["dom", "storage"], @@ -197,44 +165,18 @@ describe("browserScenarioSchema", () => { expect(browserScenarioSchema.safeParse(scenario).success).toBe(false); }); - it("rejects every undeclared navigation, storage, and replay origin", () => { - for (const mutate of [ - (scenario: ReturnType) => { - scenario.start_url.url = "https://other.example.test/"; - }, - (scenario: ReturnType) => { - scenario.actions[2] = { - ...scenario.actions[2], - destination: { url: "https://other.example.test/" }, - } as never; - }, - (scenario: ReturnType) => { - scenario.storage.local_storage[0]!.origin = - "https://other.example.test"; - }, - (scenario: ReturnType) => { - scenario.request_replay.routes[0]!.request.url = - "https://other.example.test/data"; - }, - ]) { - const scenario = baseScenario(); - mutate(scenario); - expect(browserScenarioSchema.safeParse(scenario).success).toBe(false); - } + it("accepts explicitly selected navigation and storage origins without an allowlist", () => { + const scenario = baseScenario(); + scenario.actions[2] = { + ...scenario.actions[2], + destination: { url: "https://other.example.test/" }, + } as never; + scenario.storage.local_storage[0]!.origin = "https://storage.example.test"; + expect(browserScenarioSchema.safeParse(scenario).success).toBe(true); }); }); -describe("browserScenarioSchema credential handling", () => { - it("rejects redirects outside declared origins", () => { - const scenario = baseScenario(); - scenario.request_replay.routes[0]!.response = { - kind: "redirect", - status: 302, - destination: { url: "https://other.example.test/" }, - } as never; - expect(browserScenarioSchema.safeParse(scenario).success).toBe(false); - }); - +describe("browserScenarioSchema secret declarations", () => { it("rejects missing and duplicate secret declarations but accepts redaction-only declarations", () => { const missing = baseScenario(); missing.secrets = missing.secrets.filter( @@ -260,42 +202,17 @@ describe("browserScenarioSchema credential handling", () => { expect(browserScenarioSchema.safeParse(unused).success).toBe(false); }); - it("accepts literal credential headers and rejects provider-owned headers", () => { - const credentialHeaders = baseScenario(); - credentialHeaders.request_replay.routes[0]!.response = { - kind: "response", - status: 200, - headers: [ - { name: "authorization", value: literal("Bearer caller-value") }, - { name: "cookie", value: literal("session=caller-value") }, - { name: "set-cookie", value: literal("session=caller-value") }, - ], - } as never; - expect(browserScenarioSchema.safeParse(credentialHeaders).success).toBe( - true, - ); - - for (const name of ["content-length", "location", "transfer-encoding"]) { - const scenario = baseScenario(); - scenario.request_replay.routes[0]!.response = { - kind: "response", - status: 200, - headers: [{ name, value: literal("raw") }], - } as never; - expect(browserScenarioSchema.safeParse(scenario).success).toBe(false); - } - }); - - it("rejects duplicate replay response headers case-insensitively", () => { - const scenario = baseScenario(); - const response = scenario.request_replay.routes[0]!.response; - if (response.kind !== "response") - throw new Error("Expected replay response fixture"); - response.headers.push({ - name: "Content-Type", - value: literal("text/plain"), - }); - expect(browserScenarioSchema.safeParse(scenario).success).toBe(false); + it("rejects removed replay and origin policy options", () => { + for (const legacyField of [ + { request_replay: { mode: "disabled" } }, + { allowed_origins: ["https://app.example.test"] }, + ]) + expect( + browserScenarioSchema.safeParse({ + ...baseScenario(), + ...legacyField, + }).success, + ).toBe(false); }); it("rejects raw secret-shaped action values", () => { diff --git a/src/browser/PlaywrightBrowserScenarioProvider.test.ts b/src/browser/PlaywrightBrowserScenarioProvider.test.ts index d113f55f6..279823de4 100644 --- a/src/browser/PlaywrightBrowserScenarioProvider.test.ts +++ b/src/browser/PlaywrightBrowserScenarioProvider.test.ts @@ -51,14 +51,12 @@ const scenario = ( executable_path: "/opt/chromium", }, start_url: { url: "https://app.example.test/" }, - allowed_origins: ["https://app.example.test"], actions: Array.from({ length: options.actions ?? 1 }, (_, index) => ({ step_id: `wait_${index}`, action: "wait_for_timeout", duration_ms: 1, })), storage: {}, - request_replay: { mode: "disabled" }, secrets: [], capture: { after_each_step: options.captures ?? ["url"], diff --git a/src/browser/PlaywrightBrowserScenarioProvider.ts b/src/browser/PlaywrightBrowserScenarioProvider.ts index 71459d907..89e917c9a 100644 --- a/src/browser/PlaywrightBrowserScenarioProvider.ts +++ b/src/browser/PlaywrightBrowserScenarioProvider.ts @@ -288,7 +288,6 @@ const runScenario = async ( }, scenario: { start_origin: new URL(scenario.start_url.url).origin, - allowed_origins: scenario.allowed_origins, action_count: scenario.actions.length, secret_references: scenario.secrets.map(({ secret_id: id }) => id).sort(), }, diff --git a/src/browser/PlaywrightScenarioArtifacts.test.ts b/src/browser/PlaywrightScenarioArtifacts.test.ts index 05e269d46..4aaf3fbab 100644 --- a/src/browser/PlaywrightScenarioArtifacts.test.ts +++ b/src/browser/PlaywrightScenarioArtifacts.test.ts @@ -11,7 +11,6 @@ const scenario = browserScenarioSchema.parse({ executable_path: "/opt/chromium", }, start_url: { url: "https://app.example.test/" }, - allowed_origins: ["https://app.example.test"], actions: [{ step_id: "wait", action: "wait_for_timeout", duration_ms: 1 }], }); const secrets = BrowserScenarioSecrets.resolve(scenario, {}); @@ -27,7 +26,6 @@ it("returns a complete requested text artifact beyond the former inline ceiling" const result = await capturePlaywrightStepArtifacts({ context: {} as BrowserContext, page, - scenario, secrets, requested: new Set(["dom"]), }); @@ -80,7 +78,6 @@ it("redacts declared secrets from current and historical URL artifacts", async ( const result = await capturePlaywrightStepArtifacts({ context: {} as BrowserContext, page, - scenario: scenarioWithSecretUrl, secrets: scenarioSecrets, requested: new Set(["url", "history"]), }); diff --git a/src/browser/PlaywrightScenarioArtifacts.ts b/src/browser/PlaywrightScenarioArtifacts.ts index f32f6096a..f0a086e63 100644 --- a/src/browser/PlaywrightScenarioArtifacts.ts +++ b/src/browser/PlaywrightScenarioArtifacts.ts @@ -134,12 +134,15 @@ const captureHistory = async (page: Page, secrets: BrowserScenarioSecrets) => { const captureStorage = async (input: { readonly context: BrowserContext; readonly page: Page; - readonly scenario: BrowserScenario; readonly secrets: BrowserScenarioSecrets; }) => { - const { context, page, scenario, secrets } = input; + const { context, page, secrets } = input; try { - const cookies = await context.cookies(scenario.allowed_origins); + const pageUrl = new URL(page.url()); + const cookies = + pageUrl.protocol === "http:" || pageUrl.protocol === "https:" + ? await context.cookies(pageUrl.href) + : []; const pageStorage = storageValueSchema.parse( await page.evaluate(`(() => ({ local_storage: Object.entries(window.localStorage), @@ -171,39 +174,20 @@ const captureStorage = async (input: { } }; -const isAllowedPage = ( - page: Page, - allowedOrigins: ReadonlySet, -): boolean => { - try { - return allowedOrigins.has(new URL(page.url()).origin); - } catch { - return false; - } -}; - /** Capture selected step artifacts without retaining data after scope loss. */ export const capturePlaywrightStepArtifacts = async (input: { readonly context: BrowserContext; readonly page: Page; - readonly scenario: BrowserScenario; readonly secrets: BrowserScenarioSecrets; readonly requested: ReadonlySet; }): Promise => { - const { context, page, scenario, secrets, requested } = input; - const allowed = isAllowedPage(page, new Set(scenario.allowed_origins)); - const denied = () => missing("current page is outside approved origins"); + const { context, page, secrets, requested } = input; const state = ( kind: SnapshotKind, capture: () => Promise, ): Promise< Value | ReturnType | ReturnType - > => - !requested.has(kind) - ? Promise.resolve(notRequested()) - : allowed || kind === "url" - ? capture() - : Promise.resolve(denied()); + > => (!requested.has(kind) ? Promise.resolve(notRequested()) : capture()); return browserStepArtifactsSchema.parse({ screenshot: await state("screenshot", () => captureScreenshot(page)), dom: await state("dom", () => captureDom({ page, secrets })), @@ -216,7 +200,7 @@ export const capturePlaywrightStepArtifacts = async (input: { })), history: await state("history", () => captureHistory(page, secrets)), storage: await state("storage", () => - captureStorage({ context, page, scenario, secrets }), + captureStorage({ context, page, secrets }), ), }); }; diff --git a/src/browser/PlaywrightScenarioBrowser.ts b/src/browser/PlaywrightScenarioBrowser.ts index 55de7d453..6d759ec24 100644 --- a/src/browser/PlaywrightScenarioBrowser.ts +++ b/src/browser/PlaywrightScenarioBrowser.ts @@ -48,21 +48,9 @@ const allowedBrowserEnvironment = ( ); }; -const originAllowed = ( - value: string, - allowedOrigins: ReadonlySet, -): boolean => { - try { - return allowedOrigins.has(new URL(value).origin); - } catch { - return false; - } -}; - const findConnectedPage = async ( browser: Browser, targetId: string, - allowedOrigins: ReadonlySet, ): Promise<{ readonly context: BrowserContext; readonly page: Page }> => { for (const context of browser.contexts()) for (const page of context.pages()) { @@ -70,11 +58,6 @@ const findConnectedPage = async ( try { const { targetInfo } = await session.send("Target.getTargetInfo"); if (targetInfo.targetId !== targetId) continue; - if ( - page.url() !== "about:blank" && - !originAllowed(page.url(), allowedOrigins) - ) - throw new BrowserObservationError(OPERATION, "target_not_allowed"); return { context, page }; } finally { await session.detach(); @@ -128,7 +111,6 @@ export const openPlaywrightScenarioBrowser = async ( const target = await findConnectedPage( browser, scenario.browser.target_id, - new Set(scenario.allowed_origins), ); await configureAttachedEnvironment(target.context, target.page, scenario); return { ...target, browser, profilePath: undefined }; diff --git a/src/browser/PlaywrightScenarioEvents.test.ts b/src/browser/PlaywrightScenarioEvents.test.ts index 8f3caed45..1db332e09 100644 --- a/src/browser/PlaywrightScenarioEvents.test.ts +++ b/src/browser/PlaywrightScenarioEvents.test.ts @@ -20,7 +20,6 @@ describe("PlaywrightScenarioEvents", () => { executable_path: "/opt/chromium", }, start_url: { url: "https://app.example.test/" }, - allowed_origins: ["https://app.example.test"], environment: { viewport: { width: 1_280, height: 720 }, locale: "en-US", @@ -36,7 +35,6 @@ describe("PlaywrightScenarioEvents", () => { }, ], storage: {}, - request_replay: { mode: "disabled" }, secrets: [], capture: { after_each_step: [], @@ -50,7 +48,6 @@ describe("PlaywrightScenarioEvents", () => { page, enabled: new Set(["page-errors"]), secrets, - allowedOrigins: scenario.allowed_origins, }); const error = new Error("m".repeat(70_000)); error.stack = "s".repeat(300_000); @@ -79,7 +76,6 @@ describe("PlaywrightScenarioEvents", () => { executable_path: "/opt/chromium", }, start_url: { url: "https://app.example.test/" }, - allowed_origins: ["https://app.example.test"], actions: [ { step_id: "wait", action: "wait_for_timeout", duration_ms: 1 }, ], @@ -91,7 +87,6 @@ describe("PlaywrightScenarioEvents", () => { page, enabled: new Set(["page-errors"]), secrets, - allowedOrigins: scenario.allowed_origins, }); for (let index = 0; index < 2_001; index += 1) listeners diff --git a/src/browser/PlaywrightScenarioEvents.ts b/src/browser/PlaywrightScenarioEvents.ts index cb16f0ed3..db7466ab9 100644 --- a/src/browser/PlaywrightScenarioEvents.ts +++ b/src/browser/PlaywrightScenarioEvents.ts @@ -36,7 +36,6 @@ interface EventCaptureOptions { readonly page: Page; readonly enabled: ReadonlySet; readonly secrets: BrowserScenarioSecrets; - readonly allowedOrigins: readonly string[]; } /** Arrival-ordered Playwright event capture with current-step attribution. */ @@ -46,12 +45,10 @@ export class PlaywrightScenarioEvents { private sequence = 0; private readonly enabled: ReadonlySet; private readonly secrets: BrowserScenarioSecrets; - private readonly allowedOrigins: ReadonlySet; constructor(options: EventCaptureOptions) { this.enabled = options.enabled; this.secrets = options.secrets; - this.allowedOrigins = new Set(options.allowedOrigins); this.observePage(options.page); } @@ -91,67 +88,38 @@ export class PlaywrightScenarioEvents { private observePage(page: Page): void { if (this.enabled.has("console")) - page.on("console", (message) => { - if (this.pageInScope(page)) this.console(message); - }); + page.on("console", (message) => this.console(message)); if (this.enabled.has("page-errors")) page.on("pageerror", (error) => { - if (this.pageInScope(page)) - this.push({ - kind: "page-error", - message: this.secrets.redact(error.message), - stack: - error.stack === undefined - ? null - : this.secrets.redact(error.stack), - }); + this.push({ + kind: "page-error", + message: this.secrets.redact(error.message), + stack: + error.stack === undefined ? null : this.secrets.redact(error.stack), + }); }); if (this.enabled.has("network")) { - page.on("request", (request) => { - if (this.pageInScope(page)) this.request("request", request); - }); - page.on("response", (response) => { - if (this.pageInScope(page)) this.response(response); - }); - page.on("requestfailed", (request) => { - if (this.pageInScope(page)) this.request("request-failed", request); - }); + page.on("request", (request) => this.request("request", request)); + page.on("response", (response) => this.response(response)); + page.on("requestfailed", (request) => + this.request("request-failed", request), + ); } if (this.enabled.has("websockets")) - page.on("websocket", (socket) => { - if (this.pageInScope(page)) this.webSocket(page, socket); - }); + page.on("websocket", (socket) => this.webSocket(socket)); if (this.enabled.has("frames")) { - page.on("frameattached", (frame) => { - if (this.pageInScope(page)) this.frame("frame-attached", frame); - }); - page.on("framedetached", (frame) => { - if (this.pageInScope(page)) this.frame("frame-detached", frame); - }); - page.on("framenavigated", (frame) => { - if (this.pageInScope(page)) this.frame("frame-navigated", frame); - }); + page.on("frameattached", (frame) => this.frame("frame-attached", frame)); + page.on("framedetached", (frame) => this.frame("frame-detached", frame)); + page.on("framenavigated", (frame) => + this.frame("frame-navigated", frame), + ); } if (this.enabled.has("workers")) - page.on("worker", (worker) => { - if (this.pageInScope(page)) this.worker(page, worker); - }); + page.on("worker", (worker) => this.worker(worker)); if (this.enabled.has("popups")) - page.on("popup", (popup) => { - if (this.pageInScope(page)) this.popup(popup); - }); + page.on("popup", (popup) => this.popup(popup)); if (this.enabled.has("downloads")) - page.on("download", (download) => { - if (this.pageInScope(page)) this.download(download); - }); - } - - private pageInScope(page: Page): boolean { - try { - return this.allowedOrigins.has(new URL(page.url()).origin); - } catch { - return false; - } + page.on("download", (download) => this.download(download)); } private safeUrl(value: string) { @@ -209,20 +177,16 @@ export class PlaywrightScenarioEvents { }); } - private webSocket(page: Page, socket: WebSocket): void { + private webSocket(socket: WebSocket): void { const url = this.safeUrl(socket.url()); this.push({ kind: "websocket-opened", url }); - socket.on("framesent", ({ payload }) => { - if (this.pageInScope(page)) - this.webSocketFrame("websocket-frame-sent", url, payload); - }); - socket.on("framereceived", ({ payload }) => { - if (this.pageInScope(page)) - this.webSocketFrame("websocket-frame-received", url, payload); - }); - socket.on("close", () => { - if (this.pageInScope(page)) this.push({ kind: "websocket-closed", url }); - }); + socket.on("framesent", ({ payload }) => + this.webSocketFrame("websocket-frame-sent", url, payload), + ); + socket.on("framereceived", ({ payload }) => + this.webSocketFrame("websocket-frame-received", url, payload), + ); + socket.on("close", () => this.push({ kind: "websocket-closed", url })); } private webSocketFrame( @@ -265,36 +229,27 @@ export class PlaywrightScenarioEvents { }); } - private worker(page: Page, worker: Worker): void { + private worker(worker: Worker): void { const details = { url: this.safeUrl(worker.url()), name: null, }; this.push({ kind: "worker-created", ...details }); - worker.on("close", () => { - if (this.pageInScope(page)) - this.push({ kind: "worker-closed", ...details }); - }); + worker.on("close", () => this.push({ kind: "worker-closed", ...details })); } private popup(page: Page): void { - if (!this.pageInScope(page)) { - void page.close().catch(() => undefined); - return; - } const opened = { url: page.url() === "" ? null : this.safeUrl(page.url()), name: null, }; this.push({ kind: "popup-opened", ...opened }); page.on("close", () => - this.pageInScope(page) - ? this.push({ - kind: "popup-closed", - url: page.url() === "" ? null : this.safeUrl(page.url()), - name: null, - }) - : undefined, + this.push({ + kind: "popup-closed", + url: page.url() === "" ? null : this.safeUrl(page.url()), + name: null, + }), ); this.observePage(page); } diff --git a/src/browser/PlaywrightScenarioSession.ts b/src/browser/PlaywrightScenarioSession.ts index 53bc0517d..434546ba4 100644 --- a/src/browser/PlaywrightScenarioSession.ts +++ b/src/browser/PlaywrightScenarioSession.ts @@ -1,9 +1,4 @@ -import { - type BrowserContext, - type Page, - type Route, - type WebSocketRoute, -} from "playwright-core"; +import { type BrowserContext, type Page } from "playwright-core"; import type { BrowserScenario, @@ -27,17 +22,6 @@ import { withPlaywrightExecutionBoundary } from "./PlaywrightExecutionBoundary.j const OPERATION = "capture_browser_scenario" as const; -const originAllowed = ( - value: string, - allowedOrigins: ReadonlySet, -): boolean => { - try { - return allowedOrigins.has(new URL(value).origin); - } catch { - return false; - } -}; - const storageSeeds = ( blocks: BrowserScenario["storage"]["local_storage"], secrets: BrowserScenarioSecrets, @@ -81,111 +65,6 @@ const installStorageSeeds = async ( })()`); }; -const installHttpPolicy = async (input: { - readonly context: BrowserContext; - readonly scenario: BrowserScenario; - readonly secrets: BrowserScenarioSecrets; - readonly ownedPages: Set; - readonly claimOwnedPage: (page: Page) => Promise; -}): Promise => { - const { context, scenario, secrets, ownedPages, claimOwnedPage } = input; - const routes = - scenario.request_replay.mode === "exact" - ? new Map( - scenario.request_replay.routes.map((route) => [ - `${route.method} ${secrets.url(route.request)}`, - route, - ]), - ) - : new Map(); - await context.route("**/*", async (route, request) => { - let requestPage: Page | undefined; - try { - requestPage = request.frame().page(); - } catch { - requestPage = undefined; - } - if ( - scenario.browser.mode === "connect" && - requestPage !== undefined && - !ownedPages.has(requestPage) - ) - await claimOwnedPage(requestPage); - if ( - scenario.browser.mode === "connect" && - (requestPage === undefined || !ownedPages.has(requestPage)) - ) { - await route.continue(); - return; - } - if (!originAllowed(request.url(), new Set(scenario.allowed_origins))) { - await route.abort("blockedbyclient"); - return; - } - const replay = routes.get(`${request.method()} ${request.url()}`); - if (replay !== undefined) { - await fulfillReplayRoute(route, replay.response, secrets); - return; - } - if ( - scenario.request_replay.mode === "exact" && - scenario.request_replay.unmatched === "abort" - ) { - await route.abort("blockedbyclient"); - return; - } - await route.continue(); - }); -}; - -type ReplayResponse = Extract< - BrowserScenario["request_replay"], - { readonly mode: "exact" } ->["routes"][number]["response"]; - -const fulfillReplayRoute = async ( - route: Route, - response: ReplayResponse, - secrets: BrowserScenarioSecrets, -): Promise => { - if (response.kind === "redirect") { - await route.fulfill({ - status: response.status, - headers: { location: secrets.url(response.destination) }, - }); - return; - } - await route.fulfill({ - status: response.status, - headers: Object.fromEntries( - response.headers.map(({ name, value }) => [name, secrets.value(value)]), - ), - ...(response.body === undefined - ? {} - : { body: secrets.value(response.body) }), - }); -}; - -const installWebSocketPolicy = async ( - owner: BrowserContext | Page, - scenario: BrowserScenario, -): Promise => { - const allowed = new Set(scenario.allowed_origins); - await owner.routeWebSocket("**/*", async (route: WebSocketRoute) => { - const url = new URL(route.url()); - const httpOrigin = `${url.protocol === "wss:" ? "https:" : "http:"}//${url.host}`; - if ( - !allowed.has(httpOrigin) || - (scenario.request_replay.mode === "exact" && - scenario.request_replay.unmatched === "abort") - ) { - await route.close({ code: 1008, reason: "outside scenario policy" }); - return; - } - route.connectToServer(); - }); -}; - const blockAttachedServiceWorkers = async (page: Page): Promise => { const controller = await page.evaluate( "Boolean(navigator.serviceWorker?.controller)", @@ -210,40 +89,12 @@ const initializePage = async ( page: Page, scenario: BrowserScenario, secrets: BrowserScenarioSecrets, -): Promise> => { +): Promise => { context.setDefaultTimeout(0); context.setDefaultNavigationTimeout(0); - const ownedPages = new Set([page]); if (scenario.browser.mode === "connect") await blockAttachedServiceWorkers(page); - await installWebSocketPolicy( - scenario.browser.mode === "launch" ? context : page, - scenario, - ); - const claimOwnedPage = async (candidate: Page): Promise => { - if (ownedPages.has(candidate)) return true; - const opener = await candidate.opener(); - if (opener === null || !ownedPages.has(opener)) return false; - await installWebSocketPolicy(candidate, scenario); - ownedPages.add(candidate); - return true; - }; - await installHttpPolicy({ - context, - scenario, - secrets, - ownedPages, - claimOwnedPage, - }); - page.on("popup", (popup) => { - if (scenario.browser.mode === "connect") - void claimOwnedPage(popup).catch(async () => { - await popup.close().catch(() => undefined); - }); - else ownedPages.add(popup); - }); await installStorageSeeds(context, page, scenario, secrets); - return ownedPages; }; export class PlaywrightScenarioSession implements BrowserScenarioSessionPort { @@ -256,13 +107,12 @@ export class PlaywrightScenarioSession implements BrowserScenarioSessionPort { private constructor( private readonly opened: OpenedScenarioBrowser, - private readonly scenario: BrowserScenario, + mode: BrowserScenario["browser"]["mode"], private readonly secrets: BrowserScenarioSecrets, private readonly eventCapture: PlaywrightScenarioEvents, ) { - this.mode = scenario.browser.mode; - this.processOwnership = - scenario.browser.mode === "launch" ? "provider-owned" : "external"; + this.mode = mode; + this.processOwnership = mode === "launch" ? "provider-owned" : "external"; this.version = opened.browser.version(); this.initialUrl = opened.page.url(); } @@ -303,11 +153,10 @@ export class PlaywrightScenarioSession implements BrowserScenarioSessionPort { page: opened.page, enabled: new Set(scenario.capture.events), secrets, - allowedOrigins: scenario.allowed_origins, }); const session = new PlaywrightScenarioSession( opened, - scenario, + scenario.browser.mode, secrets, events, ); @@ -378,7 +227,6 @@ export class PlaywrightScenarioSession implements BrowserScenarioSessionPort { capturePlaywrightStepArtifacts({ context: this.opened.context, page: this.opened.page, - scenario: this.scenario, secrets: this.secrets, requested, }), diff --git a/src/cli.ts b/src/cli.ts index 28e636402..90306c802 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -55,7 +55,7 @@ export const createCli = ( registerCoreAnalysisCommands(cli, logger); registerUtilityCommands(cli, logger, environment); registerArtifactCommands(cli, logger); - registerManagedCommands(cli, logger, environment); + registerManagedCommands(cli, logger); registerEvidenceCommands(cli, logger); registerProcessCommands(cli, logger, environment); registerBrowserCommands(cli, logger); @@ -63,6 +63,6 @@ export const createCli = ( registerBrowserScenarioCommands(cli, logger); registerElectronCommands(cli, logger); registerJavaScriptRuntimeObservationCommands(cli, logger); - registerApplicationCommands(cli, logger, environment); + registerApplicationCommands(cli, logger); return cli; }; diff --git a/src/cli/managedCommands.ts b/src/cli/managedCommands.ts index a98485ece..2fce8e0bc 100644 --- a/src/cli/managedCommands.ts +++ b/src/cli/managedCommands.ts @@ -3,9 +3,7 @@ import { z } from "incur"; import { compareManagedMemberPaths } from "../application/ManagedMemberComparisonService.js"; import { verifyManagedNativeBoundariesEvidence } from "../application/ManagedNativeVerificationService.js"; import { importManagedReconstructionEvidence } from "../application/ManagedReconstructionService.js"; -import { planManagedRuntimeCorrelationEvidence } from "../application/ManagedRuntimeCorrelationService.js"; import { runProviderAnalysis } from "../application/DirectAnalysis.js"; -import { parseConfig } from "../config.js"; import { parseCliJsonInput } from "../cliJsonInput.js"; import { projectAnalysisError } from "../domain/errors.js"; import { CLI_COMMANDS } from "../cliCommandNames.js"; @@ -17,7 +15,6 @@ import { registerProjectManagedApplicationGraph } from "./managedProjectGraphCom export const registerManagedCommands = ( cli: CliInstance, logger: Logger, - environment: Readonly> = process.env, ): void => { registerInspectManagedArtifact(cli, logger); registerInspectManagedMembers(cli, logger); @@ -25,7 +22,6 @@ export const registerManagedCommands = ( registerCompareManagedMembers(cli, logger); registerImportManagedReconstruction(cli, logger); registerVerifyManagedNativeBoundaries(cli, logger); - registerPlanManagedRuntimeCorrelation(cli, logger, environment); registerProjectManagedApplicationGraph(cli, logger); }; @@ -162,34 +158,3 @@ const registerVerifyManagedNativeBoundaries = ( }), }); }; - -const registerPlanManagedRuntimeCorrelation = ( - cli: CliInstance, - logger: Logger, - environment: Readonly> = process.env, -): void => { - cli.command(CLI_COMMANDS.planManagedRuntimeCorrelation, { - description: - "Plan a managed runtime-correlation request without probing or executing a runtime", - args: z.object({ - inputJson: z - .string() - .describe("Inline managed runtime-correlation JSON or JSON file path"), - }), - run: ({ args }) => - logCliCommand(logger, "plan-managed-runtime-correlation", async () => { - const input = await parseCliJsonInput( - args.inputJson, - "plan-managed-runtime-correlation", - ); - if (!input.ok) return input.error; - const config = parseConfig(environment); - if (!config.ok) return projectAnalysisError(config.error); - const result = await planManagedRuntimeCorrelationEvidence( - { configuration: () => config.value.managedRuntimeConfiguration }, - input.value, - ); - return result.ok ? result.value : projectAnalysisError(result.error); - }), - }); -}; diff --git a/src/cliApplicationCommands.ts b/src/cliApplicationCommands.ts index cc71939a0..4172e33ff 100644 --- a/src/cliApplicationCommands.ts +++ b/src/cliApplicationCommands.ts @@ -7,11 +7,6 @@ import { traceApplicationFeatureEvidenceValidated, } from "./application/JavaScriptApplicationWorkflowService.js"; import { traceJavaScriptSemanticsEvidenceValidated } from "./application/JavaScriptSemanticTraceService.js"; -import { runControlledReplay } from "./application/JavaScriptReplayService.js"; -import { - executeNodeCharacterization, - prepareNodeCharacterization, -} from "./application/NodeRuntimeCharacterizationService.js"; import { evaluateReconstructionCoverage, reconstructionCoverageEvaluationInputSchema, @@ -27,10 +22,6 @@ import { } from "./domain/errors.js"; import { jsonValueSchema, type JsonValue } from "./domain/jsonValue.js"; import type { Logger } from "./logger.js"; -import { parseConfig } from "./config.js"; -import { LinuxJavaScriptReplayRunner } from "./replay/LinuxJavaScriptReplayRunner.js"; -import { SystemJavaScriptReplayHost } from "./replay/SystemJavaScriptReplayHost.js"; -import type { AppConfig } from "./config.js"; import { traceApplicationFeatureInputSchema } from "./domain/javascriptFeatureTraceSchemas.js"; import { traceJavaScriptSemanticsInputSchema } from "./domain/javascriptSemanticTraceSchemas.js"; import { compareApplicationVersionsInputSchema } from "./domain/javascriptApplicationVersionComparisonSchemas.js"; @@ -45,7 +36,6 @@ type CliInstance = ReturnType; export const registerApplicationCommands = ( cli: ReturnType, logger: Logger, - environment: Readonly> = process.env, ): void => { registerJsonCommand({ cli, @@ -92,52 +82,6 @@ export const registerApplicationCommands = ( inputSchema: compareJavaScriptExportShapesInputSchema, workflow: compareJavaScriptExportShapesEvidenceValidated, }); - cli.command(CLI_COMMANDS.runControlledReplay, { - description: - "Plan or execute an extracted-module replay in the isolated Linux sandbox", - args: z.object({ - inputJson: z.string().describe("Inline replay JSON or JSON file path"), - }), - run: ({ args }) => - logCliCommand(logger, CLI_COMMANDS.runControlledReplay, async () => { - const input = await parseCliJsonInput( - args.inputJson, - CLI_COMMANDS.runControlledReplay, - ); - if (!input.ok) return input.error; - const config = parseConfig(environment); - if (!config.ok) return projectAnalysisError(config.error); - const result = await runControlledReplay( - { - configuration: () => config.value.javascriptReplayConfiguration, - host: new SystemJavaScriptReplayHost(), - runner: new LinuxJavaScriptReplayRunner(), - }, - input.value, - ); - return result.ok ? result.value : projectAnalysisError(result.error); - }), - }); - registerConfiguredJsonCommand({ - cli, - logger, - environment, - name: CLI_COMMANDS.prepareNodeCharacterization, - description: - "Prepare one exact Node/JavaScript characterization without execution", - workflow: (config, input) => - prepareNodeCharacterization(replayDependencies(config), input), - }); - registerConfiguredJsonCommand({ - cli, - logger, - environment, - name: CLI_COMMANDS.executeNodeCharacterization, - description: - "Execute one exact Node/JavaScript characterization from its content-bound plan", - workflow: (config, input) => - executeNodeCharacterization(replayDependencies(config), input), - }); registerObligationLedgerCommand(cli, logger); registerCoverageCommand(cli, logger); }; @@ -162,47 +106,6 @@ const registerObligationLedgerCommand = ( }, }); -interface ConfiguredJsonCommandOptions { - readonly cli: CliInstance; - readonly logger: Logger; - /** Environment the configuration is read from; defaults to the process environment. */ - readonly environment?: Readonly>; - readonly name: string; - readonly description: string; - readonly workflow: ( - config: AppConfig, - input: unknown, - ) => Promise< - | { readonly ok: true; readonly value: JsonValue } - | { readonly ok: false; readonly error: AnalysisError } - >; -} - -const registerConfiguredJsonCommand = ({ - cli, - logger, - environment = process.env, - name, - description, - workflow, -}: ConfiguredJsonCommandOptions): void => { - cli.command(name, { - description, - args: z.object({ - inputJson: z.string().describe("Inline workflow JSON or JSON file path"), - }), - run: ({ args }) => - logCliCommand(logger, name, async () => { - const input = await parseCliJsonInput(args.inputJson, name); - if (!input.ok) return input.error; - const configured = configuredConfig(environment); - if (!configured.ok) return configured.error; - const result = await workflow(configured.config, input.value); - return result.ok ? result.value : projectAnalysisError(result.error); - }), - }); -}; - const registerCoverageCommand = (cli: CliInstance, logger: Logger): void => registerJsonCommand({ cli, @@ -218,29 +121,6 @@ const registerCoverageCommand = (cli: CliInstance, logger: Logger): void => }, }); -const configuredConfig = ( - environment: Readonly> = process.env, -): - | { - readonly ok: true; - readonly config: AppConfig; - } - | { - readonly ok: false; - readonly error: ReturnType; - } => { - const configured = parseConfig(environment); - return configured.ok - ? { ok: true, config: configured.value } - : { ok: false, error: projectAnalysisError(configured.error) }; -}; - -const replayDependencies = (config: AppConfig) => ({ - configuration: () => config.javascriptReplayConfiguration, - host: new SystemJavaScriptReplayHost(), - runner: new LinuxJavaScriptReplayRunner(), -}); - interface JsonCommandOptions { readonly cli: CliInstance; readonly logger: Logger; diff --git a/src/cliCommandNames.ts b/src/cliCommandNames.ts index c8d0c7e8c..daa080848 100644 --- a/src/cliCommandNames.ts +++ b/src/cliCommandNames.ts @@ -33,7 +33,6 @@ export const CLI_COMMANDS = Object.freeze({ compareManagedMembers: "compare-managed-members", verifyManagedNativeBoundaries: "verify-managed-native-boundaries", importManagedReconstruction: "import-managed-reconstruction", - planManagedRuntimeCorrelation: "plan-managed-runtime-correlation", projectManagedApplicationGraph: "project-managed-application-graph", observeNativeUi: "observe-native-ui", captureNativeUiScenario: "capture-native-ui-scenario", @@ -68,10 +67,6 @@ export const CLI_COMMANDS = Object.freeze({ compareApplicationVersions: "compare-application-versions", compareSourceToBundle: "compare-source-to-bundle", compareJavaScriptExportShapes: "compare-javascript-export-shapes", - runReplayMachine: "run-replay-machine", - runControlledReplay: "run-controlled-replay", - prepareNodeCharacterization: "prepare-node-characterization", - executeNodeCharacterization: "execute-node-characterization", buildReconstructionObligationLedger: "build-reconstruction-obligation-ledger", evaluateReconstructionCoverage: "evaluate-reconstruction-coverage", }); diff --git a/src/cliEnvironmentSeam.test.ts b/src/cliEnvironmentSeam.test.ts index 6de841020..f53ef55ba 100644 --- a/src/cliEnvironmentSeam.test.ts +++ b/src/cliEnvironmentSeam.test.ts @@ -24,10 +24,6 @@ describe("the CLI takes its environment as an input", () => { expect(createSystemDoctorHost()).toBeDefined(); }); - it("builds a doctor host from an explicit environment", () => { - expect(createSystemDoctorHost({})).toBeDefined(); - }); - it("resolves from injected PATH and inherits injected env with scenario overrides", async ({ skip, }) => { diff --git a/src/cliProcessCommands.ts b/src/cliProcessCommands.ts index 6bf9d7a54..5803c0894 100644 --- a/src/cliProcessCommands.ts +++ b/src/cliProcessCommands.ts @@ -7,21 +7,13 @@ import { import { logCliCommand } from "./cliLogging.js"; import type { Logger } from "./logger.js"; import { CLI_COMMANDS } from "./cliCommandNames.js"; -import { parseCliJsonInput } from "./cliJsonInput.js"; -import { - replayMachineRunInputSchema, - runReplayMachine, -} from "./domain/replayMachineRun.js"; -import { AnalysisInputError, projectAnalysisError } from "./domain/errors.js"; -import { projectInputIssues } from "./domain/inputIssueProjection.js"; -/** Register process capture one-shot commands through shared application services. */ +/** Register direct process capture and comparison commands. */ export const registerProcessCommands = ( cli: ReturnType, logger: Logger, environment: Readonly> = process.env, ): void => { - registerReplayMachineCommand(cli, logger); cli.command(CLI_COMMANDS.captureProcess, { description: "Capture one caller-selected process scenario", args: z.object({ scenario: z.string().describe("Scenario JSON path") }), @@ -46,39 +38,3 @@ export const registerProcessCommands = ( ), }); }; - -const registerReplayMachineCommand = ( - cli: ReturnType, - logger: Logger, -): void => { - cli.command(CLI_COMMANDS.runReplayMachine, { - description: - "Run ordered protocol events directly through a finite replay machine", - args: z.object({ - inputJson: z.string().describe("Inline replay JSON or JSON file path"), - }), - run: ({ args }) => - logCliCommand(logger, CLI_COMMANDS.runReplayMachine, async () => { - const input = await parseCliJsonInput( - args.inputJson, - CLI_COMMANDS.runReplayMachine, - ); - if (!input.ok) return input.error; - const parsed = replayMachineRunInputSchema.safeParse(input.value); - return parsed.success - ? runReplayMachine(parsed.data) - : { - error: "Process command failed", - ...projectAnalysisError( - new AnalysisInputError( - CLI_COMMANDS.runReplayMachine, - { - cause: parsed.error, - }, - projectInputIssues(parsed.error.issues, input.value), - ), - ), - }; - }), - }); -}; diff --git a/src/config.test.ts b/src/config.test.ts index 9da007235..738a52811 100644 --- a/src/config.test.ts +++ b/src/config.test.ts @@ -24,12 +24,6 @@ describe("runtime configuration", () => { expect(result.value.referenceSourcePolicy).toEqual({ secretPatterns: [], }); - expect(result.value.javascriptReplayConfiguration.nodePath).toBe( - process.execPath, - ); - expect( - result.value.managedRuntimeConfiguration.executablePath, - ).toBeUndefined(); } }); @@ -88,28 +82,6 @@ describe("runtime target configuration", () => { expect(result.error.message).toContain("Invalid REA environment"); }); - it("configures runtime executable paths without authority settings", () => { - expect( - parseConfig({ - REA_MANAGED_RUNTIME_EXECUTABLE_PATH: "/opt/dotnet/dotnet", - REA_JAVASCRIPT_REPLAY_NODE_PATH: "/opt/node/bin/node", - }), - ).toMatchObject({ - ok: true, - value: { - managedRuntimeConfiguration: { executablePath: "/opt/dotnet/dotnet" }, - javascriptReplayConfiguration: { nodePath: "/opt/node/bin/node" }, - }, - }); - expect( - parseConfig({ REA_MANAGED_RUNTIME_EXECUTABLE_PATH: "relative/dotnet" }) - .ok, - ).toBe(false); - expect( - parseConfig({ REA_JAVASCRIPT_REPLAY_NODE_PATH: "relative/node" }).ok, - ).toBe(false); - }); - it("parses database kind and loader arguments", () => { expect( parseConfig({ diff --git a/src/config/environment.ts b/src/config/environment.ts index 077fdaa59..fb73dedb6 100644 --- a/src/config/environment.ts +++ b/src/config/environment.ts @@ -1,6 +1,5 @@ import { z } from "zod"; import { isAbsolute } from "node:path"; -import { defaultJavaScriptReplayConfiguration } from "./runtimeConfiguration.js"; import { ConfigurationError } from "../domain/errors.js"; import { err, ok, type Result } from "../domain/result.js"; @@ -31,39 +30,6 @@ const environmentSchema = z.object({ .enum(["trace", "debug", "info", "warn", "error", "fatal", "silent"]) .default("info"), REA_REFERENCE_SECRET_PATTERNS_JSON: z.string().default("[]"), - REA_JAVASCRIPT_REPLAY_NODE_PATH: z - .string() - .min(1) - .refine(isAbsolute, "REA_JAVASCRIPT_REPLAY_NODE_PATH must be absolute") - .default(() => defaultJavaScriptReplayConfiguration().nodePath), - REA_JAVASCRIPT_REPLAY_BWRAP_PATH: z - .string() - .min(1) - .refine(isAbsolute, "REA_JAVASCRIPT_REPLAY_BWRAP_PATH must be absolute") - .default(() => defaultJavaScriptReplayConfiguration().bubblewrapPath), - REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH: z - .string() - .min(1) - .refine( - isAbsolute, - "REA_JAVASCRIPT_REPLAY_SYSTEMD_RUN_PATH must be absolute", - ) - .default(() => defaultJavaScriptReplayConfiguration().systemdRunPath), - REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH: z - .string() - .min(1) - .refine(isAbsolute, "REA_JAVASCRIPT_REPLAY_SYSTEMCTL_PATH must be absolute") - .default(() => defaultJavaScriptReplayConfiguration().systemctlPath), - REA_JAVASCRIPT_REPLAY_SHELL_PATH: z - .string() - .min(1) - .refine(isAbsolute, "REA_JAVASCRIPT_REPLAY_SHELL_PATH must be absolute") - .default(() => defaultJavaScriptReplayConfiguration().shellPath), - REA_MANAGED_RUNTIME_EXECUTABLE_PATH: z - .string() - .min(1) - .refine(isAbsolute, "REA_MANAGED_RUNTIME_EXECUTABLE_PATH must be absolute") - .optional(), }); export type Environment = z.infer; diff --git a/src/config/parseConfig.ts b/src/config/parseConfig.ts index 4ae7d8311..502354917 100644 --- a/src/config/parseConfig.ts +++ b/src/config/parseConfig.ts @@ -34,15 +34,5 @@ export const parseConfig = ( hopperLoaderArgs: loaderArgs.value, logLevel: env.REA_LOG_LEVEL, referenceSourcePolicy: { secretPatterns: secretPatterns.value }, - javascriptReplayConfiguration: { - 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, - }, - managedRuntimeConfiguration: { - executablePath: env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH, - }, }); }; diff --git a/src/config/runtimeConfiguration.ts b/src/config/runtimeConfiguration.ts deleted file mode 100644 index 7cdc33a39..000000000 --- a/src/config/runtimeConfiguration.ts +++ /dev/null @@ -1,11 +0,0 @@ -import type { JavaScriptReplayConfiguration } from "../application/JavaScriptReplayPlanning.js"; - -/** Default runtime paths; callers can override these through parsed configuration. */ -export const defaultJavaScriptReplayConfiguration = - (): JavaScriptReplayConfiguration => ({ - nodePath: process.execPath, - bubblewrapPath: "/usr/bin/bwrap", - systemdRunPath: "/usr/bin/systemd-run", - systemctlPath: "/usr/bin/systemctl", - shellPath: "/usr/bin/bash", - }); diff --git a/src/config/types.ts b/src/config/types.ts index 76bf2e25a..752a529a1 100644 --- a/src/config/types.ts +++ b/src/config/types.ts @@ -1,8 +1,6 @@ import type { LogLevel } from "../logger.js"; import type { ReferenceSourcePolicy } from "../domain/referenceSourcePolicy.js"; import type { AnalysisProviderSelector } from "../contracts/providerSelection.js"; -import type { ManagedRuntimeConfiguration } from "../application/ManagedRuntimeCorrelationService.js"; -import type { JavaScriptReplayConfiguration } from "../application/JavaScriptReplayPlanning.js"; export interface AppConfig { readonly analysisProvider: AnalysisProviderSelector; @@ -15,6 +13,4 @@ export interface AppConfig { readonly hopperLoaderArgs: readonly string[]; readonly logLevel: LogLevel; readonly referenceSourcePolicy: ReferenceSourcePolicy; - readonly javascriptReplayConfiguration: JavaScriptReplayConfiguration; - readonly managedRuntimeConfiguration: ManagedRuntimeConfiguration; } diff --git a/src/contracts/applicationToolContracts.ts b/src/contracts/applicationToolContracts.ts index faa28db39..9134163ac 100644 --- a/src/contracts/applicationToolContracts.ts +++ b/src/contracts/applicationToolContracts.ts @@ -10,23 +10,12 @@ import { traceApplicationFeatureRequestSchema, traceJavaScriptSemanticsRequestSchema, } from "./applicationWorkflowInputContracts.js"; -import { - controlledReplayInputSchema, - controlledReplayOutputSchema, -} from "../domain/javascriptReplay.js"; -import { - nodeCharacterizationExecutionInputSchema, - nodeCharacterizationExecutionOutputSchema, - nodeCharacterizationPreparationInputSchema, - nodeCharacterizationPreparationOutputSchema, -} from "../domain/nodeRuntimeCharacterization.js"; import { reconstructionCoverageEvaluationInputSchema } from "../application/ReconstructionCoverageService.js"; import { reconstructionClosureResultSchema } from "../domain/reconstructionCoverage.js"; import { reconstructionObligationLedgerInputSchema, reconstructionObligationLedgerSchema, } from "../domain/reconstructionObligationLedgerSchemas.js"; -import { jsonObjectSchema } from "../domain/jsonValue.js"; import type { ToolContract } from "./toolContracts.js"; import { toolContractMetadata } from "./toolEffects.js"; import { evidenceResultOf } from "./toolOutputSchemas.js"; @@ -54,37 +43,6 @@ const reconstructionObligationLedgerOutputSchema = evidenceResultOf( reconstructionObligationLedgerSchema, ); const HASH = "0".repeat(64); -const NODE_PREPARATION_EXAMPLE = jsonObjectSchema.parse({ - selected_alias: "bundle", - expected_effect: "pure", - instrumentation: { - artifact_path: "/tmp/example/bundle.js", - artifact_sha256: HASH, - selection: { - byte_start: 100, - byte_end: 120, - selected_sha256: HASH, - export_name: "selected", - }, - }, - replay: { - mode: "plan", - left: { - modules: [ - { - alias: "bundle", - path: "/tmp/example/bundle.js", - format: "commonjs-factory", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "bundle", - entry_export: "selected", - }, - cases: [{ case_id: "empty", arguments: [""] }], - }, -}); /** Provider-neutral graph workflow contracts shared by MCP and CLI adapters. */ export const APPLICATION_TOOL_CONTRACTS = [ @@ -159,7 +117,7 @@ export const APPLICATION_TOOL_CONTRACTS = [ name: "compare_javascript_export_shapes", ...toolContractMetadata("compare_javascript_export_shapes"), description: - "Compare static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph supplied as inline Evidence. 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.", + "Compare static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph supplied as inline Evidence. Variants pair only by reciprocal unique literal discriminants; dynamic values, incomplete properties, and ambiguous variants remain unknown. Reports JSON Pointer changes without executing JavaScript; runtime behavior requires a separate agent-run probe.", kind: "application", inputSchema: compareJavaScriptExportShapesRequestSchema, outputSchema: exportShapeComparisonOutputSchema, @@ -170,91 +128,6 @@ export const APPLICATION_TOOL_CONTRACTS = [ }, ], }, - { - name: "run_controlled_replay", - ...toolContractMetadata("run_controlled_replay"), - description: - "Plan or execute a content-bound extracted-module JavaScript replay inside the Linux Bubblewrap, seccomp, and cgroup boundary. Execution requires 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.", - kind: "application", - inputSchema: controlledReplayInputSchema, - outputSchema: controlledReplayOutputSchema, - examples: [ - { - title: "Plan one extracted ESM parser replay", - input: { - mode: "plan", - left: { - modules: [ - { - alias: "parser", - path: "/tmp/example/parser.mjs", - format: "esm", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "parser", - entry_export: "default", - }, - cases: [{ case_id: "empty", arguments: [""] }], - determinism: { - clock_iso: "2000-01-01T00:00:00.000Z", - random_seed: 0, - locale: "en-US", - timezone: "UTC", - platform: "linux", - }, - limits: { - wall_time_ms: 3000, - memory_bytes: 134217728, - tasks: 8, - cpu_quota_percent: 50, - tmpfs_bytes: 16777216, - module_bytes: 4194304, - input_bytes: 262144, - protocol_bytes: 16777216, - output_bytes: 524288, - stderr_bytes: 32768, - result_depth: 16, - result_nodes: 10000, - }, - }, - }, - ], - }, - { - name: "prepare_node_characterization", - ...toolContractMetadata("prepare_node_characterization"), - 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 later execution.", - kind: "application", - inputSchema: nodeCharacterizationPreparationInputSchema, - outputSchema: nodeCharacterizationPreparationOutputSchema, - examples: [ - { - title: "Prepare one exact bundled callable characterization", - input: NODE_PREPARATION_EXAMPLE, - }, - ], - }, - { - name: "execute_node_characterization", - ...toolContractMetadata("execute_node_characterization"), - description: - "Recompute and execute one exact Node characterization plan in the owned controlled-replay boundary. The supplied plan_sha256 is checked against the freshly computed plan_sha256 as content identity; a mismatch fails before execution. Returns transformation, replay, cleanup, and provider-neutral characterization Evidence.", - kind: "application", - inputSchema: nodeCharacterizationExecutionInputSchema, - outputSchema: nodeCharacterizationExecutionOutputSchema, - examples: [ - { - title: "Execute one exact characterization plan", - input: { - plan_sha256: HASH, - preparation: NODE_PREPARATION_EXAMPLE, - }, - }, - ], - }, { name: "build_reconstruction_obligation_ledger", ...toolContractMetadata("build_reconstruction_obligation_ledger"), @@ -355,20 +228,11 @@ export function applicationToolContract( name: "compare_javascript_export_shapes", ): (typeof APPLICATION_TOOL_CONTRACTS)[4]; export function applicationToolContract( - name: "run_controlled_replay", + name: "build_reconstruction_obligation_ledger", ): (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_coverage", -): (typeof APPLICATION_TOOL_CONTRACTS)[9]; +): (typeof APPLICATION_TOOL_CONTRACTS)[6]; export function applicationToolContract( name: (typeof APPLICATION_TOOL_CONTRACTS)[number]["name"], ): (typeof APPLICATION_TOOL_CONTRACTS)[number] { diff --git a/src/contracts/browserScenarioToolContracts.ts b/src/contracts/browserScenarioToolContracts.ts index 744a3d7b5..d8449ffd6 100644 --- a/src/contracts/browserScenarioToolContracts.ts +++ b/src/contracts/browserScenarioToolContracts.ts @@ -26,7 +26,7 @@ export const BROWSER_SCENARIO_TOOL_CONTRACTS = [ name: "capture_browser_scenario", ...toolContractMetadata("capture_browser_scenario"), description: - "Run a controlled browser scenario when passive observation cannot exercise the application. Launch the selected executable or connect to a loopback CDP target, provide a start URL and actions, and optionally declare additional origins for navigation, storage, or request replay. By default, only the start URL origin is in scope. Environment, empty storage, disabled request replay, redaction, and a URL-only final capture are defaults; provide secrets, initial storage, request replay, or additional artifacts when needed. Actions run until completion or cancellation unless timeout_ms is set. Results are returned inline.", + "Run a controlled browser scenario when passive observation cannot exercise the application. Launch the selected executable or connect to a loopback CDP target, provide a start URL and actions, and select storage or artifacts when needed. Environment, empty storage, and a URL-only final capture are defaults; provide initial storage or additional artifacts when needed. Agents can run their own local fixture servers to control application responses. Actions run until completion or cancellation unless timeout_ms is set. Results are returned inline.", kind: "browser-provider", inputSchema: browserScenarioInputSchema, outputSchema: evidenceResultOf(browserScenarioCaptureSchema), diff --git a/src/contracts/browserToolContracts.ts b/src/contracts/browserToolContracts.ts index ffd7c3fd7..ea16ce099 100644 --- a/src/contracts/browserToolContracts.ts +++ b/src/contracts/browserToolContracts.ts @@ -74,7 +74,6 @@ const exampleScenarioCapture = () => ({ }, scenario: { start_origin: origin, - allowed_origins: [origin], action_count: 1, secret_references: [], }, diff --git a/src/contracts/enhancedInputs.ts b/src/contracts/enhancedInputs.ts index f2b9f4aa4..10b400f8c 100644 --- a/src/contracts/enhancedInputs.ts +++ b/src/contracts/enhancedInputs.ts @@ -43,7 +43,6 @@ export const enhancedInputSchemas = { procedure: z.string().describe("A procedure name or address"), }), trace_feature: traceLiteralInputSchema, - find_code_for_string: traceLiteralInputSchema, trace_call_path: z.strictObject({ start: z.string().describe("A provider-normalized procedure address"), goal: z diff --git a/src/contracts/errorSchemas.ts b/src/contracts/errorSchemas.ts index 59ae866e7..c33d36cb3 100644 --- a/src/contracts/errorSchemas.ts +++ b/src/contracts/errorSchemas.ts @@ -58,7 +58,6 @@ export const analysisErrorProjectionSchema = z.discriminatedUnion("code", [ generic("configuration_invalid"), generic("target_unavailable"), generic("execution_failure"), - generic("plan_stale"), ]); /** JSON Schema document used by generated API documentation and clients. */ diff --git a/src/contracts/managedWorkflowExamples.ts b/src/contracts/managedWorkflowExamples.ts index a21a70acf..e6acdc5eb 100644 --- a/src/contracts/managedWorkflowExamples.ts +++ b/src/contracts/managedWorkflowExamples.ts @@ -307,26 +307,3 @@ export const MANAGED_NATIVE_VERIFICATION_EXAMPLE = { managed_boundaries: boundaryEvidence(), native_observations: [nativeExportEvidence()], }; - -/** Minimal valid managed runtime-correlation planning request. */ -export const MANAGED_RUNTIME_CORRELATION_EXAMPLE = { - static_members: runtimeExampleEvidence, - method: { - token: "0x06000001", - signature_sha256: "3".repeat(64), - normalized_il_sha256: "5".repeat(64), - }, - requested_effect: "attach", - host: { - os: "linux", - clr_family: "dotnet", - architecture: "x86_64", - }, - bounds: { - timeout_ms: 5_000, - max_threads: 32, - max_output_bytes: 65_536, - allow_network: false, - allow_ui: false, - }, -}; diff --git a/src/contracts/managedWorkflowToolContracts.ts b/src/contracts/managedWorkflowToolContracts.ts index 18f518b92..eb7ff510d 100644 --- a/src/contracts/managedWorkflowToolContracts.ts +++ b/src/contracts/managedWorkflowToolContracts.ts @@ -2,7 +2,6 @@ import { z } from "zod"; import { evidenceSchema } from "../domain/evidence.js"; import { managedReconstructionImportInputSchema } from "../domain/managedReconstruction.js"; -import { managedRuntimeCorrelationInputSchema } from "../domain/managedRuntimeCorrelation.js"; import type { ToolContract } from "./toolContracts.js"; import { managedWorkflowOutputSchemas } from "./toolOutputSchemas.js"; import { @@ -10,7 +9,6 @@ import { MANAGED_NATIVE_VERIFICATION_EXAMPLE, MANAGED_APPLICATION_GRAPH_EXAMPLE, MANAGED_RECONSTRUCTION_IMPORT_EXAMPLE, - MANAGED_RUNTIME_CORRELATION_EXAMPLE, } from "./managedWorkflowExamples.js"; import { toolContractMetadata } from "./toolEffects.js"; import { requireOutputSchema } from "./toolOutputSchemaPrimitives.js"; @@ -30,12 +28,6 @@ export const compareManagedMembersReferenceInputSchema = z }); }); -/** MCP reference for planning from one session-owned managed observation. */ -export const managedRuntimeCorrelationReferenceInputSchema = - managedRuntimeCorrelationInputSchema.extend({ - static_members: evidenceSchema, - }); - /** Inline Evidence input for importing reconstruction. */ export const managedReconstructionReferenceInputSchema = managedReconstructionImportInputSchema.extend({ @@ -115,10 +107,6 @@ const comparisonOutputSchema = requireOutputSchema( managedWorkflowOutputSchemas, "compare_managed_members", ); -const runtimeOutputSchema = requireOutputSchema( - managedWorkflowOutputSchemas, - "plan_managed_runtime_correlation", -); const reconstructionOutputSchema = requireOutputSchema( managedWorkflowOutputSchemas, "import_managed_reconstruction", @@ -192,28 +180,6 @@ export const MANAGED_WORKFLOW_TOOL_CONTRACTS = [ }, ], }, - { - name: "plan_managed_runtime_correlation", - ...toolContractMetadata("plan_managed_runtime_correlation"), - description: - "Prepare a non-executing managed runtime-correlation plan from authenticated inspect_managed_members Evidence. Planning does not probe or launch a runtime; it records the configured executable or the default command name, locks the exact artifact SHA-256, MVID, method signature, and decoded-IL hash, and describes requested effects and bounds without claiming execution or confinement.", - kind: "application", - inputSchema: managedRuntimeCorrelationReferenceInputSchema, - outputSchema: runtimeOutputSchema, - examples: [ - { - title: "Plan an exact-build managed runtime correlation", - input: { - static_members: MANAGED_RUNTIME_CORRELATION_EXAMPLE.static_members, - method: MANAGED_RUNTIME_CORRELATION_EXAMPLE.method, - requested_effect: - MANAGED_RUNTIME_CORRELATION_EXAMPLE.requested_effect, - host: MANAGED_RUNTIME_CORRELATION_EXAMPLE.host, - bounds: MANAGED_RUNTIME_CORRELATION_EXAMPLE.bounds, - }, - }, - ], - }, { name: "project_managed_application_graph", ...toolContractMetadata("project_managed_application_graph"), diff --git a/src/contracts/replayMachineExample.ts b/src/contracts/replayMachineExample.ts deleted file mode 100644 index 315421ac0..000000000 --- a/src/contracts/replayMachineExample.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { jsonObjectSchema } from "../domain/jsonValue.js"; - -/** Minimal login callback accepted by the direct replay-machine contract. */ -export const REPLAY_MACHINE_RUN_EXAMPLE = jsonObjectSchema.parse({ - machine: { - initial_state: "waiting", - states: [{ name: "waiting" }, { name: "complete", terminal: true }], - transitions: [ - { - id: "accept_callback", - from: "waiting", - to: "complete", - trigger: { protocol: "http", method: "POST", path: "/callback" }, - captures: [ - { - variable: "token", - value: { source: "request_json", path: ["token"] }, - sensitive: true, - }, - ], - actions: [{ type: "http_response", status: 204, body: "" }], - max_uses: 1, - }, - ], - max_transitions: 1, - }, - events: [ - { - protocol: "http", - connection: "not_applicable", - at_ms: 0, - method: "POST", - path: "/callback", - headers: {}, - body: '{"token":"opaque"}', - }, - ], -}); diff --git a/src/contracts/sessionToolSchemas.ts b/src/contracts/sessionToolSchemas.ts index d0684bf22..52c4c9b05 100644 --- a/src/contracts/sessionToolSchemas.ts +++ b/src/contracts/sessionToolSchemas.ts @@ -10,7 +10,6 @@ import { processScenarioSchema } from "../domain/processCapture.js"; import { processTraceSpecificationSchema } from "../domain/processTraceComparison.js"; import { recordUnknownInputSchema } from "../domain/residualUnknown.js"; import { reconstructionVerificationInputSchema } from "../domain/reconstructionVerification.js"; -import { replayMachineRunInputSchema } from "../domain/replayMachineRun.js"; import { staticRuntimeCorrelationInputSchema } from "../domain/staticRuntimeCorrelation.js"; import { evidenceSchema } from "../domain/evidence.js"; import { updateUnknownInputSchema } from "../domain/residualUnknown.js"; @@ -75,7 +74,6 @@ export { processScenarioSchema, reconstructionVerificationInputSchema, recordUnknownInputSchema, - replayMachineRunInputSchema, staticRuntimeCorrelationInputSchema, updateUnknownInputSchema, }; diff --git a/src/contracts/toolContractExamples.ts b/src/contracts/toolContractExamples.ts index 7c6856bc0..5ddc8aa35 100644 --- a/src/contracts/toolContractExamples.ts +++ b/src/contracts/toolContractExamples.ts @@ -7,7 +7,6 @@ import { PROCESS_CAPTURE_REFERENCE, PROCESS_CAPTURE_RECONSTRUCTION, } from "./investigationExamples.js"; -import { REPLAY_MACHINE_RUN_EXAMPLE } from "./replayMachineExample.js"; /** Canonical examples for contracts whose required inputs have no defaults. */ export const TOOL_EXAMPLE_OVERRIDES: Readonly< @@ -46,7 +45,6 @@ export const TOOL_EXAMPLE_OVERRIDES: Readonly< analyze_swift_types: { category: "classes", pattern: "Account" }, inspect_native_api: { procedure: "main" }, trace_feature: { query: "license" }, - find_code_for_string: { query: "authorization failed" }, trace_call_path: { start: "0x1000", goal: "0x1100" }, trace_native_ui_action: { action: "buildTapped:" }, open_binary: { path: "/tmp/fixture" }, @@ -57,7 +55,6 @@ export const TOOL_EXAMPLE_OVERRIDES: Readonly< executable: "/usr/bin/true", working_directory: "/tmp", }, - run_replay_machine: REPLAY_MACHINE_RUN_EXAMPLE, compare_process_captures: { left: PROCESS_CAPTURE_REFERENCE, right: PROCESS_CAPTURE_RECONSTRUCTION, diff --git a/src/contracts/toolContracts.test.ts b/src/contracts/toolContracts.test.ts index 0b8600b82..61901ad85 100644 --- a/src/contracts/toolContracts.test.ts +++ b/src/contracts/toolContracts.test.ts @@ -74,11 +74,9 @@ const PUBLISHED_TOOL_NAME_FLOOR = [ "demangle_swift", "discover_webmcp_tools", "evaluate_reconstruction_coverage", - "execute_node_characterization", "export_evidence_bundle", "extract_artifact", "find_changed_behavior", - "find_code_for_string", "find_xrefs_to_name", "get_call_graph", "get_evidence_bundle", @@ -117,8 +115,6 @@ const PUBLISHED_TOOL_NAME_FLOOR = [ "observe_javascript_runtime", "observe_web_session", "open_binary", - "plan_managed_runtime_correlation", - "prepare_node_characterization", "prev_address", "procedure_address", "procedure_assembly", @@ -133,8 +129,6 @@ const PUBLISHED_TOOL_NAME_FLOOR = [ "reconcile_javascript_runtime", "record_unknown", "resolve_containing_procedure", - "run_controlled_replay", - "run_replay_machine", "search_procedures", "search_strings", "set_address_name", diff --git a/src/contracts/toolContracts.ts b/src/contracts/toolContracts.ts index a60ede15c..1e2a2d234 100644 --- a/src/contracts/toolContracts.ts +++ b/src/contracts/toolContracts.ts @@ -31,7 +31,6 @@ import { processScenarioSchema, reconstructionVerificationInputSchema, recordUnknownInputSchema, - replayMachineRunInputSchema, getEvidenceBundleInputSchema, staticRuntimeCorrelationInputSchema, updateUnknownInputSchema, @@ -358,11 +357,6 @@ export const ENHANCED_TOOL_CONTRACTS = [ "Trace a literal feature query through every matching string and procedure, their xrefs, and truthful containing-procedure resolution. Returns observations, operation count, and residual unknowns without inferring reference kinds.", enhancedInputSchemas.trace_feature, ), - enhanced( - "find_code_for_string", - "Resolve one literal string query across analyzed string entries, xrefs, and truthful containing-procedure candidates. Returns observations, operation count, and residual unknowns; it never infers reference kinds or runtime reachability.", - enhancedInputSchemas.find_code_for_string, - ), enhanced( "trace_call_path", "Trace direct callers or callees from one exact procedure address until the graph is exhausted or the optional goal is reached. Returns visited nodes, direct-call edges, a shortest traversal path, provider failures, and residual unknowns; unresolved indirect calls remain unknown.", @@ -478,11 +472,6 @@ export const SESSION_TOOL_CONTRACTS = [ "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.", verifyUnknownResolutionInputSchema, ), - session( - "run_replay_machine", - "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.", - replayMachineRunInputSchema, - ), session( "get_evidence_bundle", "Return every Evidence record and residual unknown currently retained by this session as one inline bundle for direct inspection or follow-up workflows.", @@ -514,3 +503,21 @@ export const TOOL_CONTRACTS = [ ...APPLICATION_TOOL_CONTRACTS, ...SESSION_TOOL_CONTRACTS, ] as const; + +/** Resolve a public contract by name while retaining its exact schema types. */ +export const toolContract = < + Name extends (typeof TOOL_CONTRACTS)[number]["name"], +>( + name: Name, +): Extract<(typeof TOOL_CONTRACTS)[number], { readonly name: Name }> => { + const contract = TOOL_CONTRACTS.find( + ( + candidate, + ): candidate is Extract< + (typeof TOOL_CONTRACTS)[number], + { readonly name: Name } + > => candidate.name === name, + ); + if (contract === undefined) throw new Error(`Missing tool contract: ${name}`); + return contract; +}; diff --git a/src/contracts/toolEffects.ts b/src/contracts/toolEffects.ts index 1e09578ff..b2d46bf48 100644 --- a/src/contracts/toolEffects.ts +++ b/src/contracts/toolEffects.ts @@ -96,7 +96,6 @@ export const TOOL_EFFECTS: Readonly> = { analyze_function: evidence, inspect_native_api: effects({ mutatesSession: true, idempotent: false }), trace_feature: effects({ mutatesSession: true, idempotent: false }), - find_code_for_string: effects({ mutatesSession: true, idempotent: false }), trace_call_path: effects({ mutatesSession: true, idempotent: false }), observe_native_ui: effects({ mutatesSession: true, @@ -129,7 +128,6 @@ export const TOOL_EFFECTS: Readonly> = { compare_managed_members: sessionEvidence, verify_managed_native_boundaries: sessionEvidence, import_managed_reconstruction: sessionEvidence, - plan_managed_runtime_correlation: sessionEvidence, project_managed_application_graph: sessionEvidence, list_browser_targets: browserEvidence, inspect_web_page: browserEvidence, @@ -171,21 +169,6 @@ export const TOOL_EFFECTS: Readonly> = { compare_source_to_bundle: evidence, compare_javascript_export_shapes: evidence, build_reconstruction_obligation_ledger: evidence, - run_replay_machine: effects(), - run_controlled_replay: effects({ - mutatesSession: true, - writesFilesystem: true, - launchesProcess: true, - }), - prepare_node_characterization: effects({ - mutatesSession: true, - launchesProcess: true, - }), - execute_node_characterization: effects({ - mutatesSession: true, - writesFilesystem: true, - launchesProcess: true, - }), evaluate_reconstruction_coverage: effects(), open_binary: effects({ mutatesSession: true, launchesProcess: true }), close_binary: effects({ diff --git a/src/contracts/toolOutputSchemaGroups.ts b/src/contracts/toolOutputSchemaGroups.ts index b04143a0b..ab9d95df6 100644 --- a/src/contracts/toolOutputSchemaGroups.ts +++ b/src/contracts/toolOutputSchemaGroups.ts @@ -39,7 +39,6 @@ import { import { managedMemberComparisonResultSchema } from "../domain/managedMemberComparison.js"; import { managedNativeVerificationResultSchema } from "../domain/managedNativeVerification.js"; import { managedReconstructionImportResultSchema } from "../domain/managedReconstruction.js"; -import { managedRuntimeCorrelationResultSchema } from "../domain/managedRuntimeCorrelation.js"; import { managedApplicationGraphResultSchema } from "../domain/managedApplicationGraph.js"; import { artifactComparisonResultSchema } from "../domain/artifactComparison.js"; import { functionComparisonResultSchema } from "../domain/functionComparison.js"; @@ -48,7 +47,6 @@ import { changedBehaviorResultSchema } from "../domain/changedBehavior.js"; import { callPathResultSchema } from "../domain/callPath.js"; import { staticRuntimeCorrelationResultSchema } from "../domain/staticRuntimeCorrelation.js"; import { reconstructionVerificationResultSchema } from "../domain/reconstructionVerification.js"; -import { replayMachineRunOutputSchema } from "../domain/replayMachineRun.js"; import { analysisErrorProjectionSchema } from "./errorSchemas.js"; import { nativeDispatchMetadataResultSchema } from "../domain/objcSwiftMetadata.js"; import { nativeInvestigationTraceSchema } from "../domain/nativeInvestigationGraph.js"; @@ -313,7 +311,6 @@ export const enhancedOutputSchemas: Readonly> = { analyze_function: functionDossierOutput, inspect_native_api: resultOf(nativeApiInspectionResultSchema), trace_feature: literalTraceOutput, - find_code_for_string: literalTraceOutput, trace_call_path: callPathTraceOutput, }; @@ -357,9 +354,6 @@ export const managedWorkflowOutputSchemas: Readonly< import_managed_reconstruction: resultOf( managedReconstructionImportResultSchema, ), - plan_managed_runtime_correlation: resultOf( - managedRuntimeCorrelationResultSchema, - ), project_managed_application_graph: resultOf( managedApplicationGraphResultSchema, ), @@ -462,5 +456,4 @@ export const sessionOutputSchemas: Readonly> = { unknown: residualUnknownSchema, }), ), - run_replay_machine: lifecycleResultOf(replayMachineRunOutputSchema), }; diff --git a/src/doctorRuntime.ts b/src/doctorRuntime.ts index 6f808768a..92a724531 100644 --- a/src/doctorRuntime.ts +++ b/src/doctorRuntime.ts @@ -6,16 +6,11 @@ import { import { fileURLToPath } from "node:url"; import { inspectSystemGhidraProvider } from "./ghidra/GhidraDoctor.js"; import { selectLinuxPrivateDisplayStrategy } from "./hopper/LinuxPrivateDisplayProbe.js"; -import { parseConfig } from "./config.js"; -import { SystemJavaScriptReplayHost } from "./replay/SystemJavaScriptReplayHost.js"; /** Compose provider diagnostics at the outer CLI adapter boundary. */ -export const createSystemDoctorHost = ( - environment: Readonly> = process.env, -): DoctorHost => +export const createSystemDoctorHost = (): DoctorHost => systemDoctorHost({ providerInspections: async () => [await inspectSystemGhidraProvider()], - javascriptReplayCheck: () => inspectJavaScriptReplay(environment), linuxDemoRuntimeCheck: inspectLinuxPrivateDisplay, }); @@ -62,40 +57,3 @@ const inspectLinuxPrivateDisplay = async (): Promise => { : "Inspect the private-display diagnostic, correct the reported local condition, and rerun rea doctor --provider hopper.", }; }; - -const inspectJavaScriptReplay = async ( - environment: Readonly> = process.env, -): Promise => { - const config = parseConfig(environment); - if (!config.ok) - return { - name: "javascript-replay", - ok: false, - classification: "config_drift", - detail: config.error.message, - remediation: "Fix the reported REA_JAVASCRIPT_REPLAY_* configuration.", - }; - try { - await new SystemJavaScriptReplayHost().probe( - config.value.javascriptReplayConfiguration, - ); - return { - name: "javascript-replay", - ok: true, - classification: "healthy", - detail: "Linux namespace, seccomp, and delegated cgroup probes passed", - }; - } catch (cause: unknown) { - return { - name: "javascript-replay", - ok: false, - classification: - process.platform === "linux" - ? "missing_dependency" - : "unsupported_host", - detail: cause instanceof Error ? cause.message : "sandbox probe failed", - remediation: - "Install and configure compatible Bubblewrap and systemd user cgroup delegation on a Linux host, then retry controlled replay.", - }; - } -}; diff --git a/src/domain/analysisErrorPresentation.ts b/src/domain/analysisErrorPresentation.ts index ee8ff3fce..f9fa8af1d 100644 --- a/src/domain/analysisErrorPresentation.ts +++ b/src/domain/analysisErrorPresentation.ts @@ -12,7 +12,6 @@ import { HopperTimeoutError, NoBinaryOpenError, ProviderSelectionError, - ReplayPlanStaleError, UnknownRegistryError, type AnalysisError, type AnalysisErrorProjection, @@ -38,15 +37,12 @@ export const analysisErrorRemediationAction = ( return "Correct the listed arguments and retry."; if (error instanceof UnknownRegistryError && error.reason === "not-found") return "Check that the unknown_id belongs to this session, then retry."; - if (error instanceof ReplayPlanStaleError) - return "Rebuild the replay plan and retry with its current digest."; return analysisErrorUserMessage(error); }; export const analysisErrorCategory = ( error: AnalysisError, ): AnalysisErrorProjection["category"] => { - if (error instanceof ReplayPlanStaleError) return "integrity_mismatch"; if ( error instanceof ProviderSelectionError && error.reason === "provider_unavailable" @@ -109,8 +105,6 @@ const STATIC_ERROR_CATEGORIES: Readonly< }; export const analysisErrorUserMessage = (error: AnalysisError): string => { - if (error instanceof ReplayPlanStaleError) - return "The controlled replay plan changed before execution. Refresh the current state and try again."; if (error instanceof AnalysisInputError) return "Analysis input is invalid. Check the arguments and try again."; const hopperMessage = hopperErrorUserMessage(error); @@ -250,7 +244,6 @@ const KNOWN_ERROR_TAGS = { ConfigurationError: true, NoBinaryOpenError: true, BinaryTargetError: true, - ReplayPlanStaleError: true, } as const satisfies Readonly>; export const assertKnownAnalysisErrorTag = (tag: AnalysisErrorTag): void => { diff --git a/src/domain/analysisErrorProjection.test.ts b/src/domain/analysisErrorProjection.test.ts index b6a368096..f4e020313 100644 --- a/src/domain/analysisErrorProjection.test.ts +++ b/src/domain/analysisErrorProjection.test.ts @@ -10,7 +10,6 @@ import { HopperStartError, HopperTimeoutError, ProviderAdapterError, - ReplayPlanStaleError, UnknownRegistryError, projectAnalysisError, } from "./errors.js"; @@ -18,7 +17,7 @@ import { describe("analysis error projection: provider failures", () => { it("reports a timed-out active Hopper request and actionable retry guidance", () => { const projected = projectAnalysisError( - new HopperTimeoutError(30_000, "find_code_for_string", 42, "busy"), + new HopperTimeoutError(30_000, "trace_feature", 42, "busy"), ); expect(projected).toMatchObject({ @@ -27,7 +26,7 @@ describe("analysis error projection: provider failures", () => { retryable: true, details: { stage: "analysis", - operation: "find_code_for_string", + operation: "trace_feature", request_id: 42, provider_state: "busy", timeout_ms: 30_000, @@ -64,7 +63,7 @@ describe("analysis error projection: provider failures", () => { "Hopper analysis failed in the selected document", { diagnosticType: "bridge_exception", - operation: "find_code_for_string", + operation: "trace_feature", requestId: 43, }, ), @@ -75,7 +74,7 @@ describe("analysis error projection: provider failures", () => { stage: "analysis", provider_code: 7, diagnostic_type: "bridge_exception", - operation: "find_code_for_string", + operation: "trace_feature", request_id: 43, }, message: expect.stringContaining("Hopper analysis failed"), @@ -144,16 +143,12 @@ describe("analysis error projection: caller contract", () => { cause: secretCause, }), ), - projectAnalysisError( - new ReplayPlanStaleError("a".repeat(64), "b".repeat(64)), - ), ]; expect(projected.map(({ code }) => code)).toEqual([ "invalid_request", "capability_unavailable", "target_unavailable", - "plan_stale", ]); expect(projected[1]).toMatchObject({ category: "unsupported_provider" }); expect(projected[2]).toMatchObject({ diff --git a/src/domain/analysisErrorProjection.ts b/src/domain/analysisErrorProjection.ts index 51d7f9d83..d592a5e39 100644 --- a/src/domain/analysisErrorProjection.ts +++ b/src/domain/analysisErrorProjection.ts @@ -15,7 +15,6 @@ import { HopperTimeoutError, ProviderAdapterError, ProviderSelectionError, - ReplayPlanStaleError, UnknownRegistryError, type AnalysisError, type AnalysisErrorProjection, @@ -49,7 +48,6 @@ export const projectAnalysisError = ( const errorCode = (error: AnalysisError): AnalysisErrorProjection["code"] => { if (error.cleanupIncomplete) return "cleanup_incomplete"; - if (error instanceof ReplayPlanStaleError) return "plan_stale"; if (error instanceof ProviderSelectionError) return error.reason === "provider_unavailable" ? "provider_unavailable" @@ -121,7 +119,6 @@ type SpecializedErrorTag = | "EvidenceFileError" | "ProcessCaptureError" | "ProviderSelectionError" - | "ReplayPlanStaleError" | "UnknownRegistryError"; const STATIC_ERROR_CODES = { @@ -158,7 +155,6 @@ const staticErrorCode = ( case "EvidenceFileError": case "ProcessCaptureError": case "ProviderSelectionError": - case "ReplayPlanStaleError": case "UnknownRegistryError": throw new TypeError(`Unhandled specialized analysis error: ${tag}`); default: @@ -196,12 +192,6 @@ const requestErrorDetails = ( expected: error.expected, actual: error.actual, }; - if (error instanceof ReplayPlanStaleError) - return { - expected_plan_digest: error.expectedDigest, - actual_plan_digest: error.actualDigest, - application_code_admitted: false, - }; return undefined; }; diff --git a/src/domain/browserScenario.test.ts b/src/domain/browserScenario.test.ts index 99c616caa..c69beeaef 100644 --- a/src/domain/browserScenario.test.ts +++ b/src/domain/browserScenario.test.ts @@ -2,7 +2,7 @@ import { expect, it } from "vitest"; import { browserScenarioSchema } from "./browserScenario.js"; -it("accepts scenarios beyond former action, secret, storage, and replay-route counts", () => { +it("accepts large action, secret, and storage selections", () => { const actions = Array.from({ length: 129 }, (_, index) => ({ step_id: `fill_${index}`, action: "fill", @@ -25,12 +25,6 @@ it("accepts scenarios beyond former action, secret, storage, and replay-route co name: `entry_${index}`, value: { source: "literal", value: "value" }, })); - const routes = Array.from({ length: 257 }, (_, index) => ({ - route_id: `route_${index}`, - method: "GET", - request: { url: `https://app.example.test/${index}` }, - response: { kind: "response", status: 200 }, - })); const result = browserScenarioSchema.parse({ browser: { @@ -38,7 +32,6 @@ it("accepts scenarios beyond former action, secret, storage, and replay-route co executable_path: "/opt/chromium", }, start_url: { url: "https://app.example.test/" }, - allowed_origins: ["https://app.example.test"], actions, secrets, storage: { @@ -50,11 +43,6 @@ it("accepts scenarios beyond former action, secret, storage, and replay-route co { origin: "https://app.example.test", entries: storageEntries }, ], }, - request_replay: { - mode: "exact", - unmatched: "abort", - routes, - }, }); expect(result.actions).toHaveLength(129); @@ -62,12 +50,9 @@ it("accepts scenarios beyond former action, secret, storage, and replay-route co expect(result.storage.cookies).toHaveLength(129); expect(result.storage.local_storage[0]?.entries).toHaveLength(129); expect(result.storage.session_storage[0]?.entries).toHaveLength(129); - expect( - result.request_replay.mode === "exact" && result.request_replay.routes, - ).toHaveLength(257); }); -it("defaults scenario scope to the start URL origin", () => { +it("does not require duplicate origin scope declarations", () => { const scenario = browserScenarioSchema.parse({ browser: { mode: "launch", @@ -75,11 +60,31 @@ it("defaults scenario scope to the start URL origin", () => { }, start_url: { url: "https://app.example.test/" }, actions: [ - { step_id: "settle", action: "wait_for_timeout", duration_ms: 1 }, + { + step_id: "navigate", + action: "goto", + destination: { url: "https://other.example.test/" }, + wait_until: "load", + }, ], + storage: { + local_storage: [ + { + origin: "https://storage.example.test", + entries: [ + { name: "theme", value: { source: "literal", value: "dark" } }, + ], + }, + ], + }, }); - expect(scenario.allowed_origins).toEqual(["https://app.example.test"]); + expect(scenario.actions[0]).toMatchObject({ + destination: { url: "https://other.example.test/" }, + }); + expect(scenario.storage.local_storage[0]?.origin).toBe( + "https://storage.example.test", + ); }); it("accepts complete browser inputs beyond former string length caps", () => { @@ -93,7 +98,6 @@ it("accepts complete browser inputs beyond former string length caps", () => { executable_path: longPath, }, start_url: { url: `https://app.example.test${longPath}` }, - allowed_origins: ["https://app.example.test"], secrets: [ { secret_id: longToken, @@ -123,30 +127,6 @@ it("accepts complete browser inputs beyond former string length caps", () => { }, ], }, - request_replay: { - mode: "exact", - unmatched: "abort", - routes: [ - { - route_id: longToken, - method: "GET", - request: { url: "https://app.example.test/" }, - response: { - kind: "response", - status: 200, - headers: [ - { - name: longToken, - value: { - source: "literal", - value: longValue, - }, - }, - ], - }, - }, - ], - }, }); expect(result.actions[0]?.step_id).toBe(longToken); @@ -158,15 +138,6 @@ it("accepts complete browser inputs beyond former string length caps", () => { ).toBe(longToken); expect(result.storage.cookies[0]?.name).toBe(longToken); expect(result.secrets[0]?.environment_variable).toBe(longEnvironmentVariable); - const replayRoute = - result.request_replay.mode === "exact" - ? result.request_replay.routes[0] - : undefined; - expect( - replayRoute?.response.kind === "response" - ? replayRoute.response.headers[0]?.name - : undefined, - ).toBe(longToken); }); it("accepts caller-selected viewport sizes and click counts without ceilings", () => { @@ -176,7 +147,6 @@ it("accepts caller-selected viewport sizes and click counts without ceilings", ( executable_path: "/opt/chromium", }, start_url: { url: "https://app.example.test/" }, - allowed_origins: ["https://app.example.test"], environment: { viewport: { width: 20_000, height: 10_000, device_scale_factor: 8 }, }, diff --git a/src/domain/browserScenario.ts b/src/domain/browserScenario.ts index a5f05393a..2f3e4df3a 100644 --- a/src/domain/browserScenario.ts +++ b/src/domain/browserScenario.ts @@ -2,11 +2,9 @@ import { z } from "zod"; import { browserScenarioActionSchema, - browserScenarioAllowedOriginsSchema, browserScenarioBrowserSchema, browserScenarioCaptureSchema, browserScenarioEnvironmentSchema, - browserScenarioRequestReplaySchema, browserScenarioSecretSchema, browserScenarioStorageSchema, browserScenarioUrlSchema, @@ -31,18 +29,12 @@ export const browserScenarioInputSchema = z.strictObject({ start_url: browserScenarioUrlSchema.describe( "Required initial HTTP(S) URL. Query values must be declared separately as public literals or secret references.", ), - allowed_origins: browserScenarioAllowedOriginsSchema - .default([]) - .describe( - "Optional exact HTTP(S) origins for later navigation, storage seed, and replay routes. Defaults to the start URL origin.", - ), environment: browserScenarioEnvironmentSchema, actions: z .array(browserScenarioActionSchema) .min(1) .describe("Required sequence of explicit browser actions."), storage: browserScenarioStorageSchema, - request_replay: browserScenarioRequestReplaySchema, secrets: z .array(browserScenarioSecretSchema) .default([]) @@ -70,23 +62,6 @@ const assertUnique = ( addIssue(context, path, `${label} must be unique`); }; -const originFor = (destination: BrowserScenarioUrl): string => - new URL(destination.url).origin; - -const assertAllowedDestination = ( - destination: BrowserScenarioUrl, - allowedOrigins: ReadonlySet, - path: PropertyKey[], - context: z.RefinementCtx, -): void => { - if (!allowedOrigins.has(originFor(destination))) - addIssue( - context, - path, - `URL origin ${originFor(destination)} is not declared in allowed_origins`, - ); -}; - const secretReferencesInValue = ( value: BrowserScenarioValue | undefined, ): readonly string[] => (value?.source === "secret" ? [value.secret_id] : []); @@ -106,117 +81,20 @@ const actionSecretReferences = ( return []; }; -const validateStorage = ( - scenario: ScenarioShape, - allowedOrigins: ReadonlySet, - context: z.RefinementCtx, -): readonly string[] => { +const validateStorage = (scenario: ScenarioShape): readonly string[] => { const references: string[] = []; - scenario.storage.cookies.forEach((cookie, index) => { - assertAllowedDestination( - cookie.destination, - allowedOrigins, - ["storage", "cookies", index, "destination"], - context, - ); + scenario.storage.cookies.forEach((cookie) => { references.push(...secretReferencesInValue(cookie.value)); references.push(...destinationSecretReferences(cookie.destination)); }); for (const collection of ["local_storage", "session_storage"] as const) - scenario.storage[collection].forEach((storage, index) => { - if (!allowedOrigins.has(storage.origin)) - addIssue( - context, - ["storage", collection, index, "origin"], - `Storage origin ${storage.origin} is not declared in allowed_origins`, - ); + scenario.storage[collection].forEach((storage) => { for (const entry of storage.entries) references.push(...secretReferencesInValue(entry.value)); }); return references; }; -const FORBIDDEN_REPLAY_HEADERS = new Set([ - "content-length", - "location", - "transfer-encoding", -]); - -const validateRequestReplay = ( - scenario: ScenarioShape, - allowedOrigins: ReadonlySet, - context: z.RefinementCtx, -): readonly string[] => { - if (scenario.request_replay.mode === "disabled") return []; - assertUnique( - scenario.request_replay.routes.map(({ route_id: id }) => id), - ["request_replay", "routes"], - "Replay route IDs", - context, - ); - assertUnique( - scenario.request_replay.routes.map( - ({ method, request }) => - `${method} ${request.url}?${request.query - .map(({ name, value }) => - value.source === "secret" - ? `${name}=\${secret:${value.secret_id}}` - : `${name}=${value.value}`, - ) - .join("&")}`, - ), - ["request_replay", "routes"], - "Replay request matchers", - context, - ); - const references: string[] = []; - scenario.request_replay.routes.forEach((route, routeIndex) => { - assertAllowedDestination( - route.request, - allowedOrigins, - ["request_replay", "routes", routeIndex, "request"], - context, - ); - references.push(...destinationSecretReferences(route.request)); - if (route.response.kind === "redirect") { - assertAllowedDestination( - route.response.destination, - allowedOrigins, - ["request_replay", "routes", routeIndex, "response", "destination"], - context, - ); - references.push( - ...destinationSecretReferences(route.response.destination), - ); - return; - } - assertUnique( - route.response.headers.map(({ name }) => name.toLowerCase()), - ["request_replay", "routes", routeIndex, "response", "headers"], - "Replay response header names", - context, - ); - route.response.headers.forEach((header, headerIndex) => { - if (FORBIDDEN_REPLAY_HEADERS.has(header.name)) - addIssue( - context, - [ - "request_replay", - "routes", - routeIndex, - "response", - "headers", - headerIndex, - ], - `Replay header ${header.name} must be modeled by the provider`, - ); - references.push(...secretReferencesInValue(header.value)); - }); - references.push(...secretReferencesInValue(route.response.body)); - }); - return references; -}; - const validateSecretReferences = ( scenario: ScenarioShape, references: readonly string[], @@ -236,17 +114,6 @@ const validateBrowserScenario = ( scenario: ScenarioShape, context: z.RefinementCtx, ): void => { - const allowedOrigins = new Set( - scenario.allowed_origins.length > 0 - ? scenario.allowed_origins - : [originFor(scenario.start_url)], - ); - assertAllowedDestination( - scenario.start_url, - allowedOrigins, - ["start_url"], - context, - ); assertUnique( scenario.actions.map(({ step_id: id }) => id), ["actions"], @@ -267,28 +134,13 @@ const validateBrowserScenario = ( ); const references = scenario.actions.flatMap(actionSecretReferences); - for (const [index, action] of scenario.actions.entries()) - if (action.action === "goto") - assertAllowedDestination( - action.destination, - allowedOrigins, - ["actions", index, "destination"], - context, - ); references.push(...destinationSecretReferences(scenario.start_url)); - references.push(...validateStorage(scenario, allowedOrigins, context)); - references.push(...validateRequestReplay(scenario, allowedOrigins, context)); + references.push(...validateStorage(scenario)); validateSecretReferences(scenario, references, context); }; /** Strict provider-neutral contract for one controlled browser scenario. */ -export const browserScenarioSchema = browserScenarioInputSchema - .superRefine(validateBrowserScenario) - .transform((scenario) => ({ - ...scenario, - allowed_origins: - scenario.allowed_origins.length > 0 - ? scenario.allowed_origins - : [originFor(scenario.start_url)], - })); +export const browserScenarioSchema = browserScenarioInputSchema.superRefine( + validateBrowserScenario, +); export type BrowserScenario = z.infer; diff --git a/src/domain/browserScenarioCapture.test.ts b/src/domain/browserScenarioCapture.test.ts index 2de0b0bdc..d093f21ca 100644 --- a/src/domain/browserScenarioCapture.test.ts +++ b/src/domain/browserScenarioCapture.test.ts @@ -141,12 +141,8 @@ it("accepts complete storage, history, and text artifacts beyond former caps", ( expect(parsed.success).toBe(true); }); -it("accepts complete scenario output beyond former string and origin caps", () => { +it("accepts complete scenario output beyond former string caps", () => { const longText = "detail".repeat(1_000); - const origins = Array.from( - { length: 33 }, - (_, index) => `https://site-${index}.example.test`, - ); const step = (index: number) => ({ step_index: index, step_id: longText, @@ -183,7 +179,6 @@ it("accepts complete scenario output beyond former string and origin caps", () = }, scenario: { start_origin: longText, - allowed_origins: origins, action_count: 1, secret_references: [longText], }, @@ -199,7 +194,6 @@ it("accepts complete scenario output beyond former string and origin caps", () = limitations: Array.from({ length: 65 }, () => longText), }); - expect(parsed.scenario.allowed_origins).toHaveLength(33); expect(parsed.steps[0]?.step_id).toBe(longText); expect(parsed.limitations).toHaveLength(65); }); diff --git a/src/domain/browserScenarioCapture.ts b/src/domain/browserScenarioCapture.ts index 5f2c261fb..3be289da0 100644 --- a/src/domain/browserScenarioCapture.ts +++ b/src/domain/browserScenarioCapture.ts @@ -33,7 +33,6 @@ export const browserScenarioCaptureSchema = z }), scenario: z.strictObject({ start_origin: z.string().min(1), - allowed_origins: z.array(z.string().min(1)).min(1), action_count: z.number().int().min(1), secret_references: z.array(z.string().min(1)), }), diff --git a/src/domain/browserScenarioDiff.test.ts b/src/domain/browserScenarioDiff.test.ts index 290d7e1f5..b054695ef 100644 --- a/src/domain/browserScenarioDiff.test.ts +++ b/src/domain/browserScenarioDiff.test.ts @@ -344,7 +344,6 @@ const scenarioCapture = ( }, scenario: { start_origin: "https://app.example.test", - allowed_origins: ["https://app.example.test"], action_count: 1, secret_references: [], }, diff --git a/src/domain/browserScenarioDiff.ts b/src/domain/browserScenarioDiff.ts index c8f1f370d..83cb8e894 100644 --- a/src/domain/browserScenarioDiff.ts +++ b/src/domain/browserScenarioDiff.ts @@ -266,9 +266,7 @@ const captureContextsMatch = ( ): boolean => before.browser.product === after.browser.product && before.browser.version === after.browser.version && - before.scenario.start_origin === after.scenario.start_origin && - digestCanonicalJson([...before.scenario.allowed_origins].sort()) === - digestCanonicalJson([...after.scenario.allowed_origins].sort()); + before.scenario.start_origin === after.scenario.start_origin; interface CompareStepArtifactsInput { readonly beforeCapture: BrowserScenarioCapture; diff --git a/src/domain/browserScenarioValues.ts b/src/domain/browserScenarioValues.ts index ba52009af..488b1347c 100644 --- a/src/domain/browserScenarioValues.ts +++ b/src/domain/browserScenarioValues.ts @@ -1,7 +1,6 @@ import { z } from "zod"; import { - browserAllowedOriginsSchema, browserEndpointSchema, browserOriginSchema, } from "./browserObservation.js"; @@ -255,58 +254,6 @@ export const browserScenarioStorageSchema = z "Optional initial cookies, local storage, or session storage. Defaults to empty; every supplied value and origin must be declared and within the allowed origins.", ); -const headerNameSchema = z - .string() - .min(1) - .regex(/^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/u) - .transform((value) => value.toLowerCase()); - -const replayHeaderSchema = z.strictObject({ - name: headerNameSchema, - value: browserScenarioValueSchema, -}); - -const replayResponseSchema = z.discriminatedUnion("kind", [ - z.strictObject({ - kind: z.literal("response"), - status: z.number().int().min(100).max(599), - headers: z.array(replayHeaderSchema).default([]), - body: browserScenarioValueSchema.optional(), - }), - z.strictObject({ - kind: z.literal("redirect"), - status: z.union([ - z.literal(301), - z.literal(302), - z.literal(303), - z.literal(307), - z.literal(308), - ]), - destination: browserScenarioUrlSchema, - }), -]); - -const replayRouteSchema = z.strictObject({ - route_id: scenarioIdentifierSchema, - method: z.enum(["GET", "HEAD", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"]), - request: browserScenarioUrlSchema, - response: replayResponseSchema, -}); - -export const browserScenarioRequestReplaySchema = z - .discriminatedUnion("mode", [ - z.strictObject({ mode: z.literal("disabled") }), - z.strictObject({ - mode: z.literal("exact"), - unmatched: z.enum(["abort", "passthrough-declared-origins"]), - routes: z.array(replayRouteSchema).min(1), - }), - ]) - .default({ mode: "disabled" }) - .describe( - "Optional exact request replay. Defaults to disabled; replay routes and unmatched-request behavior must be explicitly declared when enabled.", - ); - export const browserScenarioSecretSchema = z.strictObject({ secret_id: scenarioIdentifierSchema, environment_variable: z @@ -350,5 +297,3 @@ export const browserScenarioCaptureSchema = z .describe( "Optional retained artifacts and event families. Defaults to only a final sanitized URL; request screenshots, DOM, accessibility, history, storage, and event capture explicitly.", ); - -export const browserScenarioAllowedOriginsSchema = browserAllowedOriginsSchema; diff --git a/src/domain/changedBehavior.test.ts b/src/domain/changedBehavior.test.ts index 39e8d171a..d47660f07 100644 --- a/src/domain/changedBehavior.test.ts +++ b/src/domain/changedBehavior.test.ts @@ -60,7 +60,7 @@ const processResult = ( terminal: "unchanged" | "changed" | "unknown" | "truncated"; interaction: "unchanged" | "changed" | "unknown" | "truncated"; exit: "unchanged" | "changed" | "unknown" | "truncated"; - shim: "unchanged" | "changed" | "unknown" | "truncated"; + process: "unchanged" | "changed" | "unknown" | "truncated"; }> = {}, ): JsonValue => ({ status: overrides.status ?? "unchanged", @@ -68,9 +68,7 @@ const processResult = ( interaction: overrides.interaction ?? "unchanged", exit: overrides.exit ?? "unchanged", filesystem: "unchanged", - protocol: "unchanged", - process: "unchanged", - shim: overrides.shim ?? "unchanged", + process: overrides.process ?? "unchanged", first_divergence: overrides.status === "changed" ? { @@ -133,13 +131,13 @@ describe("changed behavior", () => { expect(result.behavior_status).toBe("observed_unchanged"); }); - it("reports interaction and shim-only process changes", () => { + it("reports interaction and process changes", () => { const evidence = comparison( "compare_process_captures", processResult({ status: "changed", interaction: "changed", - shim: "changed", + process: "changed", }), ); @@ -152,7 +150,7 @@ describe("changed behavior", () => { dimension: "interaction", scope: "runtime", }), - expect.objectContaining({ dimension: "shim", scope: "protocol" }), + expect.objectContaining({ dimension: "process", scope: "runtime" }), ]), }, }); diff --git a/src/domain/changedBehavior.ts b/src/domain/changedBehavior.ts index 5c6bb08ca..5e7b76112 100644 --- a/src/domain/changedBehavior.ts +++ b/src/domain/changedBehavior.ts @@ -250,9 +250,7 @@ const processFindings = (evidence: Evidence): Finding[] => { ["interaction", result.interaction, "runtime"], ["exit", result.exit, "runtime"], ["filesystem", result.filesystem, "resource"], - ["protocol", result.protocol, "protocol"], ["process", result.process, "runtime"], - ["shim", result.shim, "protocol"], ] as const; return dimensions.flatMap(([dimension, status, scope]) => status === "unchanged" diff --git a/src/domain/errors.ts b/src/domain/errors.ts index cc6e87bfc..4e2cd3e3a 100644 --- a/src/domain/errors.ts +++ b/src/domain/errors.ts @@ -44,7 +44,6 @@ const ANALYSIS_ERROR_TAGS = [ "ConfigurationError", "NoBinaryOpenError", "BinaryTargetError", - "ReplayPlanStaleError", ] as const; /** Stable tag for an expected analysis failure. */ @@ -487,8 +486,7 @@ export interface AnalysisErrorProjection | "revision_conflict" | "configuration_invalid" | "target_unavailable" - | "execution_failure" - | "plan_stale"; + | "execution_failure"; readonly category: | "invalid_input" | "unsupported_provider" @@ -505,15 +503,3 @@ export interface AnalysisErrorProjection }>; readonly details?: Readonly>; } - -/** Replay commitment no longer matches the immediately rebuilt plan. */ -export class ReplayPlanStaleError extends AnalysisError { - readonly _tag = "ReplayPlanStaleError" as const; - - constructor( - readonly expectedDigest: string, - readonly actualDigest: string, - ) { - super("Controlled replay plan changed before execution"); - } -} diff --git a/src/domain/javascriptExportInstrumentation.test.ts b/src/domain/javascriptExportInstrumentation.test.ts deleted file mode 100644 index 0ff640393..000000000 --- a/src/domain/javascriptExportInstrumentation.test.ts +++ /dev/null @@ -1,99 +0,0 @@ -import { createHash } from "node:crypto"; - -import { describe, expect, it } from "vitest"; - -import { instrumentJavaScriptExport } from "./javascriptExportInstrumentation.js"; - -const encode = (value: string): Uint8Array => new TextEncoder().encode(value); -const sha256 = (value: Uint8Array): string => - createHash("sha256").update(value).digest("hex"); - -describe("JavaScript export instrumentation", () => { - it("retains a long caller-provided artifact path in the manifest", () => { - const source = encode("const value = 1;"); - const path = `/${"deep/".repeat(1_000)}app.js`; - const output = instrumentJavaScriptExport(source, { - artifact_path: path, - artifact_sha256: sha256(source), - selection: { - byte_start: 14, - byte_end: 15, - selected_sha256: sha256(encode("1")), - export_name: "value", - }, - }); - expect(output.manifest.artifact_path).toBe(path); - }); - - it.each([ - [ - "plain", - "const hidden = (value) => value.trim();", - "(value) => value.trim()", - ], - ["minified", "const x=a=>a+1,y=2;", "a=>a+1"], - [ - "bundle", - "(()=>{const registry={7:(m)=>m.exports=(x)=>x*2};globalThis.r=registry})()", - "(x)=>x*2", - ], - ])( - "deterministically exposes one exact %s expression", - (_name, text, selectedText) => { - const source = encode(text); - const original = source.slice(); - const start = text.indexOf(selectedText); - const selected = encode(selectedText); - const input = { - artifact_path: "/approved/app.js", - artifact_sha256: sha256(source), - selection: { - byte_start: start, - byte_end: start + selected.byteLength, - selected_sha256: sha256(selected), - export_name: "selected", - }, - }; - - const first = instrumentJavaScriptExport(source, input); - const second = instrumentJavaScriptExport(source, input); - - expect(first).toEqual(second); - expect(source).toEqual(original); - expect(first.manifest).toMatchObject({ - original_sha256: sha256(source), - instrumented_sha256: sha256(first.bytes), - output_format: "commonjs-factory", - inserted_ranges: [ - { purpose: "factory-prefix" }, - { purpose: "export-binding" }, - { purpose: "factory-suffix" }, - ], - }); - }, - ); - - it("rejects stale artifacts and ambiguous caller-selected bytes", () => { - const source = encode("const hidden = () => 1;"); - const input = { - artifact_path: "/approved/app.js", - artifact_sha256: "0".repeat(64), - selection: { - byte_start: 15, - byte_end: 22, - selected_sha256: "1".repeat(64), - export_name: "hidden", - }, - }; - - expect(() => instrumentJavaScriptExport(source, input)).toThrow( - /artifact digest mismatch/u, - ); - expect(() => - instrumentJavaScriptExport(source, { - ...input, - artifact_sha256: sha256(source), - }), - ).toThrow(/selection digest mismatch/u); - }); -}); diff --git a/src/domain/javascriptExportInstrumentation.ts b/src/domain/javascriptExportInstrumentation.ts deleted file mode 100644 index da962159b..000000000 --- a/src/domain/javascriptExportInstrumentation.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { createHash } from "node:crypto"; - -import { z } from "zod"; -import { digestSchema } from "./../domain/digests.js"; - -export const javascriptExportInstrumentationInputSchema = z.strictObject({ - artifact_path: z.string().min(1), - artifact_sha256: digestSchema, - selection: z.strictObject({ - byte_start: z.number().int().min(0), - byte_end: z.number().int().min(1), - selected_sha256: digestSchema, - export_name: z.string().regex(/^[A-Za-z_$][A-Za-z0-9_$]{0,199}$/u), - }), -}); - -export const javascriptExportTransformationManifestSchema = z.strictObject({ - kind: z.literal("commonjs-factory-export-v1"), - artifact_path: z.string().min(1), - original_sha256: digestSchema, - original_byte_length: z.number().int().min(0), - instrumented_sha256: digestSchema, - instrumented_byte_length: z.number().int().min(0), - selected_range: z.strictObject({ - byte_start: z.number().int().min(0), - byte_end: z.number().int().min(1), - selected_sha256: digestSchema, - }), - inserted_ranges: z - .array( - z.strictObject({ - byte_start: z.number().int().min(0), - byte_end: z.number().int().min(1), - inserted_sha256: digestSchema, - purpose: z.enum(["factory-prefix", "export-binding", "factory-suffix"]), - }), - ) - .length(3), - output_format: z.literal("commonjs-factory"), - source_map: z.literal(null), -}); - -export interface JavaScriptExportInstrumentation { - readonly bytes: Uint8Array; - readonly manifest: z.infer< - typeof javascriptExportTransformationManifestSchema - >; -} - -/** Instrument one exact UTF-8 expression range without mutating source bytes. */ -export const instrumentJavaScriptExport = ( - source: Uint8Array, - rawInput: unknown, -): JavaScriptExportInstrumentation => { - const input = javascriptExportInstrumentationInputSchema.parse(rawInput); - if (sha256(source) !== input.artifact_sha256) - throw new TypeError("JavaScript instrumentation artifact digest mismatch"); - const { byte_start: start, byte_end: end } = input.selection; - if (end <= start || end > source.byteLength) - throw new TypeError( - "JavaScript instrumentation selection is out of bounds", - ); - const selected = source.slice(start, end); - if (sha256(selected) !== input.selection.selected_sha256) - throw new TypeError("JavaScript instrumentation selection digest mismatch"); - decodeUtf8(source); - decodeUtf8(selected); - - const prefix = encode("function(module, exports, require) {\n"); - const binding = encode( - `\nmodule.exports[${JSON.stringify(input.selection.export_name)}] = (${decodeUtf8(selected)});\n`, - ); - const suffix = encode("}\n"); - const bytes = concatenate([prefix, source, binding, suffix]); - const bindingStart = prefix.byteLength + source.byteLength; - const suffixStart = bindingStart + binding.byteLength; - const manifest = javascriptExportTransformationManifestSchema.parse({ - kind: "commonjs-factory-export-v1", - artifact_path: input.artifact_path, - original_sha256: input.artifact_sha256, - original_byte_length: source.byteLength, - instrumented_sha256: sha256(bytes), - instrumented_byte_length: bytes.byteLength, - selected_range: { - byte_start: start, - byte_end: end, - selected_sha256: input.selection.selected_sha256, - }, - inserted_ranges: [ - range(0, prefix, "factory-prefix"), - range(bindingStart, binding, "export-binding"), - range(suffixStart, suffix, "factory-suffix"), - ], - output_format: "commonjs-factory", - source_map: null, - }); - return { bytes, manifest }; -}; - -const range = ( - start: number, - bytes: Uint8Array, - purpose: "factory-prefix" | "export-binding" | "factory-suffix", -) => ({ - byte_start: start, - byte_end: start + bytes.byteLength, - inserted_sha256: sha256(bytes), - purpose, -}); - -const encode = (value: string): Uint8Array => new TextEncoder().encode(value); - -const decodeUtf8 = (value: Uint8Array): string => - new TextDecoder("utf-8", { fatal: true }).decode(value); - -const concatenate = (values: readonly Uint8Array[]): Uint8Array => { - const output = new Uint8Array( - values.reduce((total, value) => total + value.byteLength, 0), - ); - let offset = 0; - for (const value of values) { - output.set(value, offset); - offset += value.byteLength; - } - return output; -}; - -const sha256 = (value: Uint8Array): string => - createHash("sha256").update(value).digest("hex"); diff --git a/src/domain/javascriptExportShapeComparison.ts b/src/domain/javascriptExportShapeComparison.ts index be64195c4..38e78eecc 100644 --- a/src/domain/javascriptExportShapeComparison.ts +++ b/src/domain/javascriptExportShapeComparison.ts @@ -71,11 +71,6 @@ export const compareJavaScriptExportShapes = ( coverage, evidence_links: evidenceLinks, limitations, - runtime_validation: { - recommended_tool: "run_controlled_replay" as const, - automatically_started: false as const, - required_for: "runtime-semantics" as const, - }, }; return javaScriptExportShapeComparisonResultSchema.parse({ ...semantic, @@ -181,7 +176,7 @@ const comparisonLimitations = ( "Return shapes are inferred from inert syntax and do not prove runtime behavior.", "Return variants are paired only by unique exact literal discriminants, never by source order.", "Dynamic values, incomplete object coverage, and ambiguous variants remain unknown.", - "Controlled replay is recommended separately for runtime semantics and was not started.", + "This static comparison cannot establish runtime semantics; run behavioral probes directly against the relevant application versions when that evidence is required.", ...left.limitations, ...right.limitations, ...(status === "truncated" diff --git a/src/domain/javascriptExportShapeComparisonSchemas.test.ts b/src/domain/javascriptExportShapeComparisonSchemas.test.ts index 7c22af6c2..acb1fe1f1 100644 --- a/src/domain/javascriptExportShapeComparisonSchemas.test.ts +++ b/src/domain/javascriptExportShapeComparisonSchemas.test.ts @@ -152,11 +152,6 @@ it("accepts complete candidate and change inventories without page ceilings", () }, evidence_links: [evidenceId, `ev_${"c".repeat(64)}`], limitations: [], - runtime_validation: { - recommended_tool: "run_controlled_replay", - automatically_started: false, - required_for: "runtime-semantics", - }, }).changes, ).toHaveLength(10_001); }); diff --git a/src/domain/javascriptExportShapeComparisonSchemas.ts b/src/domain/javascriptExportShapeComparisonSchemas.ts index 075fabd67..4048eda7d 100644 --- a/src/domain/javascriptExportShapeComparisonSchemas.ts +++ b/src/domain/javascriptExportShapeComparisonSchemas.ts @@ -284,11 +284,6 @@ export const javaScriptExportShapeComparisonResultSchema = z.strictObject({ }), evidence_links: z.array(evidenceIdSchema).length(2), limitations: z.array(textSchema), - runtime_validation: z.strictObject({ - recommended_tool: z.literal("run_controlled_replay"), - automatically_started: z.literal(false), - required_for: z.literal("runtime-semantics"), - }), }); export type ProjectedExportReturnShapes = z.output< diff --git a/src/domain/javascriptReplay.ts b/src/domain/javascriptReplay.ts deleted file mode 100644 index 28a2d9241..000000000 --- a/src/domain/javascriptReplay.ts +++ /dev/null @@ -1,420 +0,0 @@ -import { z } from "zod"; - -import { evidenceEnvelopeSchema } from "./evidence.js"; -import { digestSchema } from "./../domain/digests.js"; - -const absolutePathSchema = z.string().startsWith("/"); -const aliasSchema = z - .string() - .min(1) - .regex(/^[A-Za-z0-9_./:@-]+$/u); - -const replayModuleSchema = z - .object({ - alias: aliasSchema, - path: absolutePathSchema, - format: z.enum(["esm", "commonjs-factory"]), - role: z.enum(["module", "stub"]).default("module"), - dependencies: z.record(z.string().min(1), aliasSchema).default({}), - }) - .strict(); - -const replaySideSchema = z - .object({ - modules: z.array(replayModuleSchema).min(1), - entry_alias: aliasSchema, - entry_export: z.string().min(1).default("default"), - }) - .strict(); - -const explicitCaseSchema = z - .object({ - case_id: z.string().min(1), - arguments: z.array(z.json()), - }) - .strict(); - -const generatorSchema = z - .object({ - preset: z.enum([ - "parser-boundaries", - "sanitizer-boundaries", - "clipboard-boundaries", - ]), - seed: z.number().int().min(0).max(0xffff_ffff), - count: z.number().int().safe().min(1), - }) - .strict(); - -const replayLimitsSchema = z - .object({ - wall_time_ms: z.number().int().safe().min(1).default(3_000), - memory_bytes: z - .number() - .int() - .safe() - .positive() - .default(128 * 1024 * 1024), - tasks: z.number().int().safe().min(1).default(8), - cpu_quota_percent: z.number().int().safe().min(1).default(50), - tmpfs_bytes: z - .number() - .int() - .safe() - .min(1) - .default(16 * 1024 * 1024), - module_bytes: z - .number() - .int() - .safe() - .min(1) - .default(4 * 1024 * 1024), - input_bytes: z - .number() - .int() - .safe() - .min(1) - .default(256 * 1024), - protocol_bytes: z - .number() - .int() - .safe() - .min(1) - .default(16 * 1024 * 1024), - output_bytes: z - .number() - .int() - .safe() - .min(1) - .default(512 * 1024), - stderr_bytes: z - .number() - .int() - .safe() - .min(0) - .default(32 * 1024), - result_depth: z.number().int().safe().min(1).default(16), - result_nodes: z.number().int().safe().min(1).default(10_000), - }) - .strict(); - -const determinismSchema = z - .object({ - clock_iso: z.iso.datetime().default("2000-01-01T00:00:00.000Z"), - random_seed: z.number().int().min(0).max(0xffff_ffff).default(0), - locale: z.literal("en-US").default("en-US"), - timezone: z.literal("UTC").default("UTC"), - platform: z.literal("linux").default("linux"), - }) - .strict(); - -const controlledReplayCommonInputShape = { - left: replaySideSchema, - right: replaySideSchema.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, - include_sources: z.boolean().default(false), - }) - .optional(), -} as const; - -/** Parse a replay request that can only construct a plan. */ -export const controlledReplayPlanInputSchema = z.strictObject({ - ...controlledReplayCommonInputShape, - cases: z.array(explicitCaseSchema).default([]), - generator: generatorSchema.optional(), - mode: z.literal("plan"), -}); - -/** Parse a replay request carrying the digest for one exact plan. */ -export const controlledReplayExecutionInputSchema = z.strictObject({ - ...controlledReplayCommonInputShape, - cases: z.array(explicitCaseSchema).default([]), - generator: generatorSchema.optional(), - mode: z.literal("execute"), - plan_digest: digestSchema, -}); - -const replayWithExplicitCases = (shape: Shape) => - z.strictObject({ - ...shape, - cases: z.array(explicitCaseSchema).min(1), - }); - -const replayWithGeneratedCases = (shape: Shape) => - z.strictObject({ - ...shape, - cases: z.array(explicitCaseSchema).default([]), - generator: generatorSchema, - }); - -/** Parse replay requests with explicit cases or a generated case preset. */ -export const controlledReplayInputSchema = z.union([ - replayWithExplicitCases({ - ...controlledReplayCommonInputShape, - mode: z.literal("plan"), - }), - replayWithGeneratedCases({ - ...controlledReplayCommonInputShape, - mode: z.literal("plan"), - }), - replayWithExplicitCases({ - ...controlledReplayCommonInputShape, - mode: z.literal("execute"), - plan_digest: digestSchema, - }), - replayWithGeneratedCases({ - ...controlledReplayCommonInputShape, - mode: z.literal("execute"), - plan_digest: digestSchema, - }), -]); - -const moduleCommitmentSchema = z - .object({ - alias: aliasSchema, - canonical_path: z.string().min(1), - format: z.enum(["esm", "commonjs-factory"]), - role: z.enum(["module", "stub"]), - byte_count: z.number().int().min(0), - sha256: digestSchema, - dependencies: z.record(z.string(), aliasSchema), - }) - .strict(); - -const runtimeIdentitySchema = z - .object({ - path: z.string().min(1), - version: z.string().min(1), - sha256: digestSchema, - }) - .strict(); - -const runtimeFileIdentitySchema = z - .object({ - source_path: z.string().min(1), - destination_path: z.string().min(1), - sha256: digestSchema, - }) - .strict(); - -const replayPlanSchema = z - .object({ - plan_digest: digestSchema, - policy_version: z.literal("linux-bwrap-systemd-v1"), - policy_sha256: digestSchema, - network: z.literal("none"), - filesystem: z - .object({ - host_writes: z.literal(false), - private_tmpfs_bytes: z.number().int().nonnegative(), - }) - .strict(), - runtime: z - .object({ - executable: runtimeIdentitySchema, - worker: runtimeIdentitySchema, - read_only_files: z.array(runtimeFileIdentitySchema).min(1), - }) - .strict(), - sandbox: z - .object({ - bubblewrap: runtimeIdentitySchema, - systemd_run: runtimeIdentitySchema, - systemctl: runtimeIdentitySchema, - shell: runtimeIdentitySchema, - seccomp_sha256: digestSchema, - }) - .strict(), - left: z - .object({ - modules: z.array(moduleCommitmentSchema), - entry_alias: aliasSchema, - entry_export: z.string(), - }) - .strict(), - right: z - .object({ - modules: z.array(moduleCommitmentSchema), - entry_alias: aliasSchema, - entry_export: z.string(), - }) - .strict() - .optional(), - cases: z.array( - z - .object({ - case_id: z.string(), - arguments: z.array(z.json()), - sha256: digestSchema, - }) - .strict(), - ), - determinism: determinismSchema, - limits: replayLimitsSchema, - effects: z.array(z.string()), - reproducer_export: z - .object({ - path: z.string().min(1), - include_sources: z.boolean(), - }) - .strict() - .nullable(), - }) - .strict(); - -const replayOutcomeFacts = { - case_id: z.string(), - input_sha256: digestSchema, -} as const; -const replayExceptionSchema = z - .object({ - 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({ - plan_digest: digestSchema, - outcomes: z.array(replayOutcomeSchema), - comparison: z - .array( - z - .object({ - case_id: z.string(), - status: z.enum(["equal", "changed", "unknown"]), - left_index: z.number().int(), - right_index: z.number().int(), - }) - .strict(), - ) - .optional(), - stderr: z.string(), - termination: z.enum([ - "completed", - "timeout", - "oom", - "crash", - "cancelled", - "protocol_error", - ]), - cleanup: z - .object({ - state: z.enum(["complete", "incomplete"]), - residual_resources: z.array(z.string()), - }) - .strict(), - limitations: z.array(z.string()), - reproducer: z - .discriminatedUnion("state", [ - z - .object({ - state: z.literal("written"), - path: z.string(), - sha256: digestSchema, - }) - .strict(), - z - .object({ - state: z.literal("failed"), - path: z.string(), - error: z.string(), - }) - .strict(), - ]) - .nullable(), - }) - .strict(); - -export const replayEvidenceSchema = evidenceEnvelopeSchema - .omit({ normalized_result: true }) - .extend({ normalized_result: replayExecutionResultSchema }); - -/** 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.output - | z.output; -export type ControlledReplayExecutionInput = z.output< - typeof controlledReplayExecutionInputSchema ->; -export type ControlledReplayExecutionOutput = z.infer< - typeof controlledReplayExecutionOutputSchema ->; -export type ReplayPlan = z.infer; -export type ReplayExecutionResult = z.infer; diff --git a/src/domain/managedRuntimeCorrelation.ts b/src/domain/managedRuntimeCorrelation.ts deleted file mode 100644 index 1df31c8f0..000000000 --- a/src/domain/managedRuntimeCorrelation.ts +++ /dev/null @@ -1,207 +0,0 @@ -import { createHash } from "node:crypto"; - -import canonicalize from "canonicalize"; -import { z } from "zod"; - -import { evidenceSchema, parseEvidence } from "./evidence.js"; -import { - cliMetadataGuidSchema, - managedMemberInspectionSchema, -} from "./managedArtifact.js"; -import type { JsonValue } from "./jsonValue.js"; -import { digestSchema } from "./../domain/digests.js"; -import { prefixedDigestSchema } from "./../domain/digests.js"; - -const evidenceIdSchema = prefixedDigestSchema("ev"); -const tokenSchema = z.string().regex(/^0x[0-9a-f]{8}$/u); -const boundedTextSchema = z.string().min(1); - -const managedRuntimeEffectSchema = z.enum([ - "attach", - "load", - "debugger", - "reflection", - "instrumentation", -]); - -const managedRuntimeHostSchema = z.strictObject({ - os: z.enum(["linux", "macos", "windows"]), - clr_family: z.enum(["dotnet", "dotnet-framework", "mono", "unknown"]), - architecture: z.enum(["x86", "x86_64", "arm", "arm64"]), -}); - -const managedRuntimeBoundsSchema = z.strictObject({ - timeout_ms: z.number().int().min(1).default(5_000), - max_threads: z.number().int().min(1).default(32), - max_output_bytes: z.number().int().min(0).default(65_536), - allow_network: z.boolean().default(false), - allow_ui: z.boolean().default(false), -}); - -export const managedRuntimeCorrelationInputSchema = z.strictObject({ - static_members: evidenceSchema, - method: z.strictObject({ - token: tokenSchema, - signature_sha256: digestSchema, - normalized_il_sha256: digestSchema.nullable(), - }), - requested_effect: managedRuntimeEffectSchema, - host: managedRuntimeHostSchema, - bounds: managedRuntimeBoundsSchema.default({ - timeout_ms: 5_000, - max_threads: 32, - max_output_bytes: 65_536, - allow_network: false, - allow_ui: false, - }), -}); - -export const managedRuntimeCorrelationResultSchema = z.strictObject({ - correlation_id: prefixedDigestSchema("mrc"), - phase: z.literal("correlation-plan"), - executed: z.literal(false), - static_observation: z.strictObject({ - evidence_id: evidenceIdSchema, - artifact_sha256: digestSchema, - artifact_path: z.string().min(1), - byte_length: z.number().int().min(0), - module_name: z.string().nullable(), - mvid: cliMetadataGuidSchema.nullable(), - metadata_status: z.enum(["absent", "complete", "partial", "malformed"]), - }), - method_lock: z.strictObject({ - token: tokenSchema, - declaring_type: z.string().nullable(), - name: z.string(), - signature_sha256: digestSchema, - normalized_il_sha256: digestSchema.nullable(), - body_sha256: digestSchema.nullable(), - il_size: z.number().int().min(0), - body_status: z.enum([ - "present", - "partial", - "absent", - "malformed", - "too-large", - ]), - exact_build_required: z.literal(true), - }), - requested_runtime: z.strictObject({ - effect: managedRuntimeEffectSchema, - host: managedRuntimeHostSchema, - executable_path: z.string().min(1), - network: z.enum(["none", "host"]), - confinement: z.literal("not-established"), - }), - effect_taxonomy: z.strictObject({ - attaches_process: z.boolean(), - loads_target: z.boolean(), - uses_debugger: z.boolean(), - uses_reflection: z.boolean(), - instruments_code: z.boolean(), - invokes_target_code: z.literal(false), - }), - bounds: managedRuntimeBoundsSchema, - unsupported_until_executor_exists: z.literal(true), - evidence_links: z.array(evidenceIdSchema).length(1), - limitations: z.array(boundedTextSchema), -}); - -export type ManagedRuntimeCorrelationInput = z.infer< - typeof managedRuntimeCorrelationInputSchema ->; -export type ManagedRuntimeCorrelationResult = z.infer< - typeof managedRuntimeCorrelationResultSchema ->; - -const sha256 = (value: JsonValue): string => { - const serialized = canonicalize(value); - if (serialized === undefined) - throw new TypeError("Managed runtime correlation canonicalization failed"); - return createHash("sha256").update(serialized).digest("hex"); -}; - -/** Authenticate static managed Evidence and build a non-executing runtime plan. */ -export const planManagedRuntimeCorrelation = ( - input: ManagedRuntimeCorrelationInput, - executablePath: string, -): ManagedRuntimeCorrelationResult => { - const staticEvidence = parseEvidence(input.static_members); - if (staticEvidence.operation !== "inspect_managed_members") - throw new TypeError("Evidence operation is not inspect_managed_members"); - const members = managedMemberInspectionSchema.parse( - staticEvidence.normalized_result, - ); - const method = members.methods.find( - (item) => - item.token === input.method.token && - item.signature.raw_sha256 === input.method.signature_sha256 && - item.body.status === "present" && - item.body.normalized_il_sha256 !== null && - input.method.normalized_il_sha256 !== null && - item.body.normalized_il_sha256 === input.method.normalized_il_sha256, - ); - if (method === undefined) - throw new TypeError( - "Requested method lock does not match a static managed member observation", - ); - const withoutId = { - phase: "correlation-plan" as const, - executed: false as const, - static_observation: { - evidence_id: staticEvidence.evidence_id, - artifact_sha256: members.artifact.sha256, - artifact_path: members.artifact.path, - byte_length: members.artifact.byte_length, - module_name: members.module?.name ?? null, - mvid: members.module?.mvid ?? null, - metadata_status: members.metadata.status, - }, - method_lock: { - token: method.token, - declaring_type: method.declaring_type, - name: method.name, - signature_sha256: method.signature.raw_sha256, - normalized_il_sha256: method.body.normalized_il_sha256, - body_sha256: method.body.il_sha256, - il_size: method.body.il_size, - body_status: method.body.status, - exact_build_required: true as const, - }, - requested_runtime: { - effect: input.requested_effect, - host: input.host, - executable_path: executablePath, - network: input.bounds.allow_network - ? ("host" as const) - : ("none" as const), - confinement: "not-established" as const, - }, - effect_taxonomy: effectTaxonomy(input.requested_effect), - bounds: input.bounds, - unsupported_until_executor_exists: true as const, - evidence_links: [staticEvidence.evidence_id], - limitations: [ - "This operation admits and records a runtime-correlation plan only; it did not attach, load, debug, reflect, instrument, invoke, or execute target code.", - "Runtime agreement would be a separate runtime observation and would not retroactively turn static inference into a byte observation.", - "The exact artifact SHA-256, MVID, method signature, and normalized IL shape must match before any future executor can run.", - "The selected runtime executable and host prerequisites are unverified because planning does not launch the runtime.", - "No filesystem, network, or UI confinement was established; the requested bounds describe a future executor configuration only.", - ], - }; - return managedRuntimeCorrelationResultSchema.parse({ - ...withoutId, - correlation_id: `mrc_${sha256(withoutId)}`, - }); -}; - -const effectTaxonomy = ( - effect: ManagedRuntimeCorrelationInput["requested_effect"], -): ManagedRuntimeCorrelationResult["effect_taxonomy"] => ({ - attaches_process: effect === "attach", - loads_target: effect === "load" || effect === "reflection", - uses_debugger: effect === "debugger", - uses_reflection: effect === "reflection", - instruments_code: effect === "instrumentation", - invokes_target_code: false, -}); diff --git a/src/domain/nodeRuntimeCharacterization.ts b/src/domain/nodeRuntimeCharacterization.ts deleted file mode 100644 index 46f3be530..000000000 --- a/src/domain/nodeRuntimeCharacterization.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { z } from "zod"; - -import { - controlledReplayExecutionOutputSchema, - controlledReplayPlanInputSchema, - controlledReplayPlanOutputSchema, -} from "./javascriptReplay.js"; -import { - javascriptExportInstrumentationInputSchema, - javascriptExportTransformationManifestSchema, -} from "./javascriptExportInstrumentation.js"; -import { runtimeCharacterizationPlanSchema } from "./runtimeCharacterization.js"; -import { evidenceRecordSchema } from "./evidence.js"; -import { digestSchema } from "./../domain/digests.js"; - -const nodeCharacterizationExpectedEffectSchema = z.enum([ - "pure", - "observation-only", -]); -const nodeRuntimeCharacterizationPlanSchema = - runtimeCharacterizationPlanSchema.extend({ - expected_effect: nodeCharacterizationExpectedEffectSchema, - }); - -export const nodeCharacterizationPreparationInputSchema = z - .strictObject({ - selected_alias: z.string().min(1), - expected_effect: nodeCharacterizationExpectedEffectSchema, - instrumentation: javascriptExportInstrumentationInputSchema, - replay: controlledReplayPlanInputSchema, - }) - .superRefine((input, context) => { - const selected = input.replay.left.modules.filter( - ({ alias }) => alias === input.selected_alias, - ); - if ( - selected.length !== 1 || - selected[0]?.path !== input.instrumentation.artifact_path || - selected[0]?.format !== "commonjs-factory" - ) - context.addIssue({ - code: "custom", - path: ["selected_alias"], - message: - "Selected alias must identify exactly one commonjs-factory instrumented artifact", - }); - if (input.replay.left.entry_alias !== input.selected_alias) - context.addIssue({ - code: "custom", - path: ["replay", "left", "entry_alias"], - message: "Instrumented alias must be the characterization entry", - }); - if ( - input.replay.left.entry_export !== - input.instrumentation.selection.export_name - ) - context.addIssue({ - code: "custom", - path: ["replay", "left", "entry_export"], - message: "Replay entry export must match the instrumented export", - }); - }); - -export const nodeCharacterizationExecutionInputSchema = z.strictObject({ - plan_sha256: digestSchema.describe( - "SHA-256 content identity of the prepared plan; execution rejects a mismatch.", - ), - preparation: nodeCharacterizationPreparationInputSchema, -}); - -export const nodeCharacterizationPreparationOutputSchema = z.strictObject({ - phase: z.literal("preparation"), - plan: nodeRuntimeCharacterizationPlanSchema, - transformation: javascriptExportTransformationManifestSchema, - transformation_evidence: evidenceRecordSchema, - replay: controlledReplayPlanOutputSchema, -}); - -export const nodeCharacterizationExecutionOutputSchema = z.strictObject({ - phase: z.literal("execution"), - plan: nodeRuntimeCharacterizationPlanSchema, - transformation: javascriptExportTransformationManifestSchema, - transformation_evidence: evidenceRecordSchema, - evidence: evidenceRecordSchema, - replay: controlledReplayExecutionOutputSchema, -}); - -export type NodeCharacterizationPreparationInput = z.infer< - typeof nodeCharacterizationPreparationInputSchema ->; diff --git a/src/domain/processCapture.comparison.test.ts b/src/domain/processCapture.comparison.test.ts index 37bbecaf6..431fef24e 100644 --- a/src/domain/processCapture.comparison.test.ts +++ b/src/domain/processCapture.comparison.test.ts @@ -22,10 +22,6 @@ it("classifies missing observations as unknown and one-sided evidence as added", exit: { code: 0, signal: null, reason: "exited" as const }, process_samples: [], filesystem_checkpoints: emptyCapture().filesystem_checkpoints, - shim_events: [], - protocol_events: [], - replay_transitions: [], - reactive_run: null, files_before: [], files_after: [], filesystem_effects: [], @@ -61,7 +57,6 @@ it("classifies missing observations as unknown and one-sided evidence as added", base, ); expect(unknown.process).toBe("unknown"); - expect(unknown.shim).toBe("unchanged"); expect(unknown.status).toBe("unknown"); }); @@ -102,10 +97,6 @@ it("compares raw terminal chunks even when rendered states agree", () => { exit: { code: 0, signal: null, reason: "exited" as const }, process_samples: [], filesystem_checkpoints: emptyCapture().filesystem_checkpoints, - shim_events: [], - protocol_events: [], - replay_transitions: [], - reactive_run: null, files_before: [], files_after: [], filesystem_effects: [], @@ -146,10 +137,6 @@ it("keeps filesystem evidence unknown when stable snapshots match", () => { exit: { code: 0, signal: null, reason: "exited" as const }, process_samples: [], filesystem_checkpoints: emptyCapture().filesystem_checkpoints, - shim_events: [], - protocol_events: [], - replay_transitions: [], - reactive_run: null, files_before: [], files_after: [], filesystem_effects: [], @@ -169,26 +156,43 @@ it("keeps filesystem evidence unknown when stable snapshots match", () => { expect(comparison.status).toBe("unknown"); const complete = { ...capture, residual_unknowns: [] }; - const transient = compareProcessCaptures(complete, { + const finalFile = { + path: "root_0:created.txt", + type: "file" as const, + mode: 0o644, + size: 4, + sha256: "a".repeat(64), + symlink_target: null, + }; + const changed = compareProcessCaptures(complete, { ...complete, filesystem_checkpoints: [ { name: "before", at_ms: 0, files: [], effects: [], truncated: false }, - { - name: "during_run", - at_ms: 10, - files: [], - effects: [], - truncated: false, - }, { name: "after_settlement", - at_ms: 50, - files: [], - effects: [], + at_ms: 10, + files: [finalFile], + effects: [ + { + path: finalFile.path, + status: "created", + before: null, + after: finalFile, + }, + ], truncated: false, }, ], + files_after: [finalFile], + filesystem_effects: [ + { + path: finalFile.path, + status: "created", + before: null, + after: finalFile, + }, + ], }); - expect(transient.filesystem).toBe("changed"); - expect(transient.status).toBe("changed"); + expect(changed.filesystem).toBe("changed"); + expect(changed.status).toBe("changed"); }); diff --git a/src/domain/processCapture.traceProjection.test.ts b/src/domain/processCapture.traceProjection.test.ts index 8ed946c0e..b6b77917a 100644 --- a/src/domain/processCapture.traceProjection.test.ts +++ b/src/domain/processCapture.traceProjection.test.ts @@ -1,6 +1,5 @@ import { expect, it } from "vitest"; -import { digestProcessCommitment } from "./processCapture.js"; import { compareUnverifiedProcessCaptures as compareProcessCaptures, emptyProcessCapture as emptyCapture, @@ -32,10 +31,6 @@ it("detects changes in normalized process sample metadata", () => { }, ], filesystem_checkpoints: emptyCapture().filesystem_checkpoints, - shim_events: [], - protocol_events: [], - replay_transitions: [], - reactive_run: null, files_before: [], files_after: [], filesystem_effects: [], @@ -65,60 +60,3 @@ it("detects changes in normalized process sample metadata", () => { expect(comparison.process).toBe("changed"); expect(comparison.status).toBe("changed"); }); - -it("compares replay state transitions as protocol evidence", () => { - const replayPlan = { - machine: { - initial_state: "anonymous", - states: [ - { name: "anonymous" }, - { name: "authenticated", terminal: true }, - ], - transitions: [ - { - id: "login", - from: "anonymous", - to: "authenticated", - trigger: { protocol: "http", method: "POST", path: "/login" }, - captures: [ - { - variable: "token", - value: { source: "request_json", path: ["token"] }, - sensitive: true, - }, - ], - actions: [{ type: "http_response", status: 204, body: "" }], - max_uses: 1, - }, - ], - max_transitions: 1, - }, - }; - const empty = emptyCapture(); - const baseline = { - ...empty, - manifest: { - ...empty.manifest, - replay_plan: replayPlan, - replay_plan_sha256: digestProcessCommitment(replayPlan), - }, - }; - const transitioned = { - ...baseline, - replay_transitions: [ - { - sequence: 0, - at_ms: 0, - transition_id: "login", - state_before: "anonymous", - state_after: "authenticated", - sensitive_aliases: ["token"], - }, - ], - }; - - expect(compareProcessCaptures(baseline, transitioned)).toMatchObject({ - status: "changed", - protocol: "added", - }); -}); diff --git a/src/domain/processCapture.ts b/src/domain/processCapture.ts index 072aef5fa..8c30dda14 100644 --- a/src/domain/processCapture.ts +++ b/src/domain/processCapture.ts @@ -2,12 +2,6 @@ import { z } from "zod"; import { jsonValueSchema } from "./jsonValue.js"; import { normalizationSchema } from "./processScenario.js"; -import type { - ProcessReactiveStatus, - ProcessReactiveTransitionRecord, -} from "./processReactiveRuntime.js"; -import { processReactiveRunSchema } from "./processCaptureReactiveSchema.js"; -import type { ReplayTransitionRecord } from "./replayMachineRuntime.js"; import { collectProcessCaptureIssues } from "./processCaptureValidation.js"; export * from "./processScenario.js"; @@ -37,7 +31,7 @@ export interface InteractionEvent { readonly sequence: number; readonly scheduled_at_ms: number; readonly dispatched_at_ms: number; - readonly type: "input" | "resize" | "stdin_close" | "signal"; + readonly type: "input" | "resize" | "signal"; readonly data: string; readonly outcome: "dispatched" | "target_exited" | "failed"; } @@ -101,9 +95,7 @@ export interface ProcessSample { readonly session_id: number | null; } -/** - * Named filesystem state whose effects are relative to the prior checkpoint. - */ +/** Initial or final filesystem snapshot selected for observation. */ export interface FilesystemCheckpoint { readonly name: string; readonly at_ms: number; @@ -112,39 +104,6 @@ export interface FilesystemCheckpoint { readonly truncated: boolean; } -/** Recorded deterministic dependency invocation and route-match outcome. */ -export interface ShimEvent { - readonly sequence: number; - readonly at_ms: number; - readonly command: string; - readonly route_index: number | null; - readonly arguments: readonly string[]; - readonly working_directory: string; - readonly outcome: "matched" | "unmatched" | "exhausted"; -} - -/** A bounded loopback replay observation. */ -export interface ProtocolEvent { - readonly sequence: number; - readonly at_ms: number; - readonly protocol: "http" | "websocket"; - readonly direction: "request" | "response" | "received" | "sent"; - readonly method: string | null; - readonly path: string | null; - readonly data: string; - readonly outcome: - | "matched" - | "unmatched" - | "script_exhausted" - | "disconnected" - | "invalid_state" - | "guard_failed" - | "transition_exhausted" - | "invalid_capture" - | "unexpected_reconnect" - | "limit_exhausted"; -} - /** Capture collection whose members participate in global observation order. */ export const PROCESS_CAPTURE_EVENT_COLLECTIONS = [ "frames", @@ -153,9 +112,6 @@ export const PROCESS_CAPTURE_EVENT_COLLECTIONS = [ "lifecycle", "process_samples", "filesystem_checkpoints", - "shim_events", - "protocol_events", - "replay_transitions", ] as const; export type ProcessCaptureEventCollection = @@ -168,18 +124,6 @@ export interface ProcessCaptureEventJournalEntry { readonly index: number; } -/** Ordered control input that terminated or superseded a reactive run. */ -export interface ProcessReactiveControlRecord { - readonly sequence: number; - readonly kind: - | "state_deadline" - | "scenario_deadline" - | "target_lost" - | "cancelled" - | "cleanup_failed"; - readonly after_capture_order: number; -} - /** Shared observation callback used by every process-capture producer. */ export type RecordProcessCaptureEvent = ( collection: ProcessCaptureEventCollection, @@ -216,14 +160,10 @@ export interface UnverifiedProcessCapture { readonly completed_at: string; readonly scenario: Readonly>; readonly comparison_contract: Readonly>; - readonly shim_plan: readonly unknown[]; - readonly replay_plan: Readonly>; readonly full_scenario_sha256: string; readonly comparison_contract_sha256: string; readonly executable_sha256: string; readonly normalization_sha256: string; - readonly shim_plan_sha256: string; - readonly replay_plan_sha256: string; }; readonly normalization: z.infer; readonly frames: readonly TerminalFrame[]; @@ -237,16 +177,6 @@ export interface UnverifiedProcessCapture { readonly settlement: ProcessSettlement; readonly process_samples: readonly ProcessSample[]; readonly filesystem_checkpoints: readonly FilesystemCheckpoint[]; - readonly shim_events: readonly ShimEvent[]; - readonly protocol_events: readonly ProtocolEvent[]; - readonly replay_transitions: readonly ReplayTransitionRecord[]; - readonly reactive_run: - | ({ - readonly active_state: string; - readonly transitions: readonly ProcessReactiveTransitionRecord[]; - readonly controls: readonly ProcessReactiveControlRecord[]; - } & ProcessReactiveStatus) - | null; /** * Global observation order across independently recorded collections. * @@ -265,8 +195,6 @@ export interface UnverifiedProcessCapture { | "exit" | "process" | "filesystem" - | "protocol" - | "shim" | "cleanup" | "network" | "environment"; @@ -327,9 +255,9 @@ const fileEffectSchema = z.discriminatedUnion("status", [ }), ]); /** Exact serialized shape of a process capture. */ -const processCaptureShapeSchema: z.ZodType = z.object( - { - manifest: z.object({ +const processCaptureShapeSchema: z.ZodType = + z.strictObject({ + manifest: z.strictObject({ rea_version: z.string().min(1), provider_version: z.string().min(1), platform: z.string().min(1), @@ -339,14 +267,10 @@ const processCaptureShapeSchema: z.ZodType = z.object( completed_at: z.iso.datetime(), scenario: z.record(z.string(), jsonValueSchema), comparison_contract: z.record(z.string(), jsonValueSchema), - shim_plan: z.array(jsonValueSchema), - replay_plan: z.record(z.string(), jsonValueSchema), full_scenario_sha256: z.string().regex(/^[a-f0-9]{64}$/u), comparison_contract_sha256: z.string().regex(/^[a-f0-9]{64}$/u), executable_sha256: z.string().regex(/^[a-f0-9]{64}$/u), normalization_sha256: z.string().regex(/^[a-f0-9]{64}$/u), - shim_plan_sha256: z.string().regex(/^[a-f0-9]{64}$/u), - replay_plan_sha256: z.string().regex(/^[a-f0-9]{64}$/u), }), normalization: normalizationSchema, frames: z.array( @@ -374,7 +298,7 @@ const processCaptureShapeSchema: z.ZodType = z.object( sequence: z.number().int().nonnegative(), scheduled_at_ms: z.number().int().nonnegative(), dispatched_at_ms: z.number().int().nonnegative(), - type: z.enum(["input", "resize", "stdin_close", "signal"]), + type: z.enum(["input", "resize", "signal"]), data: z.string(), outcome: z.enum(["dispatched", "target_exited", "failed"]), }), @@ -408,60 +332,13 @@ const processCaptureShapeSchema: z.ZodType = z.object( ), filesystem_checkpoints: z.array( z.object({ - name: z.string(), + name: z.enum(["before", "after_settlement"]), at_ms: z.number().int().nonnegative(), files: z.array(fileStateSchema), effects: z.array(fileEffectSchema), truncated: z.boolean(), }), ), - shim_events: z.array( - z.object({ - sequence: z.number().int().nonnegative(), - at_ms: z.number().int().nonnegative(), - command: z.string(), - route_index: z.number().int().nonnegative().nullable(), - arguments: z.array(z.string()), - working_directory: z.string(), - outcome: z.enum(["matched", "unmatched", "exhausted"]), - }), - ), - protocol_events: z.array( - z.object({ - sequence: z.number().int().nonnegative(), - at_ms: z.number().int().nonnegative(), - protocol: z.enum(["http", "websocket"]), - direction: z.enum(["request", "response", "received", "sent"]), - method: z.string().nullable(), - path: z.string().nullable(), - data: z.string(), - outcome: z.enum([ - "matched", - "unmatched", - "script_exhausted", - "disconnected", - "invalid_state", - "guard_failed", - "transition_exhausted", - "invalid_capture", - "unexpected_reconnect", - "limit_exhausted", - ]), - }), - ), - replay_transitions: z - .array( - z.object({ - sequence: z.number().int().nonnegative(), - at_ms: z.number().int().nonnegative(), - transition_id: z.string().min(1), - state_before: z.string().min(1), - state_after: z.string().min(1), - sensitive_aliases: z.array(z.string().min(1)), - }), - ) - .default([]), - reactive_run: processReactiveRunSchema.nullable().default(null), event_journal: z .array( z.object({ @@ -484,8 +361,6 @@ const processCaptureShapeSchema: z.ZodType = z.object( "exit", "process", "filesystem", - "protocol", - "shim", "cleanup", "network", "environment", @@ -497,8 +372,7 @@ const processCaptureShapeSchema: z.ZodType = z.object( owned_process_group: z.literal("verified"), temporary_root: z.literal("removed"), }), - }, -); + }); /** Exact serialized shape plus all process-capture semantic invariants. */ export const processCaptureSchema = processCaptureShapeSchema.superRefine( diff --git a/src/domain/processCapture.validation.test.ts b/src/domain/processCapture.validation.test.ts index 43653cb2e..0c7e899a8 100644 --- a/src/domain/processCapture.validation.test.ts +++ b/src/domain/processCapture.validation.test.ts @@ -28,10 +28,6 @@ it("never considers truncated captures equivalent", () => { exit: { code: 0, signal: null, reason: "exited" as const }, process_samples: [], filesystem_checkpoints: emptyCapture().filesystem_checkpoints, - shim_events: [], - protocol_events: [], - replay_transitions: [], - reactive_run: null, files_before: [], files_after: [], filesystem_effects: [], @@ -146,77 +142,6 @@ it("accepts old captures without a journal and validates complete journals", () } }); -it.each([ - ["machine limit", 1, 5, 10], - ["transition use limit", 5, 1, 10], - ["state visit limit", 5, 5, 1], -])( - "rejects replay journals that exceed the declared %s", - (_name, maxTransitions, maxUses, maxVisits) => { - const replayPlan = { - machine: { - initial_state: "active", - states: [ - { name: "active", max_visits: maxVisits }, - { name: "complete", terminal: true }, - ], - transitions: [ - { - id: "again", - from: "active", - to: "active", - trigger: { - protocol: "websocket_message", - path: "/ws", - body: "again", - }, - actions: [{ type: "websocket_send", data: "again" }], - max_uses: maxUses, - }, - { - id: "finish", - from: "active", - to: "complete", - trigger: { - protocol: "websocket_message", - path: "/ws", - body: "finish", - }, - actions: [{ type: "websocket_send", data: "done" }], - max_uses: 1, - }, - ], - max_transitions: maxTransitions, - }, - }; - const capture = emptyCapture(); - const candidate: UnverifiedProcessCapture = { - ...capture, - manifest: { - ...capture.manifest, - replay_plan: replayPlan, - replay_plan_sha256: digestProcessCommitment(replayPlan), - }, - replay_transitions: [0, 1].map((sequence) => ({ - sequence, - at_ms: sequence, - transition_id: "again", - state_before: "active", - state_after: "active", - sensitive_aliases: [], - })), - }; - - expect(processCaptureIssues(candidate)).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - message: expect.stringContaining("limit"), - }), - ]), - ); - }, -); - it("requires compatible contracts and enforces capture age through a clock seam", () => { const capture = emptyCapture(); expect(() => diff --git a/src/domain/processCaptureExample.ts b/src/domain/processCaptureExample.ts index 7302a2f13..72bc2e47f 100644 --- a/src/domain/processCaptureExample.ts +++ b/src/domain/processCaptureExample.ts @@ -10,8 +10,6 @@ const normalization = { }; const scenario = { executable_sha256: "0".repeat(64) }; const comparisonContract = {}; -const shimPlan: JsonValue[] = []; -const replayPlan = {}; /** Minimal valid process capture retained as a public contract example. */ export const EMPTY_PROCESS_CAPTURE_EXAMPLE = { @@ -25,14 +23,10 @@ export const EMPTY_PROCESS_CAPTURE_EXAMPLE = { completed_at: "2026-01-01T00:00:00.001Z", scenario, comparison_contract: comparisonContract, - shim_plan: shimPlan, - replay_plan: replayPlan, full_scenario_sha256: digestProcessCommitment(scenario), comparison_contract_sha256: digestProcessCommitment(comparisonContract), executable_sha256: "0".repeat(64), normalization_sha256: digestProcessCommitment(normalization), - shim_plan_sha256: digestProcessCommitment(shimPlan), - replay_plan_sha256: digestProcessCommitment(replayPlan), }, normalization, frames: [], @@ -55,9 +49,6 @@ export const EMPTY_PROCESS_CAPTURE_EXAMPLE = { truncated: false, }, ], - shim_events: [], - protocol_events: [], - replay_transitions: [], files_before: [], files_after: [], filesystem_effects: [], diff --git a/src/domain/processCaptureReactiveSchema.test.ts b/src/domain/processCaptureReactiveSchema.test.ts deleted file mode 100644 index 8dd1687ab..000000000 --- a/src/domain/processCaptureReactiveSchema.test.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { processReactiveRunSchema } from "./processCaptureReactiveSchema.js"; - -describe("process reactive capture schema", () => { - it("accepts every committed transition without a fixed journal ceiling", () => { - const transitions = Array.from({ length: 130 }, (_, sequence) => ({ - sequence, - transition_id: `transition_${String(sequence)}`, - state_before: "active", - state_after: "active", - outcome: null, - trigger_event_ids: Array.from( - { length: 80 }, - (_, index) => `event_${String(index)}`, - ), - action_event_ids: Array.from( - { length: 300 }, - (_, index) => `action_${String(index)}`, - ), - action_types: Array.from({ length: 300 }, () => "send_input" as const), - })); - - const parsed = processReactiveRunSchema.safeParse({ - status: "running", - outcome: null, - active_state: "active", - transitions, - }); - - expect(parsed.success).toBe(true); - if (parsed.success) expect(parsed.data.transitions).toHaveLength(130); - }); -}); diff --git a/src/domain/processCaptureReactiveSchema.ts b/src/domain/processCaptureReactiveSchema.ts deleted file mode 100644 index 7ab7bfda4..000000000 --- a/src/domain/processCaptureReactiveSchema.ts +++ /dev/null @@ -1,77 +0,0 @@ -import { z } from "zod"; - -const processReactiveOutcomeSchema = z.enum([ - "passed", - "predicate_timeout", - "scenario_deadline", - "ambiguous_match", - "action_rejected", - "target_lost", - "capture_incomplete", - "cancelled", - "cleanup_failed", -]); - -const processReactiveTransitionShape = { - sequence: z.number().int().nonnegative(), - transition_id: z.string().min(1), - state_before: z.string().min(1), - trigger_event_ids: z.array(z.string().min(1)), - action_event_ids: z.array(z.string().min(1)), - action_types: z.array( - z.enum([ - "send_input", - "resize", - "close_stdin", - "send_signal", - "checkpoint", - ]), - ), -}; - -const processReactiveTransitionSchema = z.union([ - z.object({ - ...processReactiveTransitionShape, - state_after: z.string().min(1), - outcome: z.null(), - }), - z.object({ - ...processReactiveTransitionShape, - state_after: z.null(), - outcome: z.literal("passed"), - }), -]); - -const processReactiveRunShape = { - active_state: z.string().min(1), - controls: z - .array( - z.object({ - sequence: z.number().int().nonnegative(), - kind: z.enum([ - "state_deadline", - "scenario_deadline", - "target_lost", - "cancelled", - "cleanup_failed", - ]), - after_capture_order: z.number().int().min(-1), - }), - ) - .default([]), - transitions: z.array(processReactiveTransitionSchema), -}; - -/** Serialized reactive reducer state admitted by process capture. */ -export const processReactiveRunSchema = z.discriminatedUnion("status", [ - z.object({ - status: z.literal("running"), - outcome: z.null(), - ...processReactiveRunShape, - }), - z.object({ - status: z.literal("finished"), - outcome: processReactiveOutcomeSchema, - ...processReactiveRunShape, - }), -]); diff --git a/src/domain/processCaptureReactiveValidation.ts b/src/domain/processCaptureReactiveValidation.ts deleted file mode 100644 index 5c7b0b0a3..000000000 --- a/src/domain/processCaptureReactiveValidation.ts +++ /dev/null @@ -1,275 +0,0 @@ -import canonicalize from "canonicalize"; - -import type { UnverifiedProcessCapture } from "./processCapture.js"; -import { - projectProcessObservation, - type ProcessObservation, -} from "./processObservation.js"; -import { - commitProcessReactiveProposal, - createProcessReactiveSnapshot, - reduceProcessReactiveScenario, - type ProcessReactiveDecision, - type ProcessReactiveInput, - type ProcessReactiveSnapshot, -} from "./processReactiveRuntime.js"; -import { - processReactiveScenarioSchema, - type ProcessReactiveScenario, -} from "./processReactiveScenario.js"; - -type RequireInvariant = ( - condition: boolean, - path: string, - message: string, -) => void; -type ReactiveRun = NonNullable; -type ReactiveTransition = ReactiveRun["transitions"][number]; - -const admittedCollection = ( - collection: NonNullable< - UnverifiedProcessCapture["event_journal"] - >[number]["collection"], -): boolean => - [ - "frames", - "interaction_events", - "process_samples", - "filesystem_checkpoints", - "shim_events", - "protocol_events", - ].includes(collection); - -const reactiveObservations = ( - capture: UnverifiedProcessCapture, -): readonly ProcessObservation[] => - (capture.event_journal ?? []).flatMap((location) => { - if (!admittedCollection(location.collection)) return []; - const observation = projectProcessObservation(capture, location); - return observation === null ? [] : [observation]; - }); - -const validateTransitionDeclaration = ( - transition: ReactiveTransition, - next: ReactiveTransition | undefined, - context: { - readonly index: number; - readonly scenario: ProcessReactiveScenario; - readonly require: RequireInvariant; - }, -): void => { - const { index, scenario, require } = context; - const path = `reactive_run.transitions[${String(index)}]`; - const declared = scenario.states - .find(({ id }) => id === transition.state_before) - ?.on.find(({ id }) => id === transition.transition_id); - require(declared !== - undefined, path, "reactive transition is not declared by its recorded source state"); - if (declared !== undefined) { - const stateAfter = - declared.target.kind === "goto" ? declared.target.state : null; - const outcome = declared.target.kind === "finish" ? "passed" : null; - require(transition.state_after === stateAfter && - transition.outcome === - outcome, path, "reactive transition target or outcome differs from the committed graph"); - require(canonicalize(transition.action_types) === - canonicalize( - declared.actions.map(({ type }) => type), - ), `${path}.action_types`, "reactive transition actions differ from the committed graph"); - } - require(transition.sequence === - index, `${path}.sequence`, "reactive transition sequence must be contiguous from zero"); - if (next !== undefined) - require(transition.state_after === - next.state_before, `reactive_run.transitions[${String(index + 1)}].state_before`, "reactive transition states must be contiguous"); -}; - -const validateTransitionDeclarations = ( - run: ReactiveRun, - scenario: ProcessReactiveScenario, - require: RequireInvariant, -): void => { - require(run.transitions[0]?.state_before === scenario.initial_state || - run.transitions.length === - 0, "reactive_run.transitions[0].state_before", "reactive transition journal must start at the declared initial state"); - for (const [index, transition] of run.transitions.entries()) - validateTransitionDeclaration(transition, run.transitions[index + 1], { - index, - scenario, - require, - }); -}; - -const commitRecordedEffects = (options: { - readonly scenario: ProcessReactiveScenario; - readonly proposal: Extract< - ProcessReactiveDecision, - { readonly kind: "proposal" } - >; - readonly expected: ReactiveTransition | undefined; - readonly observations: ReadonlyMap; - readonly recordedFailure: "action_rejected" | "target_lost" | undefined; -}): ProcessReactiveDecision => - commitProcessReactiveProposal( - options.scenario, - options.proposal, - options.recordedFailure === undefined - ? options.proposal.effects.map((_, index) => { - const eventId = options.expected?.action_event_ids[index]; - const observation = - eventId === undefined - ? undefined - : options.observations.get(eventId); - return observation === undefined - ? { status: "rejected" as const } - : { status: "succeeded" as const, observation }; - }) - : [ - options.recordedFailure === "target_lost" - ? { status: "target_lost" as const } - : { status: "rejected" as const }, - ], - { committedSensitiveInputs: true }, - ); - -const replayTransitions = ( - scenario: ProcessReactiveScenario, - run: ReactiveRun, - observations: readonly ProcessObservation[], - require: RequireInvariant, -): ProcessReactiveSnapshot => { - const observationsById = new Map( - observations.map((observation) => [observation.event_id, observation]), - ); - let snapshot = createProcessReactiveSnapshot(scenario); - let transitionIndex = 0; - const advance = (input: ProcessReactiveInput): void => { - let decision = reduceProcessReactiveScenario(scenario, snapshot, input); - if (decision.kind === "proposal") { - const proposal = decision; - decision = commitRecordedEffects({ - scenario, - proposal: decision, - expected: run.transitions[transitionIndex], - observations: observationsById, - recordedFailure: - run.transitions[transitionIndex] === undefined && - decision.effects.length > 0 && - (run.outcome === "action_rejected" || run.outcome === "target_lost") - ? run.outcome - : undefined, - }); - require(decision.kind !== "finished" || - decision.outcome !== "action_rejected" || - run.outcome === - "action_rejected", `reactive_run.transitions[${String(transitionIndex)}].action_event_ids`, `recorded action observations do not match proposed effects: ${canonicalize( - { - effects: proposal.effects, - observations: run.transitions[transitionIndex]?.action_event_ids.map( - (eventId) => observationsById.get(eventId), - ), - }, - )}`); - } - if (decision.kind === "transition") { - const expected = run.transitions[transitionIndex]; - require(expected !== undefined && - canonicalize(decision.record) === - canonicalize( - expected, - ), `reactive_run.transitions[${String(transitionIndex)}]`, "reactive transition differs from deterministic journal replay"); - transitionIndex += 1; - } - snapshot = decision.snapshot; - }; - const advanceControl = ( - control: ReactiveRun["controls"][number], - index: number, - ): void => { - require(snapshot.status !== "finished" || - control.kind === - "cleanup_failed", `reactive_run.controls[${String(index)}]`, "reactive control cannot follow a finished run"); - advance( - control.kind === "state_deadline" - ? { - kind: control.kind, - state_id: snapshot.active_state, - state_entry_capture_order: snapshot.state_entry_capture_order, - } - : { kind: control.kind }, - ); - }; - let controlIndex = 0; - for (const observation of observations) { - while ( - (run.controls[controlIndex]?.after_capture_order ?? - Number.MAX_SAFE_INTEGER) < observation.capture_order - ) { - 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]; - if (control === undefined) break; - advanceControl(control, controlIndex); - } - require(transitionIndex === - run.transitions - .length, "reactive_run.transitions", `reactive transition journal is not reproduced by deterministic replay (replayed ${String(transitionIndex)} of ${String(run.transitions.length)}; outcome ${snapshot.outcome})`); - return snapshot; -}; - -const validateControls = ( - run: ReactiveRun, - observations: readonly ProcessObservation[], - require: RequireInvariant, -): void => { - const admittedOrders = new Set([ - -1, - ...observations.map(({ capture_order }) => capture_order), - ]); - for (const [index, control] of run.controls.entries()) { - require(control.sequence === - index, `reactive_run.controls[${String(index)}].sequence`, "reactive control sequence must be contiguous"); - 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 || - (previous !== undefined && - control.after_capture_order >= - previous.after_capture_order), `reactive_run.controls[${String(index)}].after_capture_order`, "reactive control cutoffs must be ordered"); - } -}; - -/** Validate one capture's reactive journal by replaying the production reducer. */ -export const validateProcessCaptureReactiveRun = ( - capture: UnverifiedProcessCapture, - require: RequireInvariant, -): void => { - const declared = capture.manifest.scenario["reactive"]; - const run = capture.reactive_run; - const declaredReactive = declared !== undefined && declared !== null; - require(declaredReactive === - (run !== - null), "reactive_run", "reactive result presence must match the committed scenario"); - if (run === null) return; - const parsed = processReactiveScenarioSchema.safeParse(declared); - require(parsed.success, "manifest.scenario.reactive", "committed reactive scenario does not satisfy its declared schema"); - if (!parsed.success) return; - require(run.status === "finished" && - run.outcome !== - null, "reactive_run.outcome", "completed capture requires a finished reactive outcome"); - validateTransitionDeclarations(run, parsed.data, require); - const observations = reactiveObservations(capture); - validateControls(run, observations, require); - const snapshot = replayTransitions(parsed.data, run, observations, require); - require(snapshot.outcome === - run.outcome, "reactive_run.outcome", "reactive outcome differs from deterministic journal replay"); - require(snapshot.active_state === - run.active_state, "reactive_run.active_state", "reactive active state differs from deterministic journal replay"); -}; diff --git a/src/domain/processCaptureValidation.ts b/src/domain/processCaptureValidation.ts index 7a3709f62..29be8c6e8 100644 --- a/src/domain/processCaptureValidation.ts +++ b/src/domain/processCaptureValidation.ts @@ -1,9 +1,7 @@ import type { UnverifiedProcessCapture } from "./processCapture.js"; -import { validateProcessCaptureReactiveRun } from "./processCaptureReactiveValidation.js"; -import { replayMachineSchema, type ReplayMachine } from "./replayMachine.js"; import { digestProcessCommitment } from "./processScenario.js"; -/** One pure semantic validation failure in an otherwise shaped v4 capture. */ +/** One pure semantic validation failure in a shaped process capture. */ export interface ProcessCaptureValidationIssue { readonly path: string; readonly message: string; @@ -23,12 +21,6 @@ const orderedTimestamps = ( return previous === undefined || value.at_ms >= previous.at_ms; }); -const transitionsAreContiguous = ( - previous: UnverifiedProcessCapture["replay_transitions"][number] | undefined, - current: UnverifiedProcessCapture["replay_transitions"][number], -): boolean => - previous !== undefined && previous.state_after === current.state_before; - const validateCommitments = ( capture: UnverifiedProcessCapture, require: RequireInvariant, @@ -40,8 +32,6 @@ const validateCommitments = ( ["full_scenario_sha256", manifest.scenario], ["comparison_contract_sha256", manifest.comparison_contract], ["normalization_sha256", capture.normalization], - ["shim_plan_sha256", manifest.shim_plan], - ["replay_plan_sha256", manifest.replay_plan], ] as const) require(manifest[field] === digestProcessCommitment( @@ -61,9 +51,6 @@ const validateOrdering = ( ["frames", capture.frames], ["rendered_frames", capture.rendered_frames], ["interaction_events", capture.interaction_events], - ["shim_events", capture.shim_events], - ["protocol_events", capture.protocol_events], - ["replay_transitions", capture.replay_transitions], ] as const) require(values.every( ({ sequence }, index) => sequence === index, @@ -72,42 +59,24 @@ const validateOrdering = ( ["frames", capture.frames], ["rendered_frames", capture.rendered_frames], ["process_samples", capture.process_samples], - ["filesystem_checkpoints", capture.filesystem_checkpoints], - ["shim_events", capture.shim_events], - ["protocol_events", capture.protocol_events], - ["replay_transitions", capture.replay_transitions], ] as const) require(orderedTimestamps(values), name, "timestamps must be ordered"); }; -const journalCollectionSizes = ( - capture: UnverifiedProcessCapture, -): Readonly< - Record< - NonNullable< - UnverifiedProcessCapture["event_journal"] - >[number]["collection"], - number - > -> => ({ - frames: capture.frames.length, - rendered_frames: capture.rendered_frames.length, - interaction_events: capture.interaction_events.length, - lifecycle: 2, - process_samples: capture.process_samples.length, - filesystem_checkpoints: capture.filesystem_checkpoints.length, - shim_events: capture.shim_events.length, - protocol_events: capture.protocol_events.length, - replay_transitions: capture.replay_transitions.length, -}); - const validateEventJournal = ( capture: UnverifiedProcessCapture, require: RequireInvariant, ): void => { const journal = capture.event_journal ?? []; if (journal.length === 0) return; - const sizes = journalCollectionSizes(capture); + const sizes = { + frames: capture.frames.length, + rendered_frames: capture.rendered_frames.length, + interaction_events: capture.interaction_events.length, + lifecycle: 2, + process_samples: capture.process_samples.length, + filesystem_checkpoints: capture.filesystem_checkpoints.length, + }; const references = new Set(); for (const [position, entry] of journal.entries()) { require(entry.capture_order === @@ -134,180 +103,19 @@ const validateLifecycle = ( capture: UnverifiedProcessCapture, require: RequireInvariant, ): void => { - const checkpointNames = capture.filesystem_checkpoints.map( - ({ name }) => name, - ); - require(new Set(checkpointNames).size === - checkpointNames.length, "filesystem_checkpoints", "checkpoint names must be unique"); - require(checkpointNames[0] === - "before", "filesystem_checkpoints", "first checkpoint must be before"); - require(checkpointNames.at(-1) === - "after_settlement", "filesystem_checkpoints", "last checkpoint must be after_settlement"); + require(capture.filesystem_checkpoints.map(({ name }) => name).join(",") === + "before,after_settlement", "filesystem_checkpoints", "capture must include initial and final filesystem snapshots"); + require(orderedTimestamps( + capture.filesystem_checkpoints, + ), "filesystem_checkpoints", "filesystem snapshot times must be ordered"); require(!capture.filesystem_checkpoints.some(({ truncated }) => truncated) || - capture.truncated, "truncated", "checkpoint truncation must propagate to the capture"); + capture.truncated, "truncated", "filesystem snapshot truncation must propagate to the capture"); require(capture.exit.reason === "exited" || capture.exit.code === null, "exit", "deadline termination cannot declare a normal exit code"); }; -const shimPlans = (capture: UnverifiedProcessCapture) => - capture.manifest.shim_plan.flatMap((shim) => - typeof shim === "object" && - shim !== null && - "name" in shim && - "routes" in shim && - typeof shim.name === "string" && - Array.isArray(shim.routes) - ? shim.routes.map((route, routeIndex) => ({ - command: shim.name, - route, - routeIndex, - })) - : [], - ); - -const validateShimEvents = ( - capture: UnverifiedProcessCapture, - require: RequireInvariant, -): void => { - const plans = shimPlans(capture); - for (const event of capture.shim_events) { - const declared = plans.some( - ({ command, routeIndex }) => - command === event.command && routeIndex === event.route_index, - ); - require(event.outcome === "unmatched" - ? event.route_index === null - : declared, "shim_events", "shim event has no declared route"); - } - for (const plan of plans) { - const maximum = - typeof plan.route === "object" && - plan.route !== null && - "max_calls" in plan.route && - typeof plan.route.max_calls === "number" - ? plan.route.max_calls - : 0; - const matches = capture.shim_events.filter( - (event) => - event.command === plan.command && - event.route_index === plan.routeIndex && - event.outcome === "matched", - ).length; - require(matches <= - maximum, "shim_events", "matched shim events exceed the declared route max_calls"); - } -}; - -const isRecord = (value: unknown): value is Readonly> => - typeof value === "object" && value !== null; - -const machinePlan = ( - replayPlan: Readonly>, -): ReplayMachine | undefined => { - const parsed = replayMachineSchema.safeParse(replayPlan["machine"]); - return parsed.success ? parsed.data : undefined; -}; - -const matchesHttpPlan = ( - value: unknown, - event: UnverifiedProcessCapture["protocol_events"][number], -): boolean => { - if (!isRecord(value)) return false; - const route = isRecord(value["trigger"]) ? value["trigger"] : value; - return ( - (route["protocol"] === undefined || route["protocol"] === "http") && - route["method"] === event.method && - route["path"] === event.path - ); -}; - -const validateMatchedHttpEvents = ( - capture: UnverifiedProcessCapture, - plans: readonly unknown[], - require: RequireInvariant, -): void => { - for (const event of capture.protocol_events) { - if ( - event.protocol !== "http" || - event.direction !== "request" || - event.outcome !== "matched" - ) - continue; - require(plans.some((plan) => - matchesHttpPlan(plan, event), - ), "protocol_events", "matched HTTP event has no declared replay route"); - } -}; - -const validateReplayEvents = ( - capture: UnverifiedProcessCapture, - require: RequireInvariant, -): void => { - const replayPlan = capture.manifest.replay_plan; - const routes = Array.isArray(replayPlan["http"]) ? replayPlan["http"] : []; - const machine = machinePlan(replayPlan); - require(replayPlan["machine"] === undefined || - replayPlan["machine"] === null || - machine !== - undefined, "manifest.replay_plan.machine", "replay machine does not satisfy its declared schema"); - validateMatchedHttpEvents( - capture, - [...routes, ...(machine?.transitions ?? [])], - require, - ); - const plans = new Map( - (machine?.transitions ?? []).map((transition) => [ - transition.id, - transition, - ]), - ); - const transitionUses = new Map(); - const stateVisits = new Map(); - if (machine !== undefined) stateVisits.set(machine.initial_state, 1); - require(machine === undefined || - capture.replay_transitions.length <= - machine.max_transitions, "replay_transitions", "replay transition journal exceeds the declared machine limit"); - for (const [index, transition] of capture.replay_transitions.entries()) { - const plan = plans.get(transition.transition_id); - require(plan !== - undefined, "replay_transitions", "replay transition has no declared machine transition"); - if (plan === undefined) continue; - require(transition.state_before === plan.from && - transition.state_after === - plan.to, "replay_transitions", "replay transition states do not match the declared transition"); - require(JSON.stringify(transition.sensitive_aliases) === - JSON.stringify( - plan.captures - .filter(({ sensitive }) => sensitive) - .map(({ variable }) => variable) - .sort(), - ), "replay_transitions", "replay transition sensitive aliases do not match the declared captures"); - const uses = (transitionUses.get(plan.id) ?? 0) + 1; - transitionUses.set(plan.id, uses); - require(uses <= - plan.max_uses, "replay_transitions", "replay transition journal exceeds the transition use limit"); - const visits = (stateVisits.get(transition.state_after) ?? 0) + 1; - stateVisits.set(transition.state_after, visits); - const state = machine?.states.find( - ({ name }) => name === transition.state_after, - ); - require(state === undefined || - visits <= - state.max_visits, "replay_transitions", "replay transition journal exceeds the state visit limit"); - 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(transitionsAreContiguous( - previous, - transition, - ), "replay_transitions", "replay transition states are not contiguous"); - } -}; - -/** Recompute v4 commitments and cross-field invariants without side effects. */ +/** Recompute commitments and cross-field invariants without side effects. */ export const collectProcessCaptureIssues = ( capture: UnverifiedProcessCapture, ): readonly ProcessCaptureValidationIssue[] => { @@ -319,8 +127,5 @@ export const collectProcessCaptureIssues = ( validateOrdering(capture, require); validateEventJournal(capture, require); validateLifecycle(capture, require); - validateShimEvents(capture, require); - validateReplayEvents(capture, require); - validateProcessCaptureReactiveRun(capture, require); return issues; }; diff --git a/src/domain/processComparison.ts b/src/domain/processComparison.ts index 175e5bc01..7e69e0ae3 100644 --- a/src/domain/processComparison.ts +++ b/src/domain/processComparison.ts @@ -32,9 +32,7 @@ export const PROCESS_COMPARISON_DIMENSIONS = [ "interaction", "exit", "filesystem", - "protocol", "process", - "shim", ] as const; /** Derive the overall comparison status from every process dimension. */ @@ -59,9 +57,7 @@ export const processCaptureComparisonSchema = z interaction: comparisonStatusSchema, exit: comparisonStatusSchema, filesystem: comparisonStatusSchema, - protocol: comparisonStatusSchema, process: comparisonStatusSchema, - shim: comparisonStatusSchema, first_divergence: z.discriminatedUnion("status", [ z.object({ status: z.literal("none") }), z.object({ status: z.literal("unknown"), reason: z.string() }), @@ -72,9 +68,7 @@ export const processCaptureComparisonSchema = z "interaction", "exit", "filesystem", - "protocol", "process", - "shim", ]), index: z.number().int().nonnegative(), left_at_ms: z.number().int().nonnegative().nullable(), @@ -115,16 +109,8 @@ const terminalObservations = (capture: ProcessCapture): readonly unknown[] => return left.sequence - right.sequence; }); -const filesystemObservations = ( - capture: ProcessCapture, -): readonly unknown[] => [ - ...capture.filesystem_checkpoints, - { - name: "final", - files: capture.files_after, - effects: capture.filesystem_effects, - }, -]; +const filesystemObservations = (capture: ProcessCapture): readonly unknown[] => + capture.filesystem_checkpoints; const sameJsonValue = (left: unknown, right: unknown): boolean => { const encodedLeft = canonicalize(left); @@ -145,12 +131,8 @@ export const processDimensionObservations = ( return [{ ...capture.exit, settlement: capture.settlement }]; case "filesystem": return filesystemObservations(capture); - case "protocol": - return [...capture.protocol_events, ...capture.replay_transitions]; case "process": return capture.process_samples; - case "shim": - return capture.shim_events; } }; @@ -268,9 +250,7 @@ const truncatedComparison = (): ProcessCaptureComparison => ({ interaction: "truncated", exit: "truncated", filesystem: "truncated", - protocol: "truncated", process: "truncated", - shim: "truncated", first_divergence: { status: "unknown", reason: "At least one capture is truncated.", @@ -320,21 +300,13 @@ const applyTraceVerdict = ( interaction: statusFor("interaction"), exit: statusFor("exit"), filesystem: statusFor("filesystem"), - protocol: statusFor("protocol"), process: statusFor("process"), - shim: statusFor("shim"), }; }; type ComparisonDimensions = Pick< ProcessCaptureComparison, - | "terminal" - | "interaction" - | "exit" - | "filesystem" - | "protocol" - | "process" - | "shim" + "terminal" | "interaction" | "exit" | "filesystem" | "process" >; const compareDimensions = ( @@ -375,13 +347,7 @@ const compareDimensions = ( filesystemObservations(left), filesystemObservations(right), ), - protocol: classify( - "protocol", - [...left.protocol_events, ...left.replay_transitions], - [...right.protocol_events, ...right.replay_transitions], - ), process: classify("process", left.process_samples, right.process_samples), - shim: classify("shim", left.shim_events, right.shim_events), }; }; diff --git a/src/domain/processObservation.test.ts b/src/domain/processObservation.test.ts index 89b50a1bb..7ebf55a25 100644 --- a/src/domain/processObservation.test.ts +++ b/src/domain/processObservation.test.ts @@ -48,43 +48,10 @@ const capture: UnverifiedProcessCapture = { session_id: 1, }, ], - shim_events: [ - { - sequence: 0, - at_ms: 5, - command: "helper", - route_index: 0, - arguments: [], - working_directory: "/fixture", - outcome: "matched", - }, - ], - protocol_events: [ - { - sequence: 0, - at_ms: 6, - protocol: "http", - direction: "request", - method: "GET", - path: "/done", - data: "", - outcome: "matched", - }, - ], - replay_transitions: [ - { - sequence: 0, - at_ms: 7, - transition_id: "done", - state_before: "open", - state_after: "closed", - sensitive_aliases: [], - }, - ], }; describe("process observation vocabulary", () => { - it("projects every capture collection without timestamp sorting", () => { + it("projects capture collections without timestamp sorting", () => { const locations = [ { collection: "frames", index: 0, capture_order: 4 }, { collection: "rendered_frames", index: 0, capture_order: 3 }, @@ -93,14 +60,10 @@ describe("process observation vocabulary", () => { { collection: "lifecycle", index: 1, capture_order: 9 }, { collection: "process_samples", index: 0, capture_order: 1 }, { collection: "filesystem_checkpoints", index: 0, capture_order: 0 }, - { collection: "shim_events", index: 0, capture_order: 5 }, - { collection: "protocol_events", index: 0, capture_order: 6 }, - { collection: "replay_transitions", index: 0, capture_order: 7 }, ] as const; const observations = locations.map((location) => projectProcessObservation(capture, location), ); - expect(observations.map((value) => value?.source)).toEqual([ "terminal_raw", "terminal_rendered", @@ -109,9 +72,6 @@ describe("process observation vocabulary", () => { "lifecycle", "process", "filesystem", - "shim", - "http", - "replay_transition", ]); expect(observations.map((value) => value?.capture_order)).toEqual( locations.map(({ capture_order }) => capture_order), @@ -122,10 +82,6 @@ describe("process observation vocabulary", () => { captured_at_ms: 4, subject_id: "process:2", }); - expect(observations[7]).toMatchObject({ - event_id: "obs.shim_events.0", - subject_id: "shim:helper:route:0", - }); expect(observations[3]?.captured_at_ms).toBeNull(); expect(observations[4]?.captured_at_ms).toBeNull(); }); diff --git a/src/domain/processObservation.ts b/src/domain/processObservation.ts index 568719e3b..95d6fc9e9 100644 --- a/src/domain/processObservation.ts +++ b/src/domain/processObservation.ts @@ -11,10 +11,6 @@ export const processObservationSourceSchema = z.enum([ "lifecycle", "process", "filesystem", - "http", - "websocket", - "shim", - "replay_transition", ]); export type ProcessObservationSource = z.infer< typeof processObservationSourceSchema @@ -29,9 +25,6 @@ export const processObservationLocationSchema = z.strictObject({ "lifecycle", "process_samples", "filesystem_checkpoints", - "shim_events", - "protocol_events", - "replay_transitions", ]), index: z.number().int().nonnegative(), capture_order: z.number().int().nonnegative(), @@ -40,7 +33,7 @@ export type ProcessObservationLocation = z.infer< typeof processObservationLocationSchema >; -/** Provider-neutral event offered to a reactive scenario or offline assertion. */ +/** Provider-neutral event projected into an offline trace assertion. */ export interface ProcessObservation { readonly event_id: string; readonly source: ProcessObservationSource; @@ -124,14 +117,6 @@ export const processObservationSubject = ( typeof value.name === "string" ) return `checkpoint:${value.name}`; - if ( - source === "shim" && - "command" in value && - typeof value.command === "string" - ) - return "route_index" in value && typeof value.route_index === "number" - ? `shim:${value.command}:route:${String(value.route_index)}` - : `shim:${value.command}:unmatched`; return null; }; @@ -178,22 +163,6 @@ const projectedRecord = ( source: "filesystem" as const, value: capture.filesystem_checkpoints[location.index], }; - case "shim_events": - return { - source: "shim" as const, - value: capture.shim_events[location.index], - }; - case "protocol_events": { - const event = capture.protocol_events[location.index]; - return event === undefined - ? null - : { source: event.protocol, value: event }; - } - case "replay_transitions": - return { - source: "replay_transition" as const, - value: capture.replay_transitions[location.index], - }; } })(); if (projected === null || projected.value === undefined) return null; diff --git a/src/domain/processReactiveCheckpointDataflow.ts b/src/domain/processReactiveCheckpointDataflow.ts deleted file mode 100644 index 8bdf3064f..000000000 --- a/src/domain/processReactiveCheckpointDataflow.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { ProcessReactiveScenario } from "./processReactiveScenario.js"; - -/** Checkpoints guaranteed on every known path entering each reactive state. */ -export const definitelyAvailableCheckpoints = ( - scenario: ProcessReactiveScenario, -): ReadonlyMap> => { - const available = new Map>([ - [scenario.initial_state, new Set()], - ]); - let changed = true; - while (changed) { - changed = false; - for (const state of scenario.states) { - const before = available.get(state.id); - if (before === undefined) continue; - for (const transition of state.on) { - if (transition.target.kind !== "goto") continue; - const after = new Set(before); - for (const name of transition.actions.flatMap((action) => - action.type === "checkpoint" ? [action.name] : [], - )) - after.add(name); - const prior = available.get(transition.target.state); - const next = - prior === undefined - ? after - : new Set([...prior].filter((name) => after.has(name))); - if (prior !== undefined && setsEqual(prior, next)) continue; - available.set(transition.target.state, next); - changed = true; - } - } - } - return available; -}; - -const setsEqual = ( - left: ReadonlySet, - right: ReadonlySet, -): boolean => - left.size === right.size && [...left].every((value) => right.has(value)); diff --git a/src/domain/processReactiveMatching.ts b/src/domain/processReactiveMatching.ts deleted file mode 100644 index dea1e7ef4..000000000 --- a/src/domain/processReactiveMatching.ts +++ /dev/null @@ -1,275 +0,0 @@ -import canonicalize from "canonicalize"; - -import type { ProcessObservation } from "./processObservation.js"; -import { comparableProcessObservationPayload } from "./processObservation.js"; -import type { - ProcessReactiveFrontier, - ProcessReactiveTrigger, -} from "./processReactiveScenario.js"; -import type { ProcessReactiveSnapshot } from "./processReactiveRuntime.js"; - -/** Trigger match result used by the pure reducer. */ -export type ProcessReactiveTriggerMatch = { - readonly eventIds: readonly string[]; - readonly consumeIds: readonly string[]; - readonly lastOrder: number; - readonly matched: boolean; -}; - -interface TriggerMatchContext { - readonly snapshot: ProcessReactiveSnapshot; - readonly afterOrder: number; - readonly upperOrder: number | null; -} - -const noMatch = (): ProcessReactiveTriggerMatch => ({ - eventIds: [], - consumeIds: [], - lastOrder: -1, - matched: false, -}); - -const frontierOrder = ( - frontier: ProcessReactiveFrontier, - snapshot: ProcessReactiveSnapshot, -): number | null => { - switch (frontier.kind) { - case "scenario_start": - return -1; - case "state_entry": - return snapshot.state_entry_capture_order - 1; - case "checkpoint": - return ( - snapshot.checkpoints.findLast(({ name }) => name === frontier.name) - ?.capture_order ?? null - ); - case "event_id": - return ( - snapshot.observations.find( - ({ event_id }) => event_id === frontier.event_id, - )?.capture_order ?? null - ); - } -}; - -const eligibleObservations = ( - frontier: ProcessReactiveFrontier, - context: TriggerMatchContext, -): readonly ProcessObservation[] => { - const frontierValue = frontierOrder(frontier, context.snapshot); - if (frontierValue === null) return []; - const lowerBound = Math.max(frontierValue, context.afterOrder); - const consumed = new Set(context.snapshot.consumed_event_ids); - return context.snapshot.observations.filter( - ({ capture_order, event_id }) => - capture_order > lowerBound && - (context.upperOrder === null || capture_order <= context.upperOrder) && - !consumed.has(event_id), - ); -}; - -const canonicalJson = (value: unknown): string => { - const serialized = canonicalize(value); - if (serialized === undefined) - throw new TypeError("Reactive scenario value is not canonical JSON"); - return serialized; -}; - -const matchEvent = ( - trigger: Extract, - context: TriggerMatchContext, -): ProcessReactiveTriggerMatch => { - const expected = canonicalJson( - comparableProcessObservationPayload(trigger.exact, trigger.ignore_fields), - ); - const matches: ProcessObservation[] = []; - for (const observation of eligibleObservations(trigger.since, context)) { - if ( - observation.source === trigger.source && - canonicalJson( - comparableProcessObservationPayload( - observation.payload, - trigger.ignore_fields, - ), - ) === expected - ) - matches.push(observation); - } - if ( - matches.length < trigger.cardinality.min || - matches.length > trigger.cardinality.max - ) - return noMatch(); - const eventIds = matches.map(({ event_id }) => event_id); - return { - eventIds, - consumeIds: trigger.consume ? eventIds : [], - lastOrder: matches.at(-1)?.capture_order ?? context.afterOrder, - matched: true, - }; -}; - -const occurrenceRange = ( - haystack: string, - needle: string, - occurrence: number, -): { readonly start: number; readonly end: number } | null => { - let offset = 0; - let start = -1; - for (let found = 0; found < occurrence; found += 1) { - start = haystack.indexOf(needle, offset); - if (start < 0) return null; - offset = start + needle.length; - } - return { start, end: offset }; -}; - -const matchTerminalText = ( - trigger: Extract, - context: TriggerMatchContext, -): ProcessReactiveTriggerMatch => { - const chunks: { observation: ProcessObservation; text: string }[] = []; - for (const observation of eligibleObservations(trigger.since, context)) { - if ( - observation.source === "terminal_raw" && - typeof observation.payload === "object" && - observation.payload !== null && - !Array.isArray(observation.payload) && - typeof observation.payload["data"] === "string" - ) - chunks.push({ observation, text: observation.payload["data"] }); - } - const range = occurrenceRange( - chunks.map(({ text }) => text).join(""), - trigger.literal, - trigger.occurrence, - ); - if (range === null) return noMatch(); - let firstChunk = 0; - let lastChunk = 0; - let characters = 0; - for (const [index, chunk] of chunks.entries()) { - characters += chunk.text.length; - if (characters <= range.start) firstChunk = index + 1; - if (characters >= range.end) { - lastChunk = index; - break; - } - } - const matched = chunks - .slice(firstChunk, lastChunk + 1) - .map(({ observation }) => observation); - const eventIds = matched.map(({ event_id }) => event_id); - return { - eventIds, - consumeIds: trigger.consume ? eventIds : [], - lastOrder: matched.at(-1)?.capture_order ?? context.afterOrder, - matched: true, - }; -}; - -const mergeMatches = ( - matches: readonly ProcessReactiveTriggerMatch[], -): ProcessReactiveTriggerMatch => { - const eventIds = new Set(); - const consumeIds = new Set(); - let lastOrder = -1; - let matched = true; - for (const match of matches) { - for (const eventId of match.eventIds) eventIds.add(eventId); - for (const eventId of match.consumeIds) consumeIds.add(eventId); - lastOrder = Math.max(lastOrder, match.lastOrder); - matched &&= match.matched; - } - return { - eventIds: [...eventIds], - consumeIds: [...consumeIds], - lastOrder, - matched, - }; -}; - -const matchEarliestPrefix = ( - trigger: ProcessReactiveTrigger, - context: TriggerMatchContext, -): ProcessReactiveTriggerMatch => { - for (const observation of context.snapshot.observations) { - if (observation.capture_order <= context.afterOrder) continue; - if ( - context.upperOrder !== null && - observation.capture_order > context.upperOrder - ) - break; - const matched = matchTrigger(trigger, { - ...context, - upperOrder: observation.capture_order, - }); - if (matched.matched) return matched; - } - return noMatch(); -}; - -const matchTrigger = ( - trigger: ProcessReactiveTrigger, - context: TriggerMatchContext, -): ProcessReactiveTriggerMatch => { - if (trigger.kind === "event") return matchEvent(trigger, context); - if (trigger.kind === "terminal_text") - return matchTerminalText(trigger, context); - if (trigger.kind === "all") - return mergeMatches( - trigger.triggers.map((child) => matchTrigger(child, context)), - ); - if (trigger.kind === "any") { - const evaluated = trigger.triggers.map((child) => - matchTrigger(child, context), - ); - const matches = evaluated.filter(({ matched }) => matched); - return matches.length === 0 ? noMatch() : mergeMatches(matches); - } - if (trigger.kind === "sequence") { - const matches: ProcessReactiveTriggerMatch[] = []; - let cursor = context.afterOrder; - for (const child of trigger.triggers) { - const matched = matchEarliestPrefix(child, { - ...context, - afterOrder: cursor, - }); - if (!matched.matched) return noMatch(); - matches.push(matched); - cursor = matched.lastOrder; - } - return mergeMatches(matches); - } - const matches: ProcessReactiveTriggerMatch[] = []; - let cursor = context.afterOrder; - while (matches.length < trigger.max) { - const matched = matchEarliestPrefix(trigger.trigger, { - ...context, - afterOrder: cursor, - }); - if (!matched.matched || matched.lastOrder <= cursor) break; - matches.push(matched); - cursor = matched.lastOrder; - } - if (matches.length === trigger.max) { - const excess = matchEarliestPrefix(trigger.trigger, { - ...context, - afterOrder: cursor, - }); - if (excess.matched) return noMatch(); - } - if (matches.length < trigger.min) return noMatch(); - return mergeMatches(matches); -}; - -/** Match one trigger against every eligible retained observation. */ -export const matchProcessReactiveTrigger = ( - trigger: ProcessReactiveTrigger, - snapshot: ProcessReactiveSnapshot, -): ProcessReactiveTriggerMatch => - matchTrigger(trigger, { - snapshot, - afterOrder: -1, - upperOrder: null, - }); diff --git a/src/domain/processReactiveRuntime.fixture.ts b/src/domain/processReactiveRuntime.fixture.ts deleted file mode 100644 index 2de01064d..000000000 --- a/src/domain/processReactiveRuntime.fixture.ts +++ /dev/null @@ -1,144 +0,0 @@ -import { - createProcessObservation, - type ProcessObservationSource, -} from "./processObservation.js"; -import { - commitProcessReactiveProposal, - createProcessReactiveSnapshot, - reduceProcessReactiveScenario, -} from "./processReactiveRuntime.js"; -import { - processReactiveScenarioSchema, - type ProcessReactiveAction, - type ProcessReactiveScenario, -} from "./processReactiveScenario.js"; - -export const terminalTrigger = (literal = "Ready") => ({ - kind: "terminal_text" as const, - literal, - occurrence: 1, - since: { kind: "scenario_start" as const }, - consume: false, -}); -export const scenarioWith = ( - transitions: readonly unknown[], -): ProcessReactiveScenario => - processReactiveScenarioSchema.parse({ - initial_state: "starting", - deadline_ms: 30000, - states: [ - { - id: "starting", - max_visits: 4, - deadline_ms: 5000, - on: transitions, - }, - ], - }); -export const finish = ( - id: string, - when: unknown, - priority = 100, - actions: readonly unknown[] = [], -) => ({ - id, - priority, - max_uses: 4, - when, - actions, - target: { kind: "finish" }, -}); -export const collectionFor = (source: ProcessObservationSource) => { - switch (source) { - case "terminal_raw": - return "frames" as const; - case "terminal_rendered": - return "rendered_frames" as const; - case "process": - return "process_samples" as const; - case "filesystem": - return "filesystem_checkpoints" as const; - case "shim": - return "shim_events" as const; - case "http": - case "websocket": - return "protocol_events" as const; - case "replay_transition": - return "replay_transitions" as const; - case "interaction": - return "interaction_events" as const; - case "lifecycle": - return "lifecycle" as const; - } -}; -export const observation = ( - source: ProcessObservationSource, - order: number, - payload: unknown, -) => - createProcessObservation({ - source, - source_sequence: order, - captured_at_ms: order, - subject_id: null, - location: { - collection: collectionFor(source), - index: order, - capture_order: order, - }, - payload, - }); -export const succeededEffect = ( - action: ProcessReactiveAction, - order: number, -) => ({ - status: "succeeded" as const, - observation: - action.type === "checkpoint" - ? observation("filesystem", order, { name: action.name }) - : observation("interaction", order, { - type: - action.type === "send_input" - ? "input" - : action.type === "resize" - ? "resize" - : action.type === "close_stdin" - ? "stdin_close" - : "signal", - data: - action.type === "send_input" - ? action.sensitive - ? `` - : action.data - : action.type === "resize" - ? `${String(action.columns)}x${String(action.rows)}` - : action.type === "close_stdin" - ? "" - : action.signal, - outcome: "dispatched", - }), -}); -export const offer = ( - scenario: ProcessReactiveScenario, - snapshot: ReturnType, - value: ReturnType, -) => { - const proposed = reduceProcessReactiveScenario(scenario, snapshot, { - kind: "observation", - observation: value, - }); - return proposed.kind === "proposal" - ? commitProcessReactiveProposal( - scenario, - proposed, - proposed.effects.map((effect, index) => ({ - ...succeededEffect( - effect, - (proposed.snapshot.observations.at(-1)?.capture_order ?? -1) + - index + - 1, - ), - })), - ) - : proposed; -}; diff --git a/src/domain/processReactiveRuntime.test.ts b/src/domain/processReactiveRuntime.test.ts deleted file mode 100644 index 84db55ead..000000000 --- a/src/domain/processReactiveRuntime.test.ts +++ /dev/null @@ -1,531 +0,0 @@ -import { - finish, - observation, - offer, - scenarioWith, - succeededEffect, - terminalTrigger, -} from "./processReactiveRuntime.fixture.js"; -import { - commitProcessReactiveProposal, - createProcessReactiveSnapshot, - reduceProcessReactiveScenario, -} from "./processReactiveRuntime.js"; -import { processReactiveScenarioSchema } from "./processReactiveScenario.js"; -import { describe, expect, it } from "vitest"; - -describe("process reactive runtime: terminal text matching", () => { - it("matches decoded terminal text across PTY chunks and emits declarative effects", () => { - const scenario = scenarioWith([ - finish("ready", terminalTrigger(), 100, [ - { type: "send_signal", target: { kind: "root" }, signal: "SIGINT" }, - { type: "checkpoint", name: "ready" }, - ]), - ]); - const first = offer( - scenario, - createProcessReactiveSnapshot(scenario), - observation("terminal_raw", 0, { - sequence: 0, - at_ms: 0, - data: "Re", - }), - ); - expect(first.kind).toBe("waiting"); - const second = offer( - scenario, - first.snapshot, - observation("terminal_raw", 1, { - sequence: 1, - at_ms: 1, - data: "ady\n", - }), - ); - expect(second.kind).toBe("transition"); - if (second.kind !== "transition") return; - expect(second.record).toEqual({ - sequence: 0, - transition_id: "ready", - state_before: "starting", - state_after: null, - outcome: "passed", - trigger_event_ids: ["obs.frames.0", "obs.frames.1"], - action_event_ids: [ - "obs.interaction_events.2", - "obs.filesystem_checkpoints.3", - ], - action_types: ["send_signal", "checkpoint"], - }); - }); - it("treats redaction-shaped live input as ordinary sensitive data", () => { - const scenario = scenarioWith([ - finish("ready", terminalTrigger(), 100, [ - { - type: "send_input", - data: "", - sensitive: true, - }, - ]), - ]); - const decision = offer( - scenario, - createProcessReactiveSnapshot(scenario), - observation("terminal_raw", 0, { data: "Ready" }), - ); - expect(decision).toMatchObject({ - kind: "transition", - record: { outcome: "passed" }, - }); - }); - it("reports only the minimal terminal chunk span containing the occurrence", () => { - const scenario = scenarioWith([finish("ready", terminalTrigger())]); - let snapshot = createProcessReactiveSnapshot(scenario); - for (const [order, data] of ["unrelated\n", "Re"].entries()) { - const decision = offer( - scenario, - snapshot, - observation("terminal_raw", order, { data }), - ); - expect(decision.kind).toBe("waiting"); - snapshot = decision.snapshot; - } - const matched = offer( - scenario, - snapshot, - observation("terminal_raw", 2, { data: "ady" }), - ); - expect(matched.kind).toBe("transition"); - if (matched.kind === "transition") - expect(matched.record.trigger_event_ids).toEqual([ - "obs.frames.1", - "obs.frames.2", - ]); - }); -}); - -describe("process reactive runtime: observation retention", () => { - it("matches terminal text after the previous retained-data ceiling", () => { - const scenario = scenarioWith([finish("large_output", terminalTrigger())]); - const decision = reduceProcessReactiveScenario( - scenario, - createProcessReactiveSnapshot(scenario), - { - kind: "observation", - observation: observation("terminal_raw", 0, { - data: `${"x".repeat(70_000)}Ready`, - }), - }, - ); - expect(decision.kind).toBe("proposal"); - }); - - it("evaluates all configured predicates against all retained observations", () => { - const transitions = Array.from({ length: 80 }, (_, index) => - finish(`event_${String(index)}`, { - kind: "event", - source: "shim", - exact: { name: `expected_${String(index)}` }, - ignore_fields: ["sequence"], - since: { kind: "scenario_start" }, - consume: false, - cardinality: { min: 1, max: 1 }, - }), - ); - const scenario = scenarioWith(transitions); - const retained = Array.from({ length: 130 }, (_, order) => - observation("shim", order, { name: "other", sequence: order }), - ); - const snapshot = { - ...createProcessReactiveSnapshot(scenario), - observations: retained, - }; - const decision = offer( - scenario, - snapshot, - observation("shim", retained.length, { - name: "other", - sequence: retained.length, - }), - ); - expect(decision).toMatchObject({ kind: "waiting" }); - if (decision.kind === "waiting") - expect(decision.snapshot.observations).toHaveLength(131); - }); -}); - -describe("process reactive runtime: effect commit ordering", () => { - it("does not commit state, checkpoints, consumption, or history before effects succeed", () => { - const scenario = scenarioWith([ - finish("ready", { ...terminalTrigger(), consume: true }, 100, [ - { type: "checkpoint", name: "ready" }, - { type: "send_signal", target: { kind: "root" }, signal: "SIGINT" }, - ]), - ]); - const proposed = reduceProcessReactiveScenario( - scenario, - createProcessReactiveSnapshot(scenario), - { - kind: "observation", - observation: observation("terminal_raw", 0, { data: "Ready" }), - }, - ); - expect(proposed.kind).toBe("proposal"); - if (proposed.kind !== "proposal") return; - expect(proposed.snapshot).toMatchObject({ - status: "running", - checkpoints: [], - consumed_event_ids: [], - transitions: [], - }); - const rejected = commitProcessReactiveProposal(scenario, proposed, [ - { - status: "succeeded", - observation: observation("filesystem", 1, { name: "ready" }), - }, - { status: "rejected" }, - ]); - expect(rejected).toMatchObject({ - kind: "finished", - outcome: "action_rejected", - snapshot: { - checkpoints: [], - consumed_event_ids: [], - transitions: [], - }, - }); - expect( - commitProcessReactiveProposal(scenario, proposed, [ - { status: "target_lost" }, - { - status: "succeeded", - observation: observation("interaction", 2, { - type: "signal", - data: "SIGINT", - outcome: "dispatched", - }), - }, - ]), - ).toMatchObject({ kind: "finished", outcome: "target_lost" }); - const committed = commitProcessReactiveProposal(scenario, proposed, [ - { - status: "succeeded", - observation: observation("filesystem", 1, { name: "ready" }), - }, - { - status: "succeeded", - observation: observation("interaction", 2, { - type: "signal", - data: "SIGINT", - outcome: "dispatched", - }), - }, - ]); - expect(committed.snapshot).toMatchObject({ - checkpoints: [ - { - name: "ready", - event_id: "obs.filesystem_checkpoints.1", - capture_order: 1, - }, - ], - }); - expect( - commitProcessReactiveProposal(scenario, proposed, [ - { - status: "succeeded", - observation: observation("filesystem", 1, { name: "other" }), - }, - { - status: "succeeded", - observation: observation("interaction", 2, { - type: "signal", - data: "SIGINT", - outcome: "dispatched", - }), - }, - ]), - ).toMatchObject({ kind: "finished", outcome: "action_rejected" }); - const changedScenario = scenarioWith([ - finish("ready", { ...terminalTrigger(), consume: true }, 100, [ - { type: "checkpoint", name: "changed" }, - { type: "send_signal", target: { kind: "root" }, signal: "SIGINT" }, - ]), - ]); - expect( - commitProcessReactiveProposal(changedScenario, proposed, [ - succeededEffect({ type: "checkpoint", name: "ready" }, 1), - succeededEffect( - { - type: "send_signal", - target: { kind: "root" }, - signal: "SIGINT", - }, - 2, - ), - ]), - ).toMatchObject({ kind: "finished", outcome: "target_lost" }); - expect( - commitProcessReactiveProposal(scenario, proposed, [ - { - status: "succeeded", - observation: observation("filesystem", 1, { name: "ready" }), - }, - { - status: "succeeded", - observation: { - ...observation("filesystem", 2, { name: "ready" }), - event_id: "obs.filesystem_checkpoints.1", - }, - }, - ]), - ).toMatchObject({ kind: "finished", outcome: "action_rejected" }); - }); -}); - -describe("process reactive runtime: predicate selection", () => { - it("selects a unique priority and reports equal-priority ambiguity", () => { - const preferred = scenarioWith([ - finish("fallback", terminalTrigger(), 20), - finish("preferred", terminalTrigger(), 10), - ]); - const selected = offer( - preferred, - createProcessReactiveSnapshot(preferred), - observation("terminal_raw", 0, { data: "Ready" }), - ); - expect(selected.kind).toBe("transition"); - if (selected.kind === "transition") - expect(selected.record.transition_id).toBe("preferred"); - for (const transitions of [ - [finish("one", terminalTrigger()), finish("two", terminalTrigger())], - [finish("two", terminalTrigger()), finish("one", terminalTrigger())], - ]) { - const ambiguous = scenarioWith(transitions); - const decision = offer( - ambiguous, - createProcessReactiveSnapshot(ambiguous), - observation("terminal_raw", 0, { data: "Ready" }), - ); - expect(decision).toMatchObject({ - kind: "finished", - outcome: "ambiguous_match", - }); - } - }); - it("matches caller supplied terminal literals longer than the former schema cap", () => { - const literal = "Ready".repeat(2_001); - const scenario = scenarioWith([ - finish("long_literal", terminalTrigger(literal)), - ]); - const decision = offer( - scenario, - createProcessReactiveSnapshot(scenario), - observation("terminal_raw", 0, { data: `prefix${literal}suffix` }), - ); - - expect(decision).toMatchObject({ - kind: "transition", - record: { transition_id: "long_literal" }, - }); - }); - it("evaluates ordered and repeated predicates without array-order arbitration", () => { - const event = (name: string) => ({ - kind: "event" as const, - source: "shim" as const, - exact: { name }, - ignore_fields: ["sequence" as const], - since: { kind: "scenario_start" as const }, - consume: true, - cardinality: { min: 1, max: 1 }, - }); - const scenario = scenarioWith([ - finish("sequence", { - kind: "sequence", - triggers: [ - event("start"), - { kind: "repeat", trigger: event("tick"), min: 2, max: 2 }, - event("done"), - ], - }), - ]); - let snapshot = createProcessReactiveSnapshot(scenario); - for (const [order, name] of ["start", "tick", "tick"].entries()) { - const decision = offer( - scenario, - snapshot, - observation("shim", order, { name, sequence: order }), - ); - expect(decision.kind).toBe("waiting"); - snapshot = decision.snapshot; - } - const decision = offer( - scenario, - snapshot, - observation("shim", 3, { name: "done", sequence: 3 }), - ); - expect(decision.kind).toBe("transition"); - if (decision.kind === "transition") - expect(decision.record.trigger_event_ids).toEqual([ - "obs.shim_events.0", - "obs.shim_events.1", - "obs.shim_events.2", - "obs.shim_events.3", - ]); - }); - it("applies state-entry frontiers and explicit consumption", () => { - const secondTrigger = { - ...terminalTrigger(), - since: { kind: "state_entry" as const }, - consume: true, - }; - const scenario = processReactiveScenarioSchema.parse({ - initial_state: "one", - deadline_ms: 30000, - states: [ - { - id: "one", - max_visits: 1, - deadline_ms: 5000, - on: [ - { - ...finish("advance", terminalTrigger()), - target: { kind: "goto", state: "two" }, - }, - ], - }, - { - id: "two", - max_visits: 1, - deadline_ms: 5000, - on: [finish("finish", secondTrigger)], - }, - ], - }); - const advanced = offer( - scenario, - createProcessReactiveSnapshot(scenario), - observation("terminal_raw", 0, { data: "Ready" }), - ); - expect(advanced.kind).toBe("transition"); - const waiting = offer( - scenario, - advanced.snapshot, - observation("shim", 1, { name: "unrelated" }), - ); - expect(waiting.kind).toBe("waiting"); - const finished = offer( - scenario, - waiting.snapshot, - observation("terminal_raw", 2, { data: "Ready" }), - ); - expect(finished.kind).toBe("transition"); - expect(finished.snapshot.consumed_event_ids).toEqual(["obs.frames.2"]); - }); -}); - -describe("process reactive runtime: visit and deadline classification", () => { - it("rejects an exhausted state visit before proposing effects", () => { - const scenario = processReactiveScenarioSchema.parse({ - initial_state: "loop", - deadline_ms: 30000, - states: [ - { - id: "loop", - max_visits: 1, - deadline_ms: 5000, - on: [ - { - ...finish("again", terminalTrigger(), 100, [ - { - type: "send_signal", - target: { kind: "root" }, - signal: "SIGKILL", - }, - ]), - target: { kind: "goto", state: "loop" }, - }, - ], - }, - ], - }); - const decision = reduceProcessReactiveScenario( - scenario, - createProcessReactiveSnapshot(scenario), - { - kind: "observation", - observation: observation("terminal_raw", 0, { data: "Ready" }), - }, - ); - expect(decision).toMatchObject({ - kind: "finished", - outcome: "capture_incomplete", - }); - expect(decision).not.toHaveProperty("effects"); - }); - it("classifies deadlines and non-monotonic observation input", () => { - const scenario = scenarioWith([finish("ready", terminalTrigger())]); - const initial = createProcessReactiveSnapshot(scenario); - expect( - reduceProcessReactiveScenario(scenario, initial, { - kind: "state_deadline", - state_id: "starting", - state_entry_capture_order: 0, - }), - ).toMatchObject({ kind: "finished", outcome: "predicate_timeout" }); - expect( - reduceProcessReactiveScenario(scenario, initial, { - kind: "state_deadline", - state_id: "previous", - state_entry_capture_order: 0, - }), - ).toMatchObject({ kind: "waiting", snapshot: initial }); - expect( - reduceProcessReactiveScenario(scenario, initial, { - kind: "scenario_deadline", - }), - ).toMatchObject({ kind: "finished", outcome: "scenario_deadline" }); - expect( - reduceProcessReactiveScenario(scenario, initial, { kind: "cancelled" }), - ).toMatchObject({ kind: "finished", outcome: "cancelled" }); - expect( - reduceProcessReactiveScenario(scenario, initial, { - kind: "cleanup_failed", - }), - ).toMatchObject({ kind: "finished", outcome: "cleanup_failed" }); - const passed = offer( - scenario, - initial, - observation("terminal_raw", 0, { data: "Ready" }), - ); - expect( - reduceProcessReactiveScenario(scenario, passed.snapshot, { - kind: "cleanup_failed", - }), - ).toMatchObject({ kind: "finished", outcome: "cleanup_failed" }); - const first = offer( - scenario, - initial, - observation("shim", 1, { name: "later" }), - ); - const invalid = offer( - scenario, - first.snapshot, - observation("shim", 0, { name: "earlier" }), - ); - expect(invalid).toMatchObject({ - kind: "finished", - outcome: "capture_incomplete", - }); - const duplicate = observation("shim", 1, { name: "later" }); - expect(offer(scenario, first.snapshot, duplicate)).toMatchObject({ - kind: "finished", - outcome: "capture_incomplete", - }); - expect( - offer(scenario, first.snapshot, { - ...duplicate, - payload: { name: "changed" }, - }), - ).toMatchObject({ kind: "finished", outcome: "capture_incomplete" }); - }); -}); diff --git a/src/domain/processReactiveRuntime.ts b/src/domain/processReactiveRuntime.ts deleted file mode 100644 index 4e122ef68..000000000 --- a/src/domain/processReactiveRuntime.ts +++ /dev/null @@ -1,287 +0,0 @@ -import type { ProcessObservation } from "./processObservation.js"; -import { matchProcessReactiveTrigger } from "./processReactiveMatching.js"; -import { - type ProcessReactiveAction, - type ProcessReactiveScenario, -} from "./processReactiveScenario.js"; -export { commitProcessReactiveProposal } from "./processReactiveTransition.js"; - -/** Terminal and failure outcomes produced by the pure reactive reducer. */ -export type ProcessReactiveOutcome = - | "passed" - | "predicate_timeout" - | "scenario_deadline" - | "ambiguous_match" - | "action_rejected" - | "target_lost" - | "capture_incomplete" - | "cancelled" - | "cleanup_failed"; - -/** Lifecycle state shared by the reducer snapshot and its durable projection. */ -export type ProcessReactiveStatus = - | { readonly status: "running"; readonly outcome: null } - | { - readonly status: "finished"; - readonly outcome: ProcessReactiveOutcome; - }; - -interface ProcessReactiveTransitionState { - readonly sequence: number; - readonly transition_id: string; - readonly state_before: string; - readonly trigger_event_ids: readonly string[]; - readonly action_event_ids: readonly string[]; - readonly action_types: readonly ProcessReactiveAction["type"][]; -} - -/** One deterministic scenario transition suitable for later Evidence projection. */ -export type ProcessReactiveTransitionRecord = ProcessReactiveTransitionState & - ( - | { readonly state_after: string; readonly outcome: null } - | { readonly state_after: null; readonly outcome: "passed" } - ); - -interface Counter { - readonly id: string; - readonly count: number; -} - -interface ReactiveCheckpoint { - readonly name: string; - readonly event_id: string; - readonly capture_order: number; -} - -interface ProcessReactiveSnapshotState { - readonly active_state: string; - readonly state_entry_capture_order: number; - readonly observations: readonly ProcessObservation[]; - readonly consumed_event_ids: readonly string[]; - readonly transition_uses: readonly Counter[]; - readonly state_visits: readonly Counter[]; - readonly checkpoints: readonly ReactiveCheckpoint[]; - readonly transitions: readonly ProcessReactiveTransitionRecord[]; -} - -/** Immutable reducer state owned by one validated reactive scenario run. */ -export type ProcessReactiveSnapshot = ProcessReactiveSnapshotState & - ProcessReactiveStatus; - -/** External fact offered to the pure reducer. */ -export type ProcessReactiveInput = - | { readonly kind: "observation"; readonly observation: ProcessObservation } - | { - readonly kind: "state_deadline"; - readonly state_id: string; - readonly state_entry_capture_order: number; - } - | { readonly kind: "scenario_deadline" } - | { readonly kind: "target_lost" } - | { readonly kind: "cancelled" } - | { readonly kind: "cleanup_failed" }; - -/** Per-transition matching summary returned without caller payloads. */ -export interface ProcessReactiveEvaluation { - readonly transition_id: string; - readonly status: "matched" | "unmatched" | "exhausted"; - readonly matched_event_ids: readonly string[]; -} - -/** Host acknowledgement for one proposed declarative effect. */ -export type ProcessReactiveEffectResult = - | { - readonly status: "succeeded"; - readonly observation: ProcessObservation; - } - | { readonly status: "rejected" } - | { readonly status: "target_lost" }; - -/** Immutable transition proposal awaiting host effect results. */ -export interface ProcessReactiveTransitionProposal { - readonly transition_id: string; - readonly transition_identity: string; - readonly observation_event_id: string; - readonly trigger_event_ids: readonly string[]; - readonly consume_event_ids: readonly string[]; -} - -/** Pure scenario decision; effects remain declarative for an authorized host. */ -export type ProcessReactiveDecision = - | { - readonly kind: "waiting" | "already_finished"; - readonly snapshot: ProcessReactiveSnapshot; - readonly evaluations: readonly ProcessReactiveEvaluation[]; - } - | { - readonly kind: "proposal"; - readonly snapshot: ProcessReactiveSnapshot; - readonly evaluations: readonly ProcessReactiveEvaluation[]; - readonly effects: readonly ProcessReactiveAction[]; - readonly proposal: ProcessReactiveTransitionProposal; - } - | { - readonly kind: "transition"; - readonly snapshot: ProcessReactiveSnapshot; - readonly evaluations: readonly ProcessReactiveEvaluation[]; - readonly record: ProcessReactiveTransitionRecord; - } - | { - readonly kind: "finished"; - readonly snapshot: ProcessReactiveSnapshot; - readonly evaluations: readonly ProcessReactiveEvaluation[]; - readonly outcome: ProcessReactiveOutcome; - }; - -const counterValue = (counters: readonly Counter[], id: string): number => - counters.find((counter) => counter.id === id)?.count ?? 0; - -type ObservationAdmission = - | { readonly kind: "new"; readonly snapshot: ProcessReactiveSnapshot } - | { readonly kind: "invalid" }; - -const observeInput = ( - snapshot: ProcessReactiveSnapshot, - observation: ProcessObservation, -): ObservationAdmission => { - const duplicate = snapshot.observations.find( - ({ event_id }) => event_id === observation.event_id, - ); - if (duplicate !== undefined) return { kind: "invalid" }; - const prior = snapshot.observations.at(-1); - if (prior !== undefined && observation.capture_order <= prior.capture_order) - return { kind: "invalid" }; - return { - kind: "new", - snapshot: { - ...snapshot, - observations: [...snapshot.observations, observation], - }, - }; -}; - -/** Create the initial immutable reducer state for one validated scenario. */ -export const createProcessReactiveSnapshot = ( - scenario: ProcessReactiveScenario, -): ProcessReactiveSnapshot => ({ - status: "running", - outcome: null, - active_state: scenario.initial_state, - state_entry_capture_order: 0, - observations: [], - consumed_event_ids: [], - transition_uses: [], - state_visits: [{ id: scenario.initial_state, count: 1 }], - checkpoints: [], - transitions: [], -}); - -const finishedDecision = ( - snapshot: ProcessReactiveSnapshot, - outcome: ProcessReactiveOutcome, - evaluations: readonly ProcessReactiveEvaluation[] = [], -): ProcessReactiveDecision => ({ - kind: "finished", - outcome, - evaluations, - snapshot: { ...snapshot, status: "finished", outcome }, -}); - -const reduceControlInput = ( - snapshot: ProcessReactiveSnapshot, - input: ProcessReactiveInput, -): ProcessReactiveDecision | null => { - if (input.kind === "cleanup_failed") - return finishedDecision(snapshot, "cleanup_failed"); - if (snapshot.status === "finished") - return { kind: "already_finished", snapshot, evaluations: [] }; - if (input.kind === "observation") return null; - if (input.kind === "state_deadline") - return input.state_id === snapshot.active_state && - input.state_entry_capture_order === snapshot.state_entry_capture_order - ? finishedDecision(snapshot, "predicate_timeout") - : { kind: "waiting", snapshot, evaluations: [] }; - if (input.kind === "scenario_deadline") - return finishedDecision(snapshot, "scenario_deadline"); - if (input.kind === "target_lost") - return finishedDecision(snapshot, "target_lost"); - return finishedDecision(snapshot, "cancelled"); -}; - -/** Advance one validated scenario using only an observation or explicit deadline. */ -export const reduceProcessReactiveScenario = ( - scenario: ProcessReactiveScenario, - snapshot: ProcessReactiveSnapshot, - input: ProcessReactiveInput, -): ProcessReactiveDecision => { - const controlDecision = reduceControlInput(snapshot, input); - if (controlDecision !== null) return controlDecision; - if (input.kind !== "observation") - return finishedDecision(snapshot, "capture_incomplete"); - const admitted = observeInput(snapshot, input.observation); - if (admitted.kind === "invalid") - return finishedDecision(snapshot, "capture_incomplete"); - const observed = admitted.snapshot; - const state = scenario.states.find(({ id }) => id === observed.active_state); - if (state === undefined) return finishedDecision(observed, "target_lost"); - const matches = state.on.map((transition) => ({ - transition, - match: matchProcessReactiveTrigger(transition.when, observed), - uses: counterValue(observed.transition_uses, transition.id), - })); - const evaluations: ProcessReactiveEvaluation[] = matches.map( - ({ transition, match, uses }) => ({ - transition_id: transition.id, - status: - uses >= transition.max_uses - ? "exhausted" - : match.matched - ? "matched" - : "unmatched", - matched_event_ids: match.eventIds, - }), - ); - const eligible = matches.filter( - ({ transition, match, uses }) => - match.matched && uses < transition.max_uses, - ); - if (eligible.length === 0) - return { kind: "waiting", snapshot: observed, evaluations }; - const minimumPriority = eligible.reduce( - (minimum, { transition }) => Math.min(minimum, transition.priority), - Number.POSITIVE_INFINITY, - ); - const winners = eligible.filter( - ({ transition }) => transition.priority === minimumPriority, - ); - if (winners.length !== 1) - return finishedDecision(observed, "ambiguous_match", evaluations); - const winner = winners[0]; - if (winner === undefined) - return finishedDecision(observed, "capture_incomplete", evaluations); - const targetDeclaration = winner.transition.target; - if (targetDeclaration.kind === "goto") { - const target = scenario.states.find( - ({ id }) => id === targetDeclaration.state, - ); - if ( - target === undefined || - counterValue(observed.state_visits, target.id) >= target.max_visits - ) - return finishedDecision(observed, "capture_incomplete", evaluations); - } - return { - kind: "proposal", - snapshot: observed, - evaluations, - effects: winner.transition.actions, - proposal: { - transition_id: winner.transition.id, - transition_identity: canonicalize(winner.transition) ?? "", - observation_event_id: input.observation.event_id, - trigger_event_ids: winner.match.eventIds, - consume_event_ids: winner.match.consumeIds, - }, - }; -}; -import canonicalize from "canonicalize"; diff --git a/src/domain/processReactiveScenario.test.ts b/src/domain/processReactiveScenario.test.ts deleted file mode 100644 index 929a5b69d..000000000 --- a/src/domain/processReactiveScenario.test.ts +++ /dev/null @@ -1,504 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { - PROCESS_REACTIVE_LIMITS, - processReactiveScenarioSchema, -} from "./processReactiveScenario.js"; - -const terminalTrigger = () => ({ - kind: "terminal_text" as const, - literal: "Ready", -}); - -const finishTransition = () => ({ - id: "finish", - priority: 100, - max_uses: 1, - when: terminalTrigger(), - actions: [{ type: "checkpoint" as const, name: "ready" }], - target: { kind: "finish" as const }, -}); - -const baseScenario = () => ({ - initial_state: "starting", - deadline_ms: 30_000, - states: [ - { - id: "starting", - max_visits: 1, - deadline_ms: 5_000, - on: [finishTransition()], - }, - ], -}); - -const buildLargeCallerScenario = () => { - const states = Array.from({ length: 40 }, (_, index) => ({ - id: `state_${String(index)}`, - max_visits: 300, - deadline_ms: 30_000, - on: [] as unknown[], - })); - const manyPredicates = { - kind: "repeat", - trigger: { - kind: "all", - triggers: Array.from({ length: 20 }, () => terminalTrigger()), - }, - min: 1, - max: 1_000, - }; - const sendInputs = Array.from({ length: 300 }, () => ({ - type: "send_input", - data: "x", - })); - states[0]!.on = Array.from({ length: 130 }, (_, index) => ({ - id: `transition_${String(index)}`, - priority: index, - max_uses: 300, - when: index === 0 ? manyPredicates : terminalTrigger(), - actions: index === 0 ? sendInputs : [], - target: - index > 0 && index <= 39 - ? { kind: "goto", state: `state_${String(index)}` } - : { kind: "finish" }, - })); - for (let index = 1; index < states.length; index += 1) { - const state = states[index]!; - state.on = [ - { - ...finishTransition(), - id: `finish_${String(index)}`, - max_uses: 300, - actions: [{ type: "checkpoint", name: `ready_${String(index)}` }], - }, - ]; - } - return processReactiveScenarioSchema.safeParse({ - initial_state: "state_0", - deadline_ms: 30_000, - states, - }); -}; - -/** - * The field each rejection row below is meant to invalidate. Asserting only - * that the scenario is rejected would still pass if a typo in the fixture - * made it invalid for an unrelated reason, so each row must also produce an - * issue pointing at the intended path with the expected code. - */ -const REJECTION_FIELD: Readonly< - Record< - string, - { readonly path: readonly (string | number)[]; readonly code: string } - > -> = { - "unknown major version": { path: [], code: "unrecognized_keys" }, - "missing state bound": { - path: ["states", 0, "max_visits"], - code: "invalid_type", - }, - "missing transition bound": { - path: ["states", 0, "on", 0, "max_uses"], - code: "invalid_type", - }, - "unsupported trigger": { - path: ["states", 0, "on", 0, "when", "kind"], - code: "invalid_union", - }, - "zero-minimum event absence predicate": { - path: ["states", 0, "on", 0, "when", "cardinality", "min"], - code: "too_small", - }, -}; - -describe("process reactive scenario schema", () => { - it("parses a terminal scenario", () => { - expect(processReactiveScenarioSchema.parse(baseScenario())).toMatchObject({ - initial_state: "starting", - states: [ - { - on: [ - { - when: { - occurrence: 1, - since: { kind: "scenario_start" }, - consume: false, - }, - }, - ], - }, - ], - }); - }); - - it("accepts caller-defined scenario sizes without count ceilings", () => { - const parsed = buildLargeCallerScenario(); - expect( - parsed.success, - parsed.success ? "" : JSON.stringify(parsed.error.issues), - ).toBe(true); - }); - - it("accepts long caller supplied identifiers, terminal matchers, and input", () => { - const identifier = `transition_${"x".repeat(128)}`; - const checkpoint = `checkpoint_${"x".repeat(128)}`; - const literal = "Ready".repeat(2_001); - const data = "input".repeat(200_001); - const parsed = processReactiveScenarioSchema.safeParse({ - initial_state: "starting", - deadline_ms: 30_000, - states: [ - { - id: "starting", - max_visits: 1, - deadline_ms: 5_000, - on: [ - { - ...finishTransition(), - id: identifier, - when: { ...terminalTrigger(), literal }, - actions: [ - { type: "checkpoint", name: checkpoint }, - { type: "send_input", data }, - ], - }, - ], - }, - ], - }); - - expect(parsed.success).toBe(true); - if (parsed.success) { - expect(parsed.data.states[0]?.on[0]?.id).toBe(identifier); - expect(parsed.data.states[0]?.on[0]?.when).toMatchObject({ literal }); - expect(parsed.data.states[0]?.on[0]?.actions[1]).toMatchObject({ data }); - } - }); - - it.each([ - ["unknown major version", { ...baseScenario(), version: 2 }], - [ - "missing state bound", - { - ...baseScenario(), - states: [ - { id: "starting", deadline_ms: 5_000, on: [finishTransition()] }, - ], - }, - ], - [ - "missing transition bound", - { - ...baseScenario(), - states: [ - { - id: "starting", - max_visits: 1, - deadline_ms: 5_000, - on: [{ ...finishTransition(), max_uses: undefined }], - }, - ], - }, - ], - [ - "unsupported trigger", - { - ...baseScenario(), - states: [ - { - id: "starting", - max_visits: 1, - deadline_ms: 5_000, - on: [{ ...finishTransition(), when: { kind: "callback" } }], - }, - ], - }, - ], - [ - "zero-minimum event absence predicate", - { - ...baseScenario(), - states: [ - { - ...baseScenario().states[0], - on: [ - { - ...finishTransition(), - when: { - kind: "event", - source: "shim", - exact: { name: "missing" }, - ignore_fields: [], - since: { kind: "scenario_start" }, - consume: false, - cardinality: { min: 0, max: 1 }, - }, - }, - ], - }, - ], - }, - ], - ])("rejects %s at the expected field", (_name, input) => { - const expected = REJECTION_FIELD[_name]; - expect(expected, `no expected rejection field for ${_name}`).toBeDefined(); - if (expected === undefined) return; - const parsed = processReactiveScenarioSchema.safeParse(input); - expect(parsed.success).toBe(false); - if (parsed.success) return; - expect( - parsed.error.issues.map((issue) => ({ - path: issue.path, - code: issue.code, - })), - ).toContainEqual({ path: [...expected.path], code: expected.code }); - }); -}); - -describe("process reactive scenario graph validation", () => { - it("rejects unknown targets, unreachable states, and duplicate transition ids", () => { - const input = { - ...baseScenario(), - states: [ - { - id: "starting", - max_visits: 1, - deadline_ms: 5_000, - on: [ - { - ...finishTransition(), - target: { kind: "goto" as const, state: "missing" }, - }, - ], - }, - { - id: "unreachable", - max_visits: 1, - deadline_ms: 5_000, - on: [finishTransition()], - }, - ], - }; - const result = processReactiveScenarioSchema.safeParse(input); - expect(result.success).toBe(false); - if (!result.success) - expect(result.error.issues.map(({ message }) => message)).toEqual( - expect.arrayContaining([ - "transition target state is not declared", - "state is unreachable from the initial state", - "transition ids must be unique", - ]), - ); - }); - - it("accepts only explicitly bounded cycles", () => { - const cycle = { - initial_state: "one", - deadline_ms: 10_000, - states: [ - { - id: "one", - max_visits: 2, - deadline_ms: 2_000, - on: [ - { - ...finishTransition(), - id: "to_two", - max_uses: 2, - actions: [], - target: { kind: "goto" as const, state: "two" }, - }, - ], - }, - { - id: "two", - max_visits: 2, - deadline_ms: 2_000, - on: [ - { - ...finishTransition(), - id: "to_one", - max_uses: 2, - actions: [], - target: { kind: "goto" as const, state: "one" }, - }, - ], - }, - ], - }; - expect(processReactiveScenarioSchema.safeParse(cycle).success).toBe(true); - const unbounded = { - ...cycle, - states: cycle.states.map((state) => ({ - ...state, - max_visits: undefined, - })), - }; - expect(processReactiveScenarioSchema.safeParse(unbounded).success).toBe( - false, - ); - }); -}); - -describe("process reactive scenario checkpoint validation", () => { - it("rejects impossible checkpoint frontiers and volatile exact fields", () => { - const exact = { - kind: "event" as const, - source: "http" as const, - exact: { sequence: 0, path: "/ready" }, - ignore_fields: ["sequence" as const], - since: { kind: "checkpoint" as const, name: "missing" }, - consume: false, - cardinality: { min: 1, max: 1 }, - }; - const input = { - ...baseScenario(), - states: [ - { - ...baseScenario().states[0], - on: [{ ...finishTransition(), when: exact, actions: [] }], - }, - ], - }; - const result = processReactiveScenarioSchema.safeParse(input); - expect(result.success).toBe(false); - if (!result.success) - expect(result.error.issues.map(({ message }) => message)).toEqual( - expect.arrayContaining([ - "exact payload must omit every ignored field", - "checkpoint frontier is not definitely available before this transition", - ]), - ); - }); - - it("rejects checkpoint frontiers produced only by self or later transitions", () => { - const checkpointTrigger = (name: string) => ({ - ...terminalTrigger(), - since: { kind: "checkpoint" as const, name }, - }); - const input = { - initial_state: "one", - deadline_ms: 10_000, - states: [ - { - id: "one", - max_visits: 1, - deadline_ms: 2_000, - on: [ - { - ...finishTransition(), - id: "self", - when: checkpointTrigger("self_checkpoint"), - actions: [ - { type: "checkpoint" as const, name: "self_checkpoint" }, - ], - target: { kind: "goto" as const, state: "two" }, - }, - ], - }, - { - id: "two", - max_visits: 1, - deadline_ms: 2_000, - on: [ - { - ...finishTransition(), - id: "later", - when: checkpointTrigger("later_checkpoint"), - actions: [ - { type: "checkpoint" as const, name: "later_checkpoint" }, - ], - }, - ], - }, - ], - }; - const result = processReactiveScenarioSchema.safeParse(input); - expect(result.success).toBe(false); - if (!result.success) - expect( - result.error.issues.filter(({ message }) => - message.includes("not definitely available"), - ), - ).toHaveLength(2); - }); -}); - -describe("process reactive scenario nesting validation", () => { - it("rejects trigger trees beyond the declared depth", () => { - let trigger: unknown = terminalTrigger(); - for ( - let depth = 0; - depth < PROCESS_REACTIVE_LIMITS.triggerDepth; - depth += 1 - ) - trigger = { kind: "repeat", trigger, min: 1, max: 1 }; - const input = { - ...baseScenario(), - states: [ - { - ...baseScenario().states[0], - on: [{ ...finishTransition(), when: trigger }], - }, - ], - }; - const result = processReactiveScenarioSchema.safeParse(input); - expect(result.success).toBe(false); - if (!result.success) - expect(result.error.issues.map(({ message }) => message)).toContain( - "trigger nesting exceeds the configured limit", - ); - - let hostile: unknown = terminalTrigger(); - for (let depth = 0; depth < 10_000; depth += 1) - hostile = { kind: "repeat", trigger: hostile, min: 1, max: 1 }; - const hostileInput = { - ...input, - states: [ - { - ...input.states[0], - on: [{ ...finishTransition(), when: hostile }], - }, - ], - }; - expect(() => - processReactiveScenarioSchema.safeParse(hostileInput), - ).not.toThrow(); - expect(processReactiveScenarioSchema.safeParse(hostileInput).success).toBe( - false, - ); - - let deepJson: unknown = "leaf"; - for (let depth = 0; depth < 10_000; depth += 1) - deepJson = { child: deepJson }; - const deepJsonInput = { - ...input, - states: [ - { - ...input.states[0], - on: [ - { - ...finishTransition(), - when: { - kind: "event", - source: "shim", - exact: deepJson, - ignore_fields: [], - since: { kind: "scenario_start" }, - consume: false, - cardinality: { min: 1, max: 1 }, - }, - }, - ], - }, - ], - }; - expect(() => - processReactiveScenarioSchema.safeParse(deepJsonInput), - ).not.toThrow(); - expect(processReactiveScenarioSchema.safeParse(deepJsonInput).success).toBe( - false, - ); - }); -}); diff --git a/src/domain/processReactiveScenario.ts b/src/domain/processReactiveScenario.ts deleted file mode 100644 index bdbe46183..000000000 --- a/src/domain/processReactiveScenario.ts +++ /dev/null @@ -1,426 +0,0 @@ -import { z } from "zod"; - -import { jsonValueSchema } from "./jsonValue.js"; -import { processObservationSourceSchema } from "./processObservation.js"; -import { definitelyAvailableCheckpoints } from "./processReactiveCheckpointDataflow.js"; -import { preflightProcessReactiveScenario } from "./processReactiveScenarioPreflight.js"; - -/** Structural depth guard for recursive Zod parsing. */ -export const PROCESS_REACTIVE_LIMITS = { - // Recursive Zod schemas need a practical stack guard, not a small tree quota. - triggerDepth: 256, - jsonDepth: 256, -} as const; - -const identifierSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._-]*$/u); -const checkpointNameSchema = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]*$/u); -const positiveRuntime = z.number().int().safe().positive(); - -const frontierSchema = z.discriminatedUnion("kind", [ - z.strictObject({ kind: z.literal("scenario_start") }), - z.strictObject({ kind: z.literal("state_entry") }), - z.strictObject({ kind: z.literal("checkpoint"), name: checkpointNameSchema }), - z.strictObject({ kind: z.literal("event_id"), event_id: identifierSchema }), -]); -export type ProcessReactiveFrontier = z.infer; - -const ignoredFieldSchema = z.enum([ - "sequence", - "at_ms", - "scheduled_at_ms", - "dispatched_at_ms", - "elapsed_ms", - "files", - "effects", - "truncated", -]); - -interface EventTrigger { - readonly kind: "event"; - readonly source: z.infer; - readonly exact: z.infer; - readonly ignore_fields: readonly z.infer[]; - readonly since: ProcessReactiveFrontier; - readonly consume: boolean; - readonly cardinality: { readonly min: number; readonly max: number }; -} - -interface TerminalTextTrigger { - readonly kind: "terminal_text"; - readonly literal: string; - readonly occurrence: number; - readonly since: ProcessReactiveFrontier; - readonly consume: boolean; -} - -type TriggerGroup = - | { - readonly kind: "all"; - readonly triggers: readonly ProcessReactiveTrigger[]; - } - | { - readonly kind: "any"; - readonly triggers: readonly ProcessReactiveTrigger[]; - } - | { - readonly kind: "sequence"; - readonly triggers: readonly ProcessReactiveTrigger[]; - }; - -interface RepeatTrigger { - readonly kind: "repeat"; - readonly trigger: ProcessReactiveTrigger; - readonly min: number; - readonly max: number; -} - -/** Declarative, bounded predicate tree evaluated against process observations. */ -export type ProcessReactiveTrigger = - | EventTrigger - | TerminalTextTrigger - | TriggerGroup - | RepeatTrigger; - -const processReactiveTriggerSchema: z.ZodType = z.lazy( - () => - z.discriminatedUnion("kind", [ - z.strictObject({ - kind: z.literal("event"), - source: processObservationSourceSchema, - exact: jsonValueSchema, - ignore_fields: z - .array(ignoredFieldSchema) - .default([]) - .refine((values) => new Set(values).size === values.length, { - message: "ignored event fields must be unique", - }), - since: frontierSchema.default({ kind: "scenario_start" }), - consume: z.boolean().default(false), - cardinality: z - .strictObject({ - min: z.number().int().safe().positive(), - max: z.number().int().safe().positive(), - }) - .default({ min: 1, max: 1 }) - .refine(({ min, max }) => min <= max, { - message: "cardinality min must not exceed max", - }), - }), - z.strictObject({ - kind: z.literal("terminal_text"), - literal: z.string().min(1), - occurrence: z.number().int().safe().positive().default(1), - since: frontierSchema.default({ kind: "scenario_start" }), - consume: z.boolean().default(false), - }), - z.strictObject({ - kind: z.literal("all"), - triggers: z.array(processReactiveTriggerSchema).min(2), - }), - z.strictObject({ - kind: z.literal("any"), - triggers: z.array(processReactiveTriggerSchema).min(2), - }), - z.strictObject({ - kind: z.literal("sequence"), - triggers: z.array(processReactiveTriggerSchema).min(1), - }), - z - .strictObject({ - kind: z.literal("repeat"), - trigger: processReactiveTriggerSchema, - min: z.number().int().safe().positive(), - max: z.number().int().safe().positive(), - }) - .refine(({ min, max }) => min <= max, { - message: "repeat min must not exceed max", - }), - ]), -); - -const signalTargetSchema = z.discriminatedUnion("kind", [ - z.strictObject({ kind: z.literal("root") }), - z.strictObject({ kind: z.literal("process_group") }), - z.strictObject({ - kind: z.literal("subject_id"), - subject_id: identifierSchema, - }), -]); - -const processReactiveActionSchema = z.discriminatedUnion("type", [ - z.strictObject({ - type: z.literal("send_input"), - data: z.string(), - sensitive: z.boolean().default(false), - }), - z.strictObject({ - type: z.literal("resize"), - columns: z.number().int().positive(), - rows: z.number().int().positive(), - }), - z.strictObject({ type: z.literal("close_stdin") }), - z.strictObject({ - type: z.literal("send_signal"), - target: signalTargetSchema, - signal: z.enum(["SIGINT", "SIGTERM", "SIGKILL"]), - }), - z.strictObject({ type: z.literal("checkpoint"), name: checkpointNameSchema }), -]); -export type ProcessReactiveAction = z.infer; - -const transitionTargetSchema = z.discriminatedUnion("kind", [ - z.strictObject({ kind: z.literal("goto"), state: identifierSchema }), - z.strictObject({ kind: z.literal("finish") }), -]); - -const transitionSchema = z.strictObject({ - id: identifierSchema, - priority: z.number().int().safe().min(0), - max_uses: z.number().int().safe().positive(), - when: processReactiveTriggerSchema, - actions: z.array(processReactiveActionSchema), - target: transitionTargetSchema, -}); - -const stateSchema = z.strictObject({ - id: identifierSchema, - max_visits: z.number().int().safe().positive(), - deadline_ms: positiveRuntime, - on: z.array(transitionSchema).min(1), -}); - -const scenarioShapeSchema = z.strictObject({ - initial_state: identifierSchema, - deadline_ms: positiveRuntime, - states: z.array(stateSchema).min(1), -}); - -/** Parsed process reactive scenario declaration. */ -export type ProcessReactiveScenario = z.infer; - -type TriggerMeasurements = { - readonly depth: number; -}; - -const measureTrigger = ( - trigger: ProcessReactiveTrigger, -): TriggerMeasurements => { - if (trigger.kind === "event" || trigger.kind === "terminal_text") - return { depth: 1 }; - const children = - trigger.kind === "repeat" ? [trigger.trigger] : trigger.triggers; - const measured = children.map(measureTrigger); - return { - depth: - 1 + measured.reduce((maximum, { depth }) => Math.max(maximum, depth), 0), - }; -}; - -const collectCheckpointFrontiers = ( - trigger: ProcessReactiveTrigger, -): readonly string[] => { - if (trigger.kind === "event" || trigger.kind === "terminal_text") - return trigger.since.kind === "checkpoint" ? [trigger.since.name] : []; - const children = - trigger.kind === "repeat" ? [trigger.trigger] : trigger.triggers; - return children.flatMap(collectCheckpointFrontiers); -}; - -const validateTriggerSemantics = ( - trigger: ProcessReactiveTrigger, - path: PropertyKey[], - context: z.RefinementCtx, -): void => { - if (trigger.kind === "event") { - const exact = trigger.exact; - if ( - trigger.ignore_fields.length > 0 && - (typeof exact !== "object" || exact === null || Array.isArray(exact)) - ) - context.addIssue({ - code: "custom", - message: "ignored fields require an exact object payload", - path: [...path, "ignore_fields"], - }); - if ( - typeof exact === "object" && - exact !== null && - !Array.isArray(exact) && - trigger.ignore_fields.some((field) => field in exact) - ) - context.addIssue({ - code: "custom", - message: "exact payload must omit every ignored field", - path: [...path, "exact"], - }); - return; - } - if (trigger.kind === "terminal_text") return; - if (trigger.kind === "repeat") { - validateTriggerSemantics(trigger.trigger, [...path, "trigger"], context); - return; - } - for (const [index, child] of trigger.triggers.entries()) - validateTriggerSemantics(child, [...path, "triggers", index], context); -}; - -type GraphValidation = { - readonly knownStates: ReadonlySet; - readonly transitionIds: Set; - readonly checkpoints: Set; - readonly checkpointReferences: Array<{ - readonly name: string; - readonly stateId: string; - readonly path: PropertyKey[]; - }>; - readonly adjacency: ReadonlyMap>; -}; - -type ReactiveTransition = - ProcessReactiveScenario["states"][number]["on"][number]; - -const validateTransition = (input: { - readonly stateId: string; - readonly transition: ReactiveTransition; - readonly path: PropertyKey[]; - readonly validation: GraphValidation; - readonly context: z.RefinementCtx; -}): void => { - const { transition, validation, path, context } = input; - const measured = measureTrigger(transition.when); - validateTriggerSemantics(transition.when, [...path, "when"], context); - if (measured.depth > PROCESS_REACTIVE_LIMITS.triggerDepth) - context.addIssue({ - code: "custom", - message: "trigger nesting exceeds the configured limit", - path: [...path, "when"], - }); - if (validation.transitionIds.has(transition.id)) - context.addIssue({ - code: "custom", - message: "transition ids must be unique", - path: [...path, "id"], - }); - validation.transitionIds.add(transition.id); - for (const action of transition.actions) { - if (action.type !== "checkpoint") continue; - if (validation.checkpoints.has(action.name)) - context.addIssue({ - code: "custom", - message: "checkpoint action names must be unique", - path: [...path, "actions"], - }); - validation.checkpoints.add(action.name); - } - for (const name of collectCheckpointFrontiers(transition.when)) - validation.checkpointReferences.push({ - name, - stateId: input.stateId, - path: [...path, "when"], - }); - if (transition.target.kind !== "goto") return; - if (!validation.knownStates.has(transition.target.state)) { - context.addIssue({ - code: "custom", - message: "transition target state is not declared", - path: [...path, "target", "state"], - }); - return; - } - validation.adjacency.get(input.stateId)?.add(transition.target.state); -}; - -const validateTotalsAndReferences = ( - scenario: ProcessReactiveScenario, - validation: GraphValidation, - context: z.RefinementCtx, -): void => { - const available = definitelyAvailableCheckpoints(scenario); - for (const reference of validation.checkpointReferences) - if (!available.get(reference.stateId)?.has(reference.name)) - context.addIssue({ - code: "custom", - message: - "checkpoint frontier is not definitely available before this transition", - path: reference.path, - }); -}; - -const validateReachability = ( - scenario: ProcessReactiveScenario, - stateIds: readonly string[], - validation: GraphValidation, - context: z.RefinementCtx, -): void => { - const reachable = new Set(); - const pending = validation.knownStates.has(scenario.initial_state) - ? [scenario.initial_state] - : []; - while (pending.length > 0) { - const current = pending.pop(); - if (current === undefined || reachable.has(current)) continue; - reachable.add(current); - pending.push(...(validation.adjacency.get(current) ?? [])); - } - for (const [index, id] of stateIds.entries()) - if (!reachable.has(id)) - context.addIssue({ - code: "custom", - message: "state is unreachable from the initial state", - path: ["states", index], - }); -}; - -const validateScenarioGraph = ( - scenario: ProcessReactiveScenario, - context: z.RefinementCtx, -): void => { - const stateIds = scenario.states.map(({ id }) => id); - const knownStates = new Set(stateIds); - if (knownStates.size !== stateIds.length) - context.addIssue({ - code: "custom", - message: "state ids must be unique", - path: ["states"], - }); - if (!knownStates.has(scenario.initial_state)) - context.addIssue({ - code: "custom", - message: "initial state is not declared", - path: ["initial_state"], - }); - const validation: GraphValidation = { - knownStates, - transitionIds: new Set(), - checkpoints: new Set(), - checkpointReferences: [], - adjacency: new Map(stateIds.map((id) => [id, new Set()])), - }; - for (const [stateIndex, state] of scenario.states.entries()) { - if (state.deadline_ms > scenario.deadline_ms) - context.addIssue({ - code: "custom", - message: "state deadline must not exceed scenario deadline", - path: ["states", stateIndex, "deadline_ms"], - }); - for (const [transitionIndex, transition] of state.on.entries()) - validateTransition({ - stateId: state.id, - transition, - path: ["states", stateIndex, "on", transitionIndex], - validation, - context, - }); - } - validateTotalsAndReferences(scenario, validation, context); - validateReachability(scenario, stateIds, validation, context); -}; - -/** Strict boundary schema for a bounded declarative reactive scenario. */ -export const processReactiveScenarioSchema = z.preprocess( - (input, context) => - preflightProcessReactiveScenario(input, context, PROCESS_REACTIVE_LIMITS), - scenarioShapeSchema.superRefine((scenario, context) => - validateScenarioGraph(scenario, context), - ), -); diff --git a/src/domain/processReactiveScenarioPreflight.ts b/src/domain/processReactiveScenarioPreflight.ts deleted file mode 100644 index a1b736766..000000000 --- a/src/domain/processReactiveScenarioPreflight.ts +++ /dev/null @@ -1,133 +0,0 @@ -import { z } from "zod"; - -interface ReactivePreflightLimits { - readonly triggerDepth: number; - readonly jsonDepth: number; -} - -type PendingTrigger = { readonly value: unknown; readonly depth: number }; - -interface TriggerTraversal { - readonly pending: PendingTrigger[]; - readonly context: z.RefinementCtx; - readonly limits: ReactivePreflightLimits; -} - -const isUnknownRecord = (value: unknown): value is Record => - typeof value === "object" && value !== null && !Array.isArray(value); - -const reject = (context: z.RefinementCtx, message: string): false => { - context.addIssue({ code: "custom", message }); - return false; -}; - -const inspectJsonValue = ( - value: unknown, - context: z.RefinementCtx, - limits: ReactivePreflightLimits, -): boolean => { - const pending: PendingTrigger[] = [{ value, depth: 1 }]; - const seen = new WeakSet(); - while (pending.length > 0) { - const current = pending.pop(); - if (current === undefined) break; - if (current.depth > limits.jsonDepth) - return reject( - context, - "event exact JSON exceeds the configured depth limit", - ); - if (typeof current.value !== "object" || current.value === null) continue; - if (seen.has(current.value)) - return reject(context, "event exact JSON must not contain cycles"); - seen.add(current.value); - if (Array.isArray(current.value)) { - for (const child of current.value) - pending.push({ value: child, depth: current.depth + 1 }); - continue; - } - if (!isUnknownRecord(current.value)) continue; - for (const key in current.value) { - if (!Object.hasOwn(current.value, key)) continue; - pending.push({ - value: current.value[key], - depth: current.depth + 1, - }); - } - } - return true; -}; - -const collectTriggerRoots = (states: readonly unknown[]): PendingTrigger[] => { - const pending: PendingTrigger[] = []; - for (const stateValue of states) { - if (!isUnknownRecord(stateValue) || !Array.isArray(stateValue["on"])) - continue; - for (const transitionValue of stateValue["on"]) - if (isUnknownRecord(transitionValue)) - pending.push({ value: transitionValue["when"], depth: 1 }); - } - return pending; -}; - -const enqueueTriggerChildren = ( - trigger: Record, - depth: number, - traversal: TriggerTraversal, -): boolean => { - if (trigger["kind"] === "repeat") { - traversal.pending.push({ value: trigger["trigger"], depth: depth + 1 }); - return true; - } - if ( - trigger["kind"] !== "all" && - trigger["kind"] !== "any" && - trigger["kind"] !== "sequence" - ) - return true; - const children = trigger["triggers"]; - if (!Array.isArray(children)) return true; - for (const child of children) - traversal.pending.push({ value: child, depth: depth + 1 }); - return true; -}; - -const inspectTriggerTree = ( - pending: PendingTrigger[], - context: z.RefinementCtx, - limits: ReactivePreflightLimits, -): boolean => { - while (pending.length > 0) { - const current = pending.pop(); - if (current === undefined) break; - if (current.depth > limits.triggerDepth) - return reject(context, "trigger nesting exceeds the configured limit"); - if ( - isUnknownRecord(current.value) && - current.value["kind"] === "event" && - !inspectJsonValue(current.value["exact"], context, limits) - ) - return false; - if ( - isUnknownRecord(current.value) && - !enqueueTriggerChildren(current.value, current.depth, { - pending, - context, - limits, - }) - ) - return false; - } - return true; -}; - -/** Reject oversized unknown trees before the recursive Zod schema visits them. */ -export const preflightProcessReactiveScenario = ( - input: unknown, - context: z.RefinementCtx, - limits: ReactivePreflightLimits, -): unknown => { - if (!isUnknownRecord(input) || !Array.isArray(input["states"])) return input; - const pending = collectTriggerRoots(input["states"]); - if (!inspectTriggerTree(pending, context, limits)) return z.NEVER; - return input; -}; diff --git a/src/domain/processReactiveTransition.ts b/src/domain/processReactiveTransition.ts deleted file mode 100644 index e21d92500..000000000 --- a/src/domain/processReactiveTransition.ts +++ /dev/null @@ -1,310 +0,0 @@ -import type { ProcessObservation } from "./processObservation.js"; -import type { - ProcessReactiveDecision, - ProcessReactiveEffectResult, - ProcessReactiveEvaluation, - ProcessReactiveSnapshot, - ProcessReactiveTransitionRecord, -} from "./processReactiveRuntime.js"; -import type { ProcessReactiveScenario } from "./processReactiveScenario.js"; - -type ReactiveTransition = - ProcessReactiveScenario["states"][number]["on"][number]; -type SuccessfulEffectResult = Extract< - ProcessReactiveEffectResult, - { readonly status: "succeeded" } ->; - -const createTransitionRecord = (input: { - readonly sequence: number; - readonly stateBefore: string; - readonly transition: ReactiveTransition; - readonly triggerEventIds: readonly string[]; - readonly effectResults: readonly SuccessfulEffectResult[]; -}): ProcessReactiveTransitionRecord => { - const state = { - sequence: input.sequence, - transition_id: input.transition.id, - state_before: input.stateBefore, - trigger_event_ids: input.triggerEventIds, - action_event_ids: input.effectResults.map( - ({ observation }) => observation.event_id, - ), - action_types: input.transition.actions.map(({ type }) => type), - }; - return input.transition.target.kind === "finish" - ? { - ...state, - state_after: null, - outcome: "passed", - } - : { - ...state, - state_after: input.transition.target.state, - outcome: null, - }; -}; - -const counterValue = ( - counters: readonly { readonly id: string; readonly count: number }[], - id: string, -): number => counters.find((counter) => counter.id === id)?.count ?? 0; - -const incrementCounter = ( - counters: readonly { readonly id: string; readonly count: number }[], - id: string, -) => { - let found = false; - const updated = counters.map((counter) => { - if (counter.id !== id) return counter; - found = true; - return { id, count: counter.count + 1 }; - }); - return found ? updated : [...updated, { id, count: 1 }]; -}; - -/** Commit one uniquely selected transition after its declarative effects succeed. */ -const applyProcessReactiveTransition = (input: { - readonly scenario: ProcessReactiveScenario; - readonly snapshot: ProcessReactiveSnapshot; - readonly observation: ProcessObservation; - readonly transition: ReactiveTransition; - readonly triggerEventIds: readonly string[]; - readonly consumeEventIds: readonly string[]; - readonly effectResults: readonly SuccessfulEffectResult[]; - 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 record = createTransitionRecord({ - sequence: input.snapshot.transitions.length, - stateBefore: input.snapshot.active_state, - transition: input.transition, - triggerEventIds: input.triggerEventIds, - effectResults: input.effectResults, - }); - const outcome = record.outcome; - const stateAfter = record.state_after; - 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()) { - 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: 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), - ); - const nextState = { - ...input.snapshot, - active_state: stateAfter ?? input.snapshot.active_state, - state_entry_capture_order: - stateAfter === null - ? input.snapshot.state_entry_capture_order - : completedCaptureOrder + 1, - consumed_event_ids: [...consumed], - transition_uses: incrementCounter( - input.snapshot.transition_uses, - input.transition.id, - ), - state_visits: - stateAfter === null - ? input.snapshot.state_visits - : incrementCounter(input.snapshot.state_visits, stateAfter), - checkpoints, - transitions: [...input.snapshot.transitions, record], - }; - let next: ProcessReactiveSnapshot = - outcome === null - ? { ...nextState, status: "running", outcome: null } - : { ...nextState, status: "finished", outcome }; - if (stateAfter !== null) { - const nextState = input.scenario.states.find(({ id }) => id === stateAfter); - if ( - nextState === undefined || - counterValue(next.state_visits, stateAfter) > nextState.max_visits - ) - next = { ...next, status: "finished", outcome: "capture_incomplete" }; - } - return next.outcome === "capture_incomplete" - ? { - kind: "finished", - snapshot: next, - evaluations: input.evaluations, - outcome: next.outcome, - } - : { - kind: "transition", - snapshot: next, - evaluations: input.evaluations, - record, - }; -}; - -const terminalControlObservationMatches = ( - action: Exclude< - ProcessReactiveScenario["states"][number]["on"][number]["actions"][number], - { readonly type: "checkpoint" | "send_input" } - >, - payload: Readonly>, -): boolean => { - if (action.type === "resize") - return ( - payload["type"] === "resize" && - payload["data"] === `${String(action.columns)}x${String(action.rows)}` - ); - if (action.type === "close_stdin") - return payload["type"] === "stdin_close" && payload["data"] === ""; - return payload["type"] === "signal" && payload["data"] === action.signal; -}; - -const effectObservationMatchesAction = ( - action: ProcessReactiveScenario["states"][number]["on"][number]["actions"][number], - observation: ProcessObservation, - committedSensitiveInputs: boolean, -): boolean => { - const payload = - typeof observation.payload === "object" && - observation.payload !== null && - !Array.isArray(observation.payload) - ? observation.payload - : null; - const journalIdentityMatches = - observation.source_sequence === observation.location.index && - observation.capture_order === observation.location.capture_order && - observation.event_id === - `obs.${observation.location.collection}.${String(observation.location.index)}`; - if (!journalIdentityMatches || payload === null) return false; - if (action.type === "checkpoint") - return ( - observation.source === "filesystem" && - observation.location.collection === "filesystem_checkpoints" && - payload["name"] === action.name - ); - if ( - observation.source !== "interaction" || - observation.location.collection !== "interaction_events" || - payload["outcome"] !== "dispatched" - ) - return false; - if (action.type === "send_input") - return ( - payload["type"] === "input" && - payload["data"] === - expectedInputEvidence( - action.data, - action.sensitive, - committedSensitiveInputs, - ) - ); - return terminalControlObservationMatches(action, payload); -}; - -const expectedInputEvidence = ( - data: string, - sensitive: boolean, - committedSensitiveInput: boolean, -): string => - !sensitive || - (committedSensitiveInput && /^$/.test(data)) - ? data - : ``; - -const failedProposal = ( - proposed: Extract, - outcome: "action_rejected" | "target_lost", -): ProcessReactiveDecision => ({ - kind: "finished", - outcome, - evaluations: proposed.evaluations, - snapshot: { ...proposed.snapshot, status: "finished", outcome }, -}); - -/** Commit a proposal only after the host reports every effect as successful. */ -export const commitProcessReactiveProposal = ( - scenario: ProcessReactiveScenario, - proposed: Extract, - results: readonly ProcessReactiveEffectResult[], - options: { readonly committedSensitiveInputs?: boolean } = {}, -): ProcessReactiveDecision => { - if (results.some(({ status }) => status === "target_lost")) - return failedProposal(proposed, "target_lost"); - const state = scenario.states.find( - ({ id }) => id === proposed.snapshot.active_state, - ); - const transition = state?.on.find( - ({ id }) => id === proposed.proposal.transition_id, - ); - const observation = proposed.snapshot.observations.find( - ({ event_id }) => event_id === proposed.proposal.observation_event_id, - ); - if ( - transition === undefined || - observation === undefined || - canonicalize(transition) !== proposed.proposal.transition_identity || - canonicalize(proposed.effects) !== canonicalize(transition.actions) - ) - return failedProposal(proposed, "target_lost"); - if ( - results.length !== transition.actions.length || - results.some(({ status }) => status === "rejected") - ) - return failedProposal(proposed, "action_rejected"); - const succeeded = results.filter( - ( - result, - ): result is Extract< - ProcessReactiveEffectResult, - { readonly status: "succeeded" } - > => result.status === "succeeded", - ); - let previousOrder = - proposed.snapshot.observations.find( - ({ event_id }) => event_id === proposed.proposal.observation_event_id, - )?.capture_order ?? -1; - const knownEventIds = new Set([ - ...proposed.snapshot.observations.map(({ event_id }) => event_id), - ...proposed.snapshot.transitions.flatMap( - ({ action_event_ids }) => action_event_ids, - ), - ]); - for (const [index, result] of succeeded.entries()) { - const action = transition.actions[index]; - const effectObservation = result.observation; - if ( - action === undefined || - !effectObservationMatchesAction( - action, - effectObservation, - options.committedSensitiveInputs ?? false, - ) || - !Number.isSafeInteger(effectObservation.capture_order) || - effectObservation.capture_order <= previousOrder || - knownEventIds.has(effectObservation.event_id) - ) - return failedProposal(proposed, "action_rejected"); - knownEventIds.add(effectObservation.event_id); - previousOrder = effectObservation.capture_order; - } - return applyProcessReactiveTransition({ - scenario, - snapshot: proposed.snapshot, - observation, - transition, - triggerEventIds: proposed.proposal.trigger_event_ids, - consumeEventIds: proposed.proposal.consume_event_ids, - effectResults: succeeded, - evaluations: proposed.evaluations, - }); -}; -import canonicalize from "canonicalize"; diff --git a/src/domain/processScenario.test.ts b/src/domain/processScenario.test.ts index e07f32fa2..a9cd441db 100644 --- a/src/domain/processScenario.test.ts +++ b/src/domain/processScenario.test.ts @@ -2,14 +2,33 @@ import { describe, expect, it } from "vitest"; import { processScenarioSchema } from "./processScenario.js"; -describe("process scenario collection inputs", () => { - it("accepts OS environment names without imposing shell identifier syntax", () => { +describe("direct process scenarios", () => { + it("defaults to one command with inherited environment and no filesystem scan", () => { + expect(processScenarioSchema.parse({ executable: "node" })).toMatchObject({ + executable: "node", + arguments: [], + working_directory: ".", + environment: {}, + filesystem_observation_paths: [], + events: [], + }); + }); + + it("accepts caller-selected environment and explicit filesystem observations", () => { const environment = { "app.setting": "value", "1": "numbered" }; - expect( - processScenarioSchema.parse({ executable: "node", environment }) - .environment, - ).toEqual(environment); - for (const name of ["", "KEY=VALUE", "KEY\0VALUE"]) + const scenario = processScenarioSchema.parse({ + executable: "node", + arguments: ["./task.mjs"], + working_directory: "./project", + environment, + filesystem_observation_paths: ["state"], + }); + expect(scenario.environment).toEqual(environment); + expect(scenario.filesystem_observation_paths).toEqual(["state"]); + }); + + it("rejects malformed environment names and adapter-reserved identity", () => { + for (const name of ["", "KEY=VALUE", "KEY\0VALUE", "REA_PROCESS_RUN_ID"]) expect( processScenarioSchema.safeParse({ executable: "node", @@ -18,263 +37,39 @@ describe("process scenario collection inputs", () => { ).toBe(false); }); - it("accepts more than 64 named filesystem checkpoints", () => { + it("keeps bounded capture controls and ordered scheduled interaction", () => { const scenario = processScenarioSchema.parse({ - executable: "/bin/echo", - working_directory: "/tmp", - checkpoints: Array.from({ length: 65 }, (_, index) => ({ - name: `state-${index}`, - trigger: { type: "root_exit" as const }, - })), - }); - - expect(scenario.checkpoints).toHaveLength(65); - }); - - it("allows a zero-depth filesystem observation", () => { - expect( - processScenarioSchema.parse({ - executable: "/bin/echo", - working_directory: "/tmp", - limits: { filesystem_depth: 0 }, - }).limits.filesystem_depth, - ).toBe(0); - }); - - it("accepts caller budgets above the former tool-side ceilings", () => { - const scenario = processScenarioSchema.parse({ - executable: "/bin/echo", - working_directory: "/tmp", - timeout_ms: 600_000, - idle_timeout_ms: 900_000, - settle_ms: 20_000, - limits: { - output_bytes: 10_000_001, - files: 100_001, - file_bytes: 100_000_001, - processes: 10_001, - protocol_events: 100_001, - protocol_body_bytes: 10_000_001, - connections: 1_001, - filesystem_depth: 100, - }, - checkpoints: [ - { - name: "later", - trigger: { type: "time", at_ms: 600_000 }, - }, - ], - }); - - expect(scenario.limits.output_bytes).toBe(10_000_001); - expect(scenario.limits.files).toBe(100_001); - expect(scenario.limits.file_bytes).toBe(100_000_001); - expect(scenario.limits.processes).toBe(10_001); - expect(scenario.limits.protocol_events).toBe(100_001); - expect(scenario.limits.protocol_body_bytes).toBe(10_000_001); - expect(scenario.limits.connections).toBe(1_001); - expect(scenario.limits.filesystem_depth).toBe(100); - expect(scenario.timeout_ms).toBe(600_000); - expect(scenario.idle_timeout_ms).toBe(900_000); - expect(scenario.settle_ms).toBe(20_000); - }); -}); - -describe("process scenario complete input values", () => { - it("accepts long checkpoint and command names", () => { - const checkpointName = `c${"k".repeat(1_000)}`; - const commandName = `c${"m".repeat(1_000)}`; - const scenario = processScenarioSchema.parse({ - executable: "/bin/echo", - working_directory: "/tmp", - checkpoints: [{ name: checkpointName, trigger: { type: "root_exit" } }], - command_shims: [ - { - name: commandName, - routes: [ - { - arguments: [], - termination: { type: "exit", code: 0 }, - }, - ], - }, - ], - }); - - expect(scenario.checkpoints[0]?.name).toBe(checkpointName); - expect(scenario.command_shims[0]?.name).toBe(commandName); - }); -}); - -describe("process scenario long delays", () => { - it("accepts delayed actions longer than one operating-system timer", () => { - const beyondOneTimer = 2_147_483_648; - const scenario = processScenarioSchema.parse({ - executable: "/bin/echo", - working_directory: "/tmp", - timeout_ms: beyondOneTimer + 1, - events: [{ type: "input", at_ms: beyondOneTimer, data: "later" }], - checkpoints: [ - { - name: "later", - trigger: { type: "time", at_ms: beyondOneTimer }, - }, - ], - command_shims: [ - { - name: "later", - routes: [ - { - arguments: [], - outputs: [ - { - at_ms: beyondOneTimer, - stream: "stdout", - data: "later", - }, - ], - termination: { type: "exit", code: 0 }, - }, - ], - }, - ], - replay: { - http: [ - { - method: "GET", - path: "/later", - status: 200, - body: "later", - delay_ms: beyondOneTimer, - }, - ], - websocket_connections: [ - { - messages: [{ data: "later", delay_ms: beyondOneTimer }], - }, - ], - }, - }); - - expect(scenario.events[0]?.at_ms).toBe(beyondOneTimer); - expect(scenario.checkpoints[0]?.trigger).toMatchObject({ - at_ms: beyondOneTimer, - }); - expect(scenario.command_shims[0]?.routes[0]?.outputs[0]?.at_ms).toBe( - beyondOneTimer, - ); - expect(scenario.replay.http[0]?.delay_ms).toBe(beyondOneTimer); - expect( - scenario.replay.websocket_connections[0]?.messages[0]?.delay_ms, - ).toBe(beyondOneTimer); - }); -}); - -describe("process scenario large interaction inputs", () => { - it("accepts large interaction and replay descriptions under the run budgets", () => { - const environment = Object.fromEntries( - Array.from({ length: 65 }, (_, index) => [`APP_VALUE_${index}`, "x"]), - ); - const commandShims = Array.from({ length: 33 }, (_, shimIndex) => ({ - name: `tool-${shimIndex}`, - routes: Array.from({ length: 101 }, (_, routeIndex) => ({ - arguments: [`--route-${routeIndex}`], - outputs: Array.from({ length: routeIndex === 0 ? 1_001 : 0 }, () => ({ - at_ms: 0, - stream: "stdout" as const, - data: "x", - })), - termination: { type: "exit" as const, code: 0 }, - max_calls: 101, - })), - })); - const scenario = processScenarioSchema.parse({ - executable: "/bin/echo", - arguments: Array.from({ length: 257 }, (_, index) => String(index)), - working_directory: "/tmp", - filesystem_observation_paths: Array.from( - { length: 17 }, - (_, index) => `/tmp/root-${index}`, - ), - environment, - command_shims: commandShims, - events: Array.from({ length: 1_001 }, () => ({ - type: "input" as const, - at_ms: 0, - data: "x", - })), - checkpoints: [ - { - name: "many_occurrences", - trigger: { - type: "terminal_literal", - value: "ready", - occurrence: 1_001, - }, - }, - ], - replay: { - http: Array.from({ length: 101 }, (_, index) => ({ - method: "GET", - path: `/route-${index}`, - status: 200, - body: "ok", - max_calls: 101, - })), - websocket_messages: Array.from({ length: 101 }, () => "message"), - websocket_connections: Array.from({ length: 101 }, () => ({ - messages: Array.from({ length: 101 }, () => ({ data: "message" })), - disconnect_after: false, - })), - }, - }); - - expect(scenario.arguments).toHaveLength(257); - expect(scenario.command_shims).toHaveLength(33); - expect(scenario.command_shims[0]?.routes).toHaveLength(101); - expect(scenario.command_shims[0]?.routes[0]?.outputs).toHaveLength(1_001); - expect(scenario.events).toHaveLength(1_001); - expect(scenario.filesystem_observation_paths).toHaveLength(17); - expect(scenario.checkpoints[0]?.trigger).toMatchObject({ - occurrence: 1_001, - }); - expect(scenario.replay.http).toHaveLength(101); - expect(scenario.replay.websocket_connections[0]?.messages).toHaveLength( - 101, - ); - }); -}); - -describe("minimal process scenario inputs", () => { - const scenario = { - arguments: [], - environment: {}, - filesystem_observation_paths: [], - }; - - it("defaults working directory at execution and accepts command names", () => { - const parsed = processScenarioSchema.parse({ - ...scenario, executable: "node", + events: [ + { type: "input", at_ms: 10, data: "answer", sensitive: true }, + { type: "resize", at_ms: 20, columns: 100, rows: 30 }, + { type: "signal", at_ms: 30, signal: "SIGTERM" }, + ], + limits: { output_bytes: 2_000_000, filesystem_depth: 0 }, }); - expect(parsed.working_directory).toBe("."); - expect(parsed.executable).toBe("node"); - expect(parsed.filesystem_observation_paths).toEqual([]); + expect(scenario.events).toHaveLength(3); + expect(scenario.events[0]).toMatchObject({ sensitive: true }); + expect(scenario.limits.output_bytes).toBe(2_000_000); + expect(scenario.limits.filesystem_depth).toBe(0); + }); + + it("rejects events after timeout and unknown orchestration fields", () => { + expect( + processScenarioSchema.safeParse({ + executable: "node", + timeout_ms: 10, + events: [{ type: "input", at_ms: 11, data: "late" }], + }).success, + ).toBe(false); + for (const [field, value] of [ + ["command_shims", []], + ["replay", {}], + ["reactive", {}], + ["checkpoints", []], + ] as const) + expect( + processScenarioSchema.safeParse({ executable: "node", [field]: value }) + .success, + ).toBe(false); }); }); - -describe("process scenario path portability", () => { - it.each([ - ["posix", "/usr/bin/node", "/tmp"], - ["windows drive with backslashes", "C:\\tools\\node.exe", "C:\\work"], - ["windows drive with forward slashes", "c:/tools/node.exe", "c:/work"], - ["unc share", "\\\\server\\share\\node.exe", "\\\\server\\share"], - ])( - "preserves a %s scenario on any host", - (_label, executable, working_directory) => { - expect( - processScenarioSchema.parse({ executable, working_directory }), - ).toMatchObject({ executable, working_directory }); - }, - ); -}); diff --git a/src/domain/processScenario.ts b/src/domain/processScenario.ts index 4211b3b75..040d0efcb 100644 --- a/src/domain/processScenario.ts +++ b/src/domain/processScenario.ts @@ -1,23 +1,13 @@ import { createHash } from "node:crypto"; import canonicalize from "canonicalize"; import { z } from "zod"; -import { - processReactiveScenarioSchema, - type ProcessReactiveScenario, -} from "./processReactiveScenario.js"; -import { replayMachineSchema } from "./replayMachine.js"; const positiveBudget = z.number().int().safe().positive(); const timedEventBase = { at_ms: z.number().int().safe().nonnegative() }; const environmentName = z .string() .regex(/^[^=\0]+$/u, "Environment names cannot contain '=' or NUL"); -const reservedEnvironment = new Set([ - "REA_PROCESS_RUN_ID", - "REA_REPLAY_HTTP_URL", - "REA_REPLAY_WEBSOCKET_URL", - "REA_SHIM_LEDGER_URL", -]); +const reservedEnvironment = new Set(["REA_PROCESS_RUN_ID"]); export const normalizationSchema = z.object({ paths: z.boolean(), pids: z.boolean(), @@ -30,13 +20,6 @@ export const normalizationSchema = z.object({ }), ), }); -const checkpointNameSchema = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9_-]*$/u); -const commandNameSchema = z.string().regex(/^[A-Za-z0-9][A-Za-z0-9._-]*$/u); -const outputChunkSchema = z.object({ - at_ms: z.number().int().safe().nonnegative(), - stream: z.enum(["stdout", "stderr"]), - data: z.string(), -}); /** Compute a canonical SHA-256 commitment independent of object key order. */ export const digestProcessCommitment = (value: unknown): string => { @@ -46,29 +29,6 @@ export const digestProcessCommitment = (value: unknown): string => { return createHash("sha256").update(serialized).digest("hex"); }; -const reactiveScenarioCommitment = ( - scenario: ProcessReactiveScenario | null, -): Readonly> | null => - scenario === null - ? null - : { - ...scenario, - states: scenario.states.map((state) => ({ - ...state, - on: state.on.map((transition) => ({ - ...transition, - actions: transition.actions.map((action) => - action.type === "send_input" && action.sensitive - ? { - ...action, - data: ``, - } - : action, - ), - })), - })), - }; - const committedScenarioEvents = ( events: ProcessScenario["events"], includeSensitiveInputLength: boolean, @@ -91,7 +51,6 @@ export const processScenarioCommitment = ( ): Readonly> => ({ ...scenario, events: committedScenarioEvents(scenario.events, true), - reactive: reactiveScenarioCommitment(scenario.reactive), executable_sha256: executableSha256 ?? null, }); @@ -104,7 +63,6 @@ export const processComparisonContract = ( ambient_environment: "unknown", filesystem_observation_paths: scenario.filesystem_observation_paths, terminal: scenario.terminal, - checkpoints: scenario.checkpoints, // Input bytes are intentionally absent from compatibility identity. Their // redacted observations remain unknown, so equal commitments never imply // that two secret values were the same. @@ -114,9 +72,6 @@ export const processComparisonContract = ( settle_ms: scenario.settle_ms, limits: scenario.limits, normalization: scenario.normalization, - command_shims: scenario.command_shims, - replay: scenario.replay, - reactive: reactiveScenarioCommitment(scenario.reactive), }); /** @@ -137,52 +92,6 @@ export const processScenarioSchema = z scrollback: z.number().int().min(0).default(1_000), }) .default({ columns: 80, rows: 24, scrollback: 1_000 }), - checkpoints: z - .array( - z.object({ - name: checkpointNameSchema, - trigger: z.discriminatedUnion("type", [ - z.object({ - type: z.literal("time"), - at_ms: z.number().int().safe().nonnegative(), - }), - z.object({ - type: z.literal("terminal_literal"), - value: z.string().min(1), - occurrence: positiveBudget.default(1), - }), - z.object({ type: z.literal("root_exit") }), - z.object({ type: z.literal("settled") }), - ]), - }), - ) - .default([]), - command_shims: z - .array( - z.object({ - name: commandNameSchema, - routes: z - .array( - z.object({ - arguments: z.array(z.string()), - outputs: z.array(outputChunkSchema).default([]), - termination: z.discriminatedUnion("type", [ - z.object({ - type: z.literal("exit"), - code: z.number().int().min(0).max(255), - }), - z.object({ - type: z.literal("signal"), - signal: z.enum(["SIGINT", "SIGTERM", "SIGKILL"]), - }), - ]), - max_calls: positiveBudget.default(1), - }), - ) - .min(1), - }), - ) - .default([]), events: z .array( z.discriminatedUnion("type", [ @@ -215,9 +124,6 @@ export const processScenarioSchema = z files: positiveBudget.default(10_000), file_bytes: positiveBudget.default(10_000_000), processes: positiveBudget.default(1_000), - protocol_events: positiveBudget.default(10_000), - protocol_body_bytes: positiveBudget.default(1_000_000), - connections: positiveBudget.default(100), filesystem_depth: z.number().int().safe().nonnegative().default(16), }) .strict() @@ -226,9 +132,6 @@ export const processScenarioSchema = z files: 10_000, file_bytes: 10_000_000, processes: 1_000, - protocol_events: 10_000, - protocol_body_bytes: 1_000_000, - connections: 100, filesystem_depth: 16, }), normalization: z @@ -253,47 +156,6 @@ export const processScenarioSchema = z time_bucket_ms: 10, patterns: [], }), - replay: z - .object({ - machine: replayMachineSchema.nullable().default(null), - http: z - .array( - z.object({ - method: z.string(), - path: z.string().startsWith("/"), - status: z.number().int().min(100).max(599), - body: z.string(), - request_headers: z.record(z.string(), z.string()).default({}), - request_body: z.string().optional(), - response_headers: z.record(z.string(), z.string()).default({}), - delay_ms: z.number().int().safe().nonnegative().default(0), - disconnect: z.boolean().default(false), - max_calls: positiveBudget.default(1), - }), - ) - .default([]), - websocket_messages: z.array(z.string()).default([]), - websocket_connections: z - .array( - z.object({ - messages: z.array( - z.object({ - data: z.string(), - delay_ms: z.number().int().safe().nonnegative().default(0), - }), - ), - disconnect_after: z.boolean().default(false), - }), - ) - .default([]), - }) - .default({ - machine: null, - http: [], - websocket_messages: [], - websocket_connections: [], - }), - reactive: processReactiveScenarioSchema.nullable().default(null), }) .strict() .superRefine((scenario, context) => { @@ -327,40 +189,6 @@ export const processScenarioSchema = z }); } } - const checkpointNames = scenario.checkpoints.map(({ name }) => name); - for (const [index, name] of checkpointNames.entries()) { - if (name === "before" || name === "after_settlement") - context.addIssue({ - code: "custom", - message: "checkpoint name is reserved by the capture lifecycle", - path: ["checkpoints", index, "name"], - }); - } - if (new Set(checkpointNames).size !== checkpointNames.length) - context.addIssue({ - code: "custom", - message: "checkpoint names must be unique", - path: ["checkpoints"], - }); - const shimNames = scenario.command_shims.map(({ name }) => name); - if (new Set(shimNames).size !== shimNames.length) - context.addIssue({ - code: "custom", - message: "command shim names must be unique", - path: ["command_shims"], - }); - if ( - scenario.replay.machine !== null && - (scenario.replay.http.length > 0 || - scenario.replay.websocket_messages.length > 0 || - scenario.replay.websocket_connections.length > 0) - ) - context.addIssue({ - code: "custom", - message: - "a replay machine cannot be combined with static HTTP or WebSocket scripts", - path: ["replay"], - }); }); const eventsOutOfOrder = ( diff --git a/src/domain/processTraceAdapters.test.ts b/src/domain/processTraceAdapters.test.ts index 848ab2920..26fd946b7 100644 --- a/src/domain/processTraceAdapters.test.ts +++ b/src/domain/processTraceAdapters.test.ts @@ -69,171 +69,6 @@ const traceSpecification: ProcessTraceSpecification = { }, }; -describe("declared trace comparison adapters", () => { - it("treats only explicitly ignored schedule metadata as reorderable", () => { - const httpPayload = { - protocol: "http" as const, - direction: "request" as const, - method: "GET", - path: "/status", - data: "", - outcome: "unmatched" as const, - }; - const websocketPayload = { - protocol: "websocket" as const, - direction: "received" as const, - method: null, - path: "/ws", - data: "done", - outcome: "matched" as const, - }; - const scheduledCapture = (order: "http-first" | "websocket-first") => { - const protocolEvents = - order === "http-first" - ? [ - { sequence: 0, at_ms: 1, ...httpPayload }, - { sequence: 1, at_ms: 2, ...websocketPayload }, - ] - : [ - { sequence: 0, at_ms: 1, ...websocketPayload }, - { sequence: 1, at_ms: 2, ...httpPayload }, - ]; - return parseProcessCapture({ - ...capture, - protocol_events: protocolEvents, - event_journal: [ - { - capture_order: 0, - collection: "filesystem_checkpoints", - index: 0, - }, - { capture_order: 1, collection: "protocol_events", index: 0 }, - { capture_order: 2, collection: "protocol_events", index: 1 }, - { capture_order: 3, collection: "lifecycle", index: 0 }, - { capture_order: 4, collection: "lifecycle", index: 1 }, - { - capture_order: 5, - collection: "filesystem_checkpoints", - index: 1, - }, - ], - }); - }; - const specification: ProcessTraceSpecification = { - events: [ - { - id: "status", - source: "http", - exact: httpPayload, - ignore_fields: ["sequence", "at_ms"], - cardinality: { kind: "required" }, - }, - { - id: "done", - source: "websocket", - exact: websocketPayload, - ignore_fields: ["sequence", "at_ms"], - cardinality: { kind: "required" }, - }, - ], - language: { - kind: "partial_order", - happens_before: [], - not_before: [], - unordered_groups: [{ events: ["status", "done"] }], - prefix: [], - suffix: [], - }, - }; - - expect( - compareProcessCaptures( - scheduledCapture("http-first"), - scheduledCapture("websocket-first"), - { traceSpecification: specification }, - ), - ).toMatchObject({ - status: "unchanged", - protocol: "unchanged", - trace: { - verdict: "equivalent", - left: { raw_trace: [{ event_id: "status" }, { event_id: "done" }] }, - right: { raw_trace: [{ event_id: "done" }, { event_id: "status" }] }, - }, - }); - }); -}); - -describe("declared trace comparison coverage", () => { - it("does not mask an unselected source in a covered legacy dimension", () => { - const http = { - sequence: 0, - at_ms: 1, - protocol: "http" as const, - direction: "request" as const, - method: "GET", - path: "/status", - data: "", - outcome: "unmatched" as const, - }; - const websocket = (data: string) => ({ - sequence: 1, - at_ms: 2, - protocol: "websocket" as const, - direction: "received" as const, - method: null, - path: "/ws", - data, - outcome: "matched" as const, - }); - const withProtocol = (data: string) => - parseProcessCapture({ - ...capture, - protocol_events: [http, websocket(data)], - event_journal: [ - { - capture_order: 0, - collection: "filesystem_checkpoints", - index: 0, - }, - { capture_order: 1, collection: "protocol_events", index: 0 }, - { capture_order: 2, collection: "protocol_events", index: 1 }, - { capture_order: 3, collection: "lifecycle", index: 0 }, - { capture_order: 4, collection: "lifecycle", index: 1 }, - { - capture_order: 5, - collection: "filesystem_checkpoints", - index: 1, - }, - ], - }); - const specification: ProcessTraceSpecification = { - events: [ - { - id: "status", - source: "http", - exact: http, - cardinality: { kind: "required" }, - }, - ], - language: { - kind: "finite_traces", - variants: [{ id: "status", trace: ["status"] }], - }, - }; - - expect( - compareProcessCaptures(withProtocol("left"), withProtocol("right"), { - traceSpecification: specification, - }), - ).toMatchObject({ - status: "changed", - protocol: "changed", - trace: { verdict: "equivalent" }, - }); - }); -}); - describe("declared trace comparison nonconformance", () => { it("does not call identical captures changed when both violate the language", () => { const parsedCapture = parseProcessCapture(capture); diff --git a/src/domain/processTraceComparison.fixture.ts b/src/domain/processTraceComparison.fixture.ts index 8282a2de9..d66694148 100644 --- a/src/domain/processTraceComparison.fixture.ts +++ b/src/domain/processTraceComparison.fixture.ts @@ -3,16 +3,22 @@ import { parseProcessCapture, type ProcessCapture } from "./processCapture.js"; import { type ProcessTraceSpecification } from "./processTraceComparison.js"; export const emptyCapture = parseProcessCapture(EMPTY_PROCESS_CAPTURE_EXAMPLE); +export const terminal = { sequence: 0, at_ms: 900, data: "Ready" }; +export const processStarted = { + at_ms: 1, + pid: 1, + parent_pid: 0, + command: "worker", + process_group_id: 1, + session_id: 1, +}; + export const capture = ( - values: Pick< - ProcessCapture, - | "frames" - | "process_samples" - | "filesystem_checkpoints" - | "protocol_events" - | "shim_events" - > & { - readonly event_journal: NonNullable; + values: Pick & { + readonly event_journal: readonly Pick< + NonNullable[number], + "collection" | "index" + >[]; }, options: { readonly truncated?: boolean; @@ -23,18 +29,11 @@ export const capture = ( ...emptyCapture, frames: values.frames, process_samples: values.process_samples, - filesystem_checkpoints: emptyCapture.filesystem_checkpoints, - shim_events: values.shim_events, - protocol_events: values.protocol_events, event_journal: [ - { - capture_order: 0, - collection: "filesystem_checkpoints", - index: 0, - }, - ...values.event_journal.map((entry) => ({ + { capture_order: 0, collection: "filesystem_checkpoints", index: 0 }, + ...values.event_journal.map((entry, index) => ({ ...entry, - capture_order: entry.capture_order + 1, + capture_order: index + 1, })), { capture_order: values.event_journal.length + 1, @@ -55,54 +54,18 @@ export const capture = ( truncated: options.truncated ?? false, residual_unknowns: options.residualUnknowns ?? [], }); -export const terminal = { sequence: 0, at_ms: 900, data: "Ready" }; -export const processStarted = { - at_ms: 1, - pid: 1, - parent_pid: 0, - command: "worker", - process_group_id: 1, - session_id: 1, -}; -export const http = { - sequence: 0, - at_ms: 2, - protocol: "http" as const, - direction: "request" as const, - method: "GET", - path: "/status", - data: "", - outcome: "unmatched" as const, -}; -export const websocket = { - sequence: 1, - at_ms: 3, - protocol: "websocket" as const, - direction: "received" as const, - method: null, - path: "/ws", - data: "done", - outcome: "matched" as const, -}; + export const values = ( - order: readonly ("terminal" | "process" | "http" | "websocket")[], + order: readonly ("terminal" | "process")[], ): Parameters[0] => ({ frames: [terminal], process_samples: [processStarted], - filesystem_checkpoints: [], - protocol_events: [http, websocket], - shim_events: [], - event_journal: order.map((event, captureOrder) => ({ - capture_order: captureOrder, - collection: - event === "terminal" - ? "frames" - : event === "process" - ? "process_samples" - : "protocol_events", - index: event === "websocket" ? 1 : 0, + event_journal: order.map((event) => ({ + collection: event === "terminal" ? "frames" : "process_samples", + index: 0, })), }); + export const partialSpecification = (): ProcessTraceSpecification => ({ events: [ { @@ -117,30 +80,13 @@ export const partialSpecification = (): ProcessTraceSpecification => ({ exact: processStarted, cardinality: { kind: "required" }, }, - { - id: "status", - source: "http", - exact: http, - cardinality: { kind: "required" }, - }, - { - id: "done", - source: "websocket", - exact: websocket, - cardinality: { kind: "required" }, - }, ], language: { kind: "partial_order", - happens_before: [ - { before: "ready", after: "worker" }, - { before: "ready", after: "status" }, - { before: "worker", after: "done" }, - { before: "status", after: "done" }, - ], - not_before: [{ event: "done", anchor: "ready" }], - unordered_groups: [{ events: ["worker", "status"] }], + happens_before: [{ before: "ready", after: "worker" }], + not_before: [], + unordered_groups: [], prefix: ["ready"], - suffix: ["done"], + suffix: ["worker"], }, }); diff --git a/src/domain/processTraceComparison.test.ts b/src/domain/processTraceComparison.test.ts index f0aab233e..83dc4b7db 100644 --- a/src/domain/processTraceComparison.test.ts +++ b/src/domain/processTraceComparison.test.ts @@ -8,125 +8,69 @@ import { import { capture, partialSpecification, + processStarted, terminal, values, - websocket, } from "./processTraceComparison.fixture.js"; -describe("process trace comparison: declared schedules", () => { - it("accepts only explicitly declared concurrent schedules without timestamp causality", () => { - const left = capture(values(["terminal", "process", "http", "websocket"])); - const right = capture(values(["terminal", "http", "process", "websocket"])); - const comparison = compareProcessTraces( - left, - right, - partialSpecification(), - ); - expect(comparison.verdict).toBe("equivalent"); - expect(comparison.left.raw_trace.map(({ event_id }) => event_id)).toEqual([ - "ready", - "worker", - "status", - "done", - ]); - expect(comparison.right.raw_trace.map(({ event_id }) => event_id)).toEqual([ - "ready", - "status", - "worker", - "done", - ]); - expect(comparison.left.satisfied_constraints).toContain( - "unordered:worker:status", - ); - }); - it("returns the minimal journal slice for a reversed required edge", () => { - const baseline = capture( - values(["terminal", "process", "http", "websocket"]), - ); - const reversed = capture( - values(["process", "terminal", "http", "websocket"]), - ); - const comparison = compareProcessTraces( - baseline, - reversed, - partialSpecification(), - ); - expect(comparison).toMatchObject({ +describe("generic capture trace comparison", () => { + it("requires explicit partial ordering and never infers causality from timestamps", () => { + const specification = partialSpecification(); + const left = capture(values(["terminal", "process"])); + const right = capture(values(["process", "terminal"])); + expect(compareProcessTraces(left, right, specification)).toMatchObject({ verdict: "different", - diagnostic: { - kind: "edge", - side: "right", - event_ids: ["ready", "worker"], - locations: [{ capture_order: 2 }, { capture_order: 1 }], - }, + diagnostic: { kind: "edge", side: "right" }, }); - expect( - processTraceComparisonResultSchema.safeParse({ - ...comparison, - right: { ...comparison.right, matched_variant: "invented" }, - }).success, - ).toBe(false); - }); - it("enforces explicit negative not-before constraints", () => { - const specification: ProcessTraceSpecification = { - events: [ - { - id: "ready", - source: "terminal_raw", - exact: terminal, - cardinality: { kind: "required" }, - }, - { - id: "done", - source: "websocket", - exact: websocket, - cardinality: { kind: "required" }, - }, - ], + + const concurrent: ProcessTraceSpecification = { + ...specification, language: { kind: "partial_order", happens_before: [], - not_before: [{ event: "done", anchor: "ready" }], - unordered_groups: [], + not_before: [], + unordered_groups: [{ events: ["ready", "worker"] }], prefix: [], suffix: [], }, }; - const normal = capture( - values(["terminal", "process", "http", "websocket"]), - ); - const invalid = capture( - values(["websocket", "terminal", "process", "http"]), - ); - expect(compareProcessTraces(normal, invalid, specification)).toMatchObject({ - verdict: "different", - diagnostic: { - kind: "edge", - side: "right", - event_ids: ["done", "ready"], - }, + expect(compareProcessTraces(left, right, concurrent)).toMatchObject({ + verdict: "equivalent", }); }); + + it("rejects malformed result contracts", () => { + const result = compareProcessTraces( + capture(values(["terminal", "process"])), + capture(values(["terminal", "process"])), + partialSpecification(), + ); + expect( + processTraceComparisonResultSchema.safeParse({ + ...result, + right: { + ...result.right, + status: "fail", + matched_variant: "invented", + }, + }).success, + ).toBe(false); + }); + it("supports declared optional events and bounded duplicates", () => { const first = { sequence: 0, at_ms: 1, data: "tick" }; const second = { sequence: 1, at_ms: 2, data: "tick" }; const one = capture({ frames: [first], process_samples: [], - filesystem_checkpoints: [], - protocol_events: [], - shim_events: [], - event_journal: [{ capture_order: 0, collection: "frames", index: 0 }], + event_journal: [{ collection: "frames", index: 0 }], }); const two = capture({ frames: [first, second], process_samples: [], - filesystem_checkpoints: [], - protocol_events: [], - shim_events: [], event_journal: [ - { capture_order: 0, collection: "frames", index: 0 }, - { capture_order: 1, collection: "frames", index: 1 }, + { collection: "frames", index: 0 }, + { collection: "frames", index: 1 }, ], }); const specification: ProcessTraceSpecification = { @@ -160,8 +104,8 @@ describe("process trace comparison: declared schedules", () => { }); }); -describe("process trace comparison: evidence sufficiency", () => { - it("enforces exact and range cardinality for one repeated predicate", () => { +describe("process trace constraints and evidence sufficiency", () => { + it("enforces exact and range cardinality for a repeated terminal observation", () => { const repeated = (count: number) => capture({ frames: Array.from({ length: count }, (_, sequence) => ({ @@ -170,11 +114,7 @@ describe("process trace comparison: evidence sufficiency", () => { data: "tick", })), process_samples: [], - filesystem_checkpoints: [], - protocol_events: [], - shim_events: [], event_journal: Array.from({ length: count }, (_, index) => ({ - capture_order: index, collection: "frames" as const, index, })), @@ -214,6 +154,7 @@ describe("process trace comparison: evidence sufficiency", () => { verdict: "different", diagnostic: { kind: "cardinality", side: "right" }, }); + const exactSpecification: ProcessTraceSpecification = { events: [{ ...event, cardinality: { kind: "exact", count: 2 } }], language: { @@ -231,43 +172,77 @@ describe("process trace comparison: evidence sufficiency", () => { diagnostic: { kind: "cardinality", side: "left" }, }); }); + + it("enforces an explicit not-before relation between terminal and process events", () => { + const specification: ProcessTraceSpecification = { + events: [ + { + id: "ready", + source: "terminal_raw", + exact: terminal, + cardinality: { kind: "required" }, + }, + { + id: "worker", + source: "process", + exact: processStarted, + cardinality: { kind: "required" }, + }, + ], + language: { + kind: "partial_order", + happens_before: [], + not_before: [{ event: "ready", anchor: "worker" }], + unordered_groups: [], + prefix: [], + suffix: [], + }, + }; + const readyFirst = capture(values(["terminal", "process"])); + const workerFirst = capture(values(["process", "terminal"])); + + expect( + compareProcessTraces(workerFirst, readyFirst, specification), + ).toMatchObject({ + verdict: "different", + diagnostic: { + kind: "edge", + side: "right", + event_ids: ["ready", "worker"], + }, + }); + expect( + compareProcessTraces(workerFirst, workerFirst, specification), + ).toMatchObject({ verdict: "equivalent" }); + }); + it("never proves equivalence from truncated, unknown, or journal-free evidence", () => { - const complete = capture( - values(["terminal", "process", "http", "websocket"]), - ); - const truncated = capture( - values(["terminal", "process", "http", "websocket"]), - { truncated: true }, - ); + const complete = capture(values(["terminal", "process"])); + const truncated = capture(values(["terminal", "process"]), { + truncated: true, + }); expect( compareProcessTraces(complete, truncated, partialSpecification()).verdict, ).toBe("unknown"); - const unknown = capture( - values(["terminal", "process", "http", "websocket"]), - { residualUnknowns: [{ scope: "protocol", reason: "gap" }] }, - ); + const unknown = capture(values(["terminal", "process"]), { + residualUnknowns: [{ scope: "process", reason: "sampled" }], + }); expect( compareProcessTraces(complete, unknown, partialSpecification()).verdict, ).toBe("unknown"); - const noJournal = parseProcessCapture({ - ...complete, - event_journal: [], - }); - const comparison = compareProcessTraces( - complete, - noJournal, - partialSpecification(), - ); - expect(comparison).toMatchObject({ + const noJournal = parseProcessCapture({ ...complete, event_journal: [] }); + expect( + compareProcessTraces(complete, noJournal, partialSpecification()), + ).toMatchObject({ verdict: "unknown", diagnostic: { kind: "journal", side: "right" }, }); - const incompleteJournal = { - ...complete, - event_journal: (complete.event_journal ?? []).slice(1), - }; - expect(() => parseProcessCapture(incompleteJournal)).toThrow( - "Invalid process capture: event_journal.0.capture_order", - ); + + expect(() => + parseProcessCapture({ + ...complete, + event_journal: (complete.event_journal ?? []).slice(1), + }), + ).toThrow("event_journal"); }); }); diff --git a/src/domain/processTraceDimensionProjection.ts b/src/domain/processTraceDimensionProjection.ts index 1b8386b69..2344ae28f 100644 --- a/src/domain/processTraceDimensionProjection.ts +++ b/src/domain/processTraceDimensionProjection.ts @@ -6,9 +6,7 @@ export type ProcessComparisonDimension = | "interaction" | "exit" | "filesystem" - | "protocol" - | "process" - | "shim"; + | "process"; /** Map declared trace sources to legacy process-comparison dimensions. */ export const dimensionsForTraceSources = ( @@ -20,14 +18,7 @@ export const dimensionsForTraceSources = ( else if (source === "interaction") dimensions.add("interaction"); else if (source === "lifecycle") dimensions.add("exit"); else if (source === "filesystem") dimensions.add("filesystem"); - else if ( - source === "http" || - source === "websocket" || - source === "replay_transition" - ) - dimensions.add("protocol"); else if (source === "process") dimensions.add("process"); - else if (source === "shim") dimensions.add("shim"); } return dimensions; }; @@ -56,22 +47,7 @@ export const traceCoversObservedDimension = ( return sources.has("lifecycle"); case "filesystem": return false; - case "protocol": - return ( - (![...left.protocol_events, ...right.protocol_events].some( - ({ protocol }) => protocol === "http", - ) || - sources.has("http")) && - (![...left.protocol_events, ...right.protocol_events].some( - ({ protocol }) => protocol === "websocket", - ) || - sources.has("websocket")) && - (!any(left.replay_transitions, right.replay_transitions) || - sources.has("replay_transition")) - ); case "process": return sources.has("process"); - case "shim": - return sources.has("shim"); } }; diff --git a/src/domain/processTraceEvaluation.ts b/src/domain/processTraceEvaluation.ts index 521554298..bd4569ffc 100644 --- a/src/domain/processTraceEvaluation.ts +++ b/src/domain/processTraceEvaluation.ts @@ -84,15 +84,8 @@ const scopesFor = ( [...sources].map((source) => { if (source.startsWith("terminal_")) return "terminal"; if (source === "lifecycle") return "exit"; - if ( - source === "http" || - source === "websocket" || - source === "replay_transition" - ) - return "protocol"; if (source === "filesystem") return "filesystem"; if (source === "process") return "process"; - if (source === "shim") return "shim"; return "interaction"; }), ); diff --git a/src/domain/processTraceSpecification.test.ts b/src/domain/processTraceSpecification.test.ts index 7fd64beaf..89a1f62c0 100644 --- a/src/domain/processTraceSpecification.test.ts +++ b/src/domain/processTraceSpecification.test.ts @@ -3,122 +3,44 @@ import { processTraceSpecificationSchema, type ProcessTraceSpecification, } from "./processTraceComparison.js"; -const terminal = { sequence: 0, at_ms: 900, data: "Ready" }; -const processStarted = { - at_ms: 1, + +const ready = { sequence: 0, at_ms: 10, data: "ready" }; +const worker = { + at_ms: 20, pid: 1, parent_pid: 0, command: "worker", process_group_id: 1, session_id: 1, }; -const http = { - sequence: 0, - at_ms: 2, - protocol: "http" as const, - direction: "request" as const, - method: "GET", - path: "/status", - data: "", - outcome: "unmatched" as const, -}; -const websocket = { - sequence: 1, - at_ms: 3, - protocol: "websocket" as const, - direction: "received" as const, - method: null, - path: "/ws", - data: "done", - outcome: "matched" as const, -}; -const partialSpecification = (): ProcessTraceSpecification => ({ +const specification = (): ProcessTraceSpecification => ({ events: [ { id: "ready", source: "terminal_raw", - exact: terminal, + exact: ready, cardinality: { kind: "required" }, }, { id: "worker", source: "process", - exact: processStarted, - cardinality: { kind: "required" }, - }, - { - id: "status", - source: "http", - exact: http, - cardinality: { kind: "required" }, - }, - { - id: "done", - source: "websocket", - exact: websocket, + exact: worker, cardinality: { kind: "required" }, }, ], language: { kind: "partial_order", - happens_before: [ - { before: "ready", after: "worker" }, - { before: "ready", after: "status" }, - { before: "worker", after: "done" }, - { before: "status", after: "done" }, - ], - not_before: [{ event: "done", anchor: "ready" }], - unordered_groups: [{ events: ["worker", "status"] }], + happens_before: [{ before: "ready", after: "worker" }], + not_before: [], + unordered_groups: [], prefix: ["ready"], - suffix: ["done"], + suffix: ["worker"], }, }); + describe("process trace specification", () => { - it("accepts event sets and cardinalities beyond the former fixed ceilings", () => { - const ids = Array.from({ length: 257 }, (_, index) => `event-${index}`); - const events = ids.map((id) => ({ - id, - source: "terminal_raw" as const, - exact: { id }, - cardinality: { kind: "required" as const }, - })); - const trace = processTraceSpecificationSchema.safeParse({ - events: [ - { - id: "repeated", - source: "terminal_raw", - exact: "event", - cardinality: { kind: "exact", count: 10_001 }, - }, - ], - language: { - kind: "finite_traces", - variants: [ - { - id: "long-trace", - trace: Array.from({ length: 10_001 }, () => "repeated"), - }, - ], - }, - }); - expect(trace.success).toBe(true); - - const eventSet = processTraceSpecificationSchema.safeParse({ - events, - language: { - kind: "partial_order", - happens_before: ids.slice(1).map((after, index) => ({ - before: ids[index] ?? "", - after, - })), - prefix: Array.from({ length: 4_097 }, () => ids[0] ?? ""), - }, - }); - expect(eventSet.success).toBe(true); - }); - - it("rejects cycles, implicit concurrency, overlap, and unsatisfiable variants", () => { - const base = partialSpecification(); + it("rejects cycles, implicit ordering gaps, invalid ignores, and unsatisfiable variants", () => { + const base = specification(); expect( processTraceSpecificationSchema.safeParse({ ...base, @@ -128,26 +50,20 @@ describe("process trace specification", () => { { before: "ready", after: "worker" }, { before: "worker", after: "ready" }, ], - unordered_groups: [{ events: ["status", "done"] }], }, }).success, ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ - events: base.events.slice(0, 3), - language: { - kind: "partial_order", - happens_before: [{ before: "ready", after: "status" }], - not_before: [{ event: "worker", anchor: "ready" }], - unordered_groups: [], - }, + ...base, + language: { kind: "partial_order" }, }).success, ).toBe(false); expect( processTraceSpecificationSchema.safeParse({ events: [ { - id: "invalid-ignore", + id: "bad", source: "terminal_raw", exact: "ready", ignore_fields: ["at_ms"], @@ -155,38 +71,7 @@ describe("process trace specification", () => { ], language: { kind: "finite_traces", - variants: [{ id: "one", trace: ["invalid-ignore"] }], - }, - }).success, - ).toBe(false); - expect( - processTraceSpecificationSchema.safeParse({ - events: [ - { - id: "invalid-ignore", - source: "terminal_raw", - exact: terminal, - ignore_fields: ["at_ms"], - }, - ], - language: { - kind: "finite_traces", - variants: [{ id: "one", trace: ["invalid-ignore"] }], - }, - }).success, - ).toBe(false); - expect( - processTraceSpecificationSchema.safeParse({ - events: base.events.slice(0, 2), - language: { kind: "partial_order" }, - }).success, - ).toBe(false); - expect( - processTraceSpecificationSchema.safeParse({ - events: [base.events[0], { ...base.events[0], id: "duplicate" }], - language: { - kind: "partial_order", - unordered_groups: [{ events: ["ready", "duplicate"] }], + variants: [{ id: "one", trace: ["bad"] }], }, }).success, ).toBe(false); @@ -204,17 +89,5 @@ describe("process trace specification", () => { }, }).success, ).toBe(false); - expect( - processTraceSpecificationSchema.safeParse({ - events: [base.events[0]], - language: { - kind: "finite_traces", - variants: [ - { id: "first", trace: ["ready"] }, - { id: "duplicate", trace: ["ready"] }, - ], - }, - }).success, - ).toBe(false); }); }); diff --git a/src/domain/reconstructionVerification.test.ts b/src/domain/reconstructionVerification.test.ts index bb438e706..a2a8573d6 100644 --- a/src/domain/reconstructionVerification.test.ts +++ b/src/domain/reconstructionVerification.test.ts @@ -8,6 +8,7 @@ import { } from "./reconstructionVerification.js"; import type { JsonValue } from "./jsonValue.js"; import { EMPTY_PROCESS_CAPTURE_EXAMPLE } from "./processCapture.fixture.js"; +import { reconstructionSpecificationSchema } from "./reconstructionVerificationSchemas.js"; import { ARTIFACT_COMPARISON_EXAMPLE } from "../contracts/artifactComparisonExample.js"; import { createResidualUnknown } from "./residualUnknown.js"; @@ -58,9 +59,7 @@ const processResult = ( interaction: "unchanged", exit: "unchanged", filesystem: "unchanged", - protocol: "unchanged", process: "unchanged", - shim: "unchanged", first_divergence: terminal === "changed" ? { @@ -176,7 +175,7 @@ const artifactComparison = ( ); describe("reconstruction verification", () => { - it("accepts interaction and shim behavioral claim dimensions", () => { + it("accepts real process dimensions and rejects removed protocol dimensions", () => { const left = source("1", "controlled-replay"); const right = source("2", "controlled-replay"); const result = { @@ -185,9 +184,7 @@ describe("reconstruction verification", () => { interaction: "changed", exit: "unchanged", filesystem: "unchanged", - protocol: "unchanged", process: "unchanged", - shim: "unchanged", first_divergence: { status: "found", dimension: "interaction", @@ -215,10 +212,10 @@ describe("reconstruction verification", () => { }, { kind: "behavioral", - claim_id: "shim", - title: "Shim remains equivalent", + claim_id: "process", + title: "Process behavior remains equivalent", comparison_evidence_id: comparison.evidence_id, - dimension: "shim", + dimension: "process", }, ], }, @@ -227,6 +224,22 @@ describe("reconstruction verification", () => { ).toMatchObject({ summary: { total: 2, passed: 1, failed: 1, unknown: 0 }, }); + for (const dimension of ["protocol", "shim"] as const) { + expect( + reconstructionSpecificationSchema.safeParse({ + name: "Removed process dimension", + claims: [ + { + kind: "behavioral", + claim_id: dimension, + title: "Unsupported dimension", + comparison_evidence_id: comparison.evidence_id, + dimension, + }, + ], + }).success, + ).toBe(false); + } }); it("passes a complete authoritative claim with two-sided citations", () => { diff --git a/src/domain/reconstructionVerificationSchemas.ts b/src/domain/reconstructionVerificationSchemas.ts index f79d673e0..023cd3b11 100644 --- a/src/domain/reconstructionVerificationSchemas.ts +++ b/src/domain/reconstructionVerificationSchemas.ts @@ -1,6 +1,7 @@ import { z } from "zod"; import { digestSchema } from "./../domain/digests.js"; import { prefixedDigestSchema } from "./../domain/digests.js"; +import { PROCESS_COMPARISON_DIMENSIONS } from "./processComparison.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); const unknownIdSchema = prefixedDigestSchema("unk"); @@ -16,16 +17,7 @@ const commonClaim = { const behavioralClaimSchema = z.object({ ...commonClaim, kind: z.literal("behavioral"), - dimension: z.enum([ - "overall", - "terminal", - "interaction", - "exit", - "filesystem", - "protocol", - "process", - "shim", - ]), + dimension: z.enum(["overall", ...PROCESS_COMPARISON_DIMENSIONS]), }); const functionClaimSchema = z.object({ ...commonClaim, diff --git a/src/domain/replayMachine.test.ts b/src/domain/replayMachine.test.ts deleted file mode 100644 index ff1a8180b..000000000 --- a/src/domain/replayMachine.test.ts +++ /dev/null @@ -1,332 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { replayMachineSchema } from "./replayMachine.js"; - -const loginMachine = () => ({ - initial_state: "waiting_for_login", - states: [ - { name: "waiting_for_login" }, - { name: "waiting_for_api" }, - { name: "complete", terminal: true }, - ], - transitions: [ - { - id: "login", - from: "waiting_for_login", - to: "waiting_for_api", - priority: 10, - trigger: { protocol: "http", method: "POST", path: "/login" }, - captures: [ - { - variable: "token", - value: { source: "request_json", path: ["token"] }, - sensitive: true, - }, - ], - actions: [{ type: "http_response", status: 204, headers: {}, body: "" }], - max_uses: 1, - }, - { - id: "api", - from: "waiting_for_api", - to: "complete", - priority: 10, - trigger: { protocol: "http", method: "GET", path: "/api" }, - guards: [ - { - variable: "token", - value: { source: "request_header", name: "authorization" }, - }, - ], - actions: [ - { - type: "http_response", - status: 200, - headers: {}, - body: "done", - }, - ], - max_uses: 1, - }, - ], - max_transitions: 2, -}); - -describe("replay machine", () => { - it("accepts a bounded, reachable, data-only login machine", () => { - expect(replayMachineSchema.parse(loginMachine())).toMatchObject({ - initial_state: "waiting_for_login", - max_transitions: 2, - }); - }); -}); - -describe("replay machine long identifiers", () => { - it("accepts long state, transition, and variable identifiers", () => { - const initialState = `s${"t".repeat(255)}`; - const terminalState = `s${"f".repeat(255)}`; - const transitionId = `t${"r".repeat(255)}`; - const variable = `v${"a".repeat(255)}`; - const machine = { - initial_state: initialState, - states: [{ name: initialState }, { name: terminalState, terminal: true }], - transitions: [ - { - id: transitionId, - from: initialState, - to: terminalState, - trigger: { protocol: "http", method: "GET", path: "/complete" }, - captures: [ - { - variable, - value: { source: "request_header", name: "x-value" }, - sensitive: false, - }, - ], - actions: [{ type: "http_response", status: 200, body: "done" }], - max_uses: 1, - }, - ], - max_transitions: 1, - }; - - expect(replayMachineSchema.parse(machine)).toMatchObject({ - initial_state: initialState, - states: [{ name: initialState }, { name: terminalState }], - transitions: [{ id: transitionId, captures: [{ variable }] }], - }); - }); -}); - -describe("replay machine long delays", () => { - it("accepts replay delays longer than one operating-system timer", () => { - const machine: unknown = { - ...loginMachine(), - transitions: loginMachine().transitions.map((transition, index) => - index === 0 - ? { - ...transition, - actions: [ - { type: "delay", duration_ms: 2_147_483_648 }, - ...transition.actions, - ], - } - : transition, - ), - }; - - expect( - replayMachineSchema.parse(machine).transitions[0]?.actions[0], - ).toEqual({ type: "delay", duration_ms: 2_147_483_648 }); - }); -}); - -describe("replay machine validation", () => { - it.each([ - [ - "unreachable state", - (machine: ReturnType) => - machine.states.push({ name: "orphan", terminal: false }), - "unreachable", - ], - [ - "ambiguous transition", - (machine: ReturnType) => { - const transition = machine.transitions[0]; - if (transition === undefined) throw new TypeError("missing transition"); - machine.transitions.push({ ...transition, id: "login_2" }); - }, - "ambiguous", - ], - [ - "outgoing terminal transition", - (machine: ReturnType) => { - const transition = machine.transitions[0]; - if (transition === undefined) throw new TypeError("missing transition"); - machine.transitions.push({ - ...transition, - id: "restart", - from: "complete", - to: "waiting_for_login", - trigger: { protocol: "http", method: "POST", path: "/restart" }, - }); - }, - "terminal", - ], - [ - "unknown guard variable", - (machine: ReturnType) => { - const guard = machine.transitions[1]?.guards?.[0]; - if (guard === undefined) throw new TypeError("missing guard"); - guard.variable = "missing"; - }, - "executable path before use", - ], - [ - "missing terminal state", - (machine: ReturnType) => { - const state = machine.states[2]; - if (state === undefined) throw new TypeError("missing state"); - state.terminal = false; - }, - "terminal state", - ], - ])("rejects %s", (_name, mutate, message) => { - const machine = loginMachine(); - mutate(machine); - expect(() => replayMachineSchema.parse(machine)).toThrow(message); - }); - - it("canonicalizes methods and headers while refusing persisted credential matchers", () => { - const canonical = { - ...loginMachine(), - transitions: loginMachine().transitions.map((transition, index) => - index === 0 - ? { - ...transition, - trigger: { - protocol: "http", - method: "post", - path: "/login", - headers: { "X-Request-ID": "fixture" }, - }, - } - : transition, - ), - }; - expect( - replayMachineSchema.parse(canonical).transitions[0]?.trigger, - ).toMatchObject({ - method: "POST", - headers: { "x-request-id": "fixture" }, - }); - const credentialMatcher = { - ...loginMachine(), - transitions: loginMachine().transitions.map((transition, index) => - index === 0 - ? { - ...transition, - trigger: { - protocol: "http", - method: "POST", - path: "/login", - headers: { Authorization: "test-auth-token" }, - }, - } - : transition, - ), - }; - expect(() => replayMachineSchema.parse(credentialMatcher)).toThrow( - /secret alias/u, - ); - }); -}); - -describe("replay machine validation", () => { - it("rejects sensitive captures sourced from persisted action JSON", () => { - const candidate = loginMachine(); - const capture = candidate.transitions[0]?.captures?.[0]; - if (capture === undefined) throw new TypeError("missing capture"); - capture.value = { source: "action_json", path: ["token"] }; - - expect(() => replayMachineSchema.parse(candidate)).toThrow( - /literal action JSON/u, - ); - }); - - it.each([ - ["invalid header name", { "bad header": "value" }], - ["invalid header value", { "x-test": "value\nsmuggled" }], - ])("rejects %s in HTTP responses", (_name, headers) => { - const candidate = loginMachine(); - const action = candidate.transitions[0]?.actions[0]; - if (action === undefined || action.type !== "http_response") - throw new TypeError("missing HTTP response"); - action.headers = headers; - - expect(() => replayMachineSchema.parse(candidate)).toThrow(); - }); - - it("rejects unknown fields at nested machine boundaries", () => { - const candidate = loginMachine(); - const action = candidate.transitions[0]?.actions[0]; - if (action === undefined) throw new TypeError("missing action"); - - expect(() => - replayMachineSchema.parse({ - ...candidate, - transitions: [ - { - ...candidate.transitions[0], - actions: [{ ...action, unexpected: true }], - }, - candidate.transitions[1], - ], - }), - ).toThrow(/Unrecognized key/u); - }); - - it("reports duplicate transition IDs as structured validation", () => { - const candidate = loginMachine(); - const first = candidate.transitions[0]; - const second = candidate.transitions[1]; - if (first === undefined || second === undefined) - throw new TypeError("missing transition"); - - expect( - replayMachineSchema.safeParse({ - ...candidate, - transitions: [first, { ...second, id: first.id }], - }), - ).toMatchObject({ success: false }); - }); - - it("rejects guards whose capture is not available before the transition", () => { - const candidate = loginMachine(); - const first = candidate.transitions[0]; - if (first === undefined) throw new TypeError("missing transition"); - first.guards = [ - { - variable: "token", - value: { source: "request_header", name: "authorization" }, - }, - ]; - - expect(() => replayMachineSchema.parse(candidate)).toThrow( - /executable path before use/u, - ); - }); - - it("rejects ambiguous header triggers regardless of key order", () => { - const candidate = loginMachine(); - const first = candidate.transitions[0]; - if (first === undefined) throw new TypeError("missing transition"); - const withHeaders = { - ...first, - trigger: { - protocol: "http" as const, - method: "POST", - path: "/login", - headers: { accept: "json", "x-mode": "test" }, - }, - }; - - expect(() => - replayMachineSchema.parse({ - ...candidate, - transitions: [ - withHeaders, - { - ...withHeaders, - id: "login_duplicate", - trigger: { - ...withHeaders.trigger, - headers: { "x-mode": "test", accept: "json" }, - }, - }, - candidate.transitions[1], - ], - }), - ).toThrow(/ambiguous/u); - }); -}); diff --git a/src/domain/replayMachine.ts b/src/domain/replayMachine.ts deleted file mode 100644 index d946da537..000000000 --- a/src/domain/replayMachine.ts +++ /dev/null @@ -1,383 +0,0 @@ -import { MultiDirectedGraph } from "graphology"; -import { singleSource } from "graphology-shortest-path"; -import canonicalize from "canonicalize"; -import { z } from "zod"; - -const replayIdentifierSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9_-]*$/u); -const replayPathSchema = z.array( - z.union([z.string(), z.number().int().nonnegative()]), -); -const sensitiveHeaderNames = new Set([ - "authorization", - "cookie", - "proxy-authorization", - "set-cookie", -]); -const headerNameSchema = z - .string() - .min(1) - .regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u); -const headerValueSchema = z.string().regex(/^[\t\x20-\x7e\x80-\xff]*$/u); -const replayHeaderMatchersSchema = z - .record(headerNameSchema, headerValueSchema) - .superRefine((headers, context) => { - const names = Object.keys(headers).map((name) => name.toLowerCase()); - if (new Set(names).size !== names.length) - context.addIssue({ - code: "custom", - message: "replay header matchers must be unique ignoring case", - input: headers, - }); - if (names.some((name) => sensitiveHeaderNames.has(name))) - context.addIssue({ - code: "custom", - message: - "replay header matchers cannot persist authorization or cookie values; capture and guard through a secret alias instead", - input: headers, - }); - }) - .transform((headers) => - Object.fromEntries( - Object.entries(headers).map(([name, value]) => [ - name.toLowerCase(), - value, - ]), - ), - ); - -const replayValueSourceSchema = z.discriminatedUnion("source", [ - z.strictObject({ - source: z.literal("request_header"), - name: z - .string() - .min(1) - .transform((name) => name.toLowerCase()), - }), - z.strictObject({ source: z.literal("request_json"), path: replayPathSchema }), - z.strictObject({ - source: z.literal("websocket_json"), - path: replayPathSchema, - }), - z.strictObject({ source: z.literal("action_json"), path: replayPathSchema }), -]); - -const replayTriggerSchema = z.discriminatedUnion("protocol", [ - z.strictObject({ - protocol: z.literal("http"), - method: z - .string() - .min(1) - .transform((method) => method.toUpperCase()), - path: z.string().startsWith("/"), - headers: replayHeaderMatchersSchema.default({}), - body: z.string().nullable().default(null), - }), - z.strictObject({ - protocol: z.literal("websocket_connect"), - path: z.string().startsWith("/"), - headers: replayHeaderMatchersSchema.default({}), - }), - z.strictObject({ - protocol: z.literal("websocket_message"), - path: z.string().startsWith("/"), - body: z.string().nullable().default(null), - }), -]); - -const replayActionSchema = z.discriminatedUnion("type", [ - z.strictObject({ - type: z.literal("http_response"), - status: z.number().int().min(100).max(599), - headers: z.record(headerNameSchema, headerValueSchema).default({}), - body: z.string(), - }), - z.strictObject({ - type: z.literal("websocket_send"), - data: z.string(), - }), - z.strictObject({ type: z.literal("disconnect") }), - z.strictObject({ - type: z.literal("delay"), - duration_ms: z.number().int().safe().nonnegative(), - }), -]); - -const replayTransitionSchema = z.strictObject({ - id: replayIdentifierSchema, - from: replayIdentifierSchema, - to: replayIdentifierSchema, - priority: z.number().int().min(0).default(100), - trigger: replayTriggerSchema, - guards: z - .array( - z.strictObject({ - variable: replayIdentifierSchema, - value: replayValueSourceSchema, - }), - ) - .default([]), - captures: z - .array( - z.strictObject({ - variable: replayIdentifierSchema, - value: replayValueSourceSchema, - sensitive: z.boolean().default(false), - }), - ) - .default([]), - actions: z.array(replayActionSchema).min(1), - max_uses: z.number().int().min(1), -}); - -const transitionSignature = ( - transition: z.infer, -): string => { - const signature = canonicalize({ - from: transition.from, - priority: transition.priority, - trigger: transition.trigger, - }); - if (signature === undefined) - throw new TypeError("Replay transition signature is not canonical JSON"); - return signature; -}; - -const replayMachineBaseSchema = z.strictObject({ - initial_state: replayIdentifierSchema, - states: z - .array( - z.strictObject({ - name: replayIdentifierSchema, - terminal: z.boolean().default(false), - max_visits: z.number().int().min(1).default(100_000), - }), - ) - .min(1), - transitions: z.array(replayTransitionSchema).min(1), - max_transitions: z.number().int().min(1), - limits: z - .strictObject({ - connections: z.number().int().min(1).default(100), - messages: z.number().int().min(1).default(10_000), - bytes: z.number().int().min(1).default(1_000_000), - duration_ms: z.number().int().min(1).default(30_000), - }) - .default({ - connections: 100, - messages: 10_000, - bytes: 1_000_000, - duration_ms: 30_000, - }), -}); -type ReplayMachineInput = z.infer; -type ReplayMachineContext = z.core.$RefinementCtx; - -const validateReplayIdentities = ( - machine: ReplayMachineInput, - context: ReplayMachineContext, -): ReadonlySet => { - const names = machine.states.map(({ name }) => name); - const nameSet = new Set(names); - if (nameSet.size !== names.length) - context.addIssue({ - code: "custom", - message: "replay machine state names must be unique", - path: ["states"], - input: machine, - }); - if (!nameSet.has(machine.initial_state)) - context.addIssue({ - code: "custom", - message: "replay machine initial state is not declared", - path: ["initial_state"], - input: machine, - }); - const transitionIds = machine.transitions.map(({ id }) => id); - if (new Set(transitionIds).size !== transitionIds.length) - context.addIssue({ - code: "custom", - message: "replay machine transition IDs must be unique", - path: ["transitions"], - input: machine, - }); - const signatures = machine.transitions.map(transitionSignature); - if (new Set(signatures).size !== signatures.length) - context.addIssue({ - code: "custom", - message: - "replay machine transitions with the same state, trigger, and priority are ambiguous", - path: ["transitions"], - input: machine, - }); - return nameSet; -}; - -const validateReplayVariables = ( - machine: ReplayMachineInput, - context: ReplayMachineContext, -): void => { - const capturedVariables = new Map(); - for (const [transitionIndex, transition] of machine.transitions.entries()) { - for (const capture of transition.captures) { - if (capture.sensitive && capture.value.source === "action_json") - context.addIssue({ - code: "custom", - message: - "sensitive replay captures cannot read literal action JSON persisted in the replay plan", - path: ["transitions", transitionIndex, "captures"], - input: machine, - }); - const sensitivity = capturedVariables.get(capture.variable); - if (sensitivity !== undefined && sensitivity !== capture.sensitive) - context.addIssue({ - code: "custom", - message: - "a replay variable cannot change secret classification between captures", - path: ["transitions", transitionIndex, "captures"], - input: machine, - }); - capturedVariables.set(capture.variable, capture.sensitive); - } - } - - const availableByState = new Map>([ - [machine.initial_state, new Set()], - ]); - let changed = true; - while (changed) { - changed = false; - for (const transition of machine.transitions) { - const available = availableByState.get(transition.from); - if ( - available === undefined || - transition.guards.some(({ variable }) => !available.has(variable)) - ) - continue; - const nextAvailable = new Set(available); - for (const { variable } of transition.captures) - nextAvailable.add(variable); - const existing = availableByState.get(transition.to); - if (existing === undefined) { - availableByState.set(transition.to, nextAvailable); - changed = true; - continue; - } - for (const variable of nextAvailable) - if (!existing.has(variable)) { - existing.add(variable); - changed = true; - } - } - } - - for (const [transitionIndex, transition] of machine.transitions.entries()) - for (const [guardIndex, guard] of transition.guards.entries()) - if (!availableByState.get(transition.from)?.has(guard.variable)) - context.addIssue({ - code: "custom", - message: - "replay guard variable is not captured on an executable path before use", - path: ["transitions", transitionIndex, "guards", guardIndex], - input: machine, - }); -}; - -const validateReplayActions = ( - machine: ReplayMachineInput, - context: ReplayMachineContext, -): void => { - for (const [index, transition] of machine.transitions.entries()) { - const httpResponses = transition.actions.filter( - ({ type }) => type === "http_response", - ).length; - const websocketSends = transition.actions.some( - ({ type }) => type === "websocket_send", - ); - const invalid = - transition.trigger.protocol === "http" - ? httpResponses !== 1 || websocketSends - : httpResponses !== 0; - if (invalid) - context.addIssue({ - code: "custom", - message: - "replay actions must match the transition protocol and HTTP transitions require exactly one response", - path: ["transitions", index, "actions"], - input: machine, - }); - } -}; - -const validateReplayGraph = ( - machine: ReplayMachineInput, - names: ReadonlySet, - context: ReplayMachineContext, -): void => { - const graph = new MultiDirectedGraph(); - for (const name of names) graph.addNode(name); - for (const [index, transition] of machine.transitions.entries()) { - if (!names.has(transition.from) || !names.has(transition.to)) { - context.addIssue({ - code: "custom", - message: "replay machine transition references an unknown state", - path: ["transitions", index], - input: machine, - }); - continue; - } - graph.addDirectedEdgeWithKey( - `${transition.id}:${String(index)}`, - transition.from, - transition.to, - ); - } - if (!graph.hasNode(machine.initial_state)) return; - if (!machine.states.some(({ terminal }) => terminal)) - context.addIssue({ - code: "custom", - message: "replay machine must declare at least one terminal state", - path: ["states"], - input: machine, - }); - const reachable = new Set( - Object.keys(singleSource(graph, machine.initial_state)), - ); - reachable.add(machine.initial_state); - for (const [index, state] of machine.states.entries()) { - if (!reachable.has(state.name)) - context.addIssue({ - code: "custom", - message: "replay machine state is unreachable from the initial state", - path: ["states", index], - input: machine, - }); - if (state.terminal && graph.outDegree(state.name) > 0) - context.addIssue({ - code: "custom", - message: - "terminal replay machine state cannot have outgoing transitions", - path: ["states", index], - input: machine, - }); - if (!state.terminal && graph.outDegree(state.name) === 0) - context.addIssue({ - code: "custom", - message: "non-terminal replay machine state has no outgoing transition", - path: ["states", index], - input: machine, - }); - } -}; - -/** Portable finite replay machine with no executable callbacks. */ -export const replayMachineSchema = z - .object(replayMachineBaseSchema.shape) - .strict() - .superRefine((machine, context) => { - const names = validateReplayIdentities(machine, context); - validateReplayVariables(machine, context); - validateReplayActions(machine, context); - validateReplayGraph(machine, names, context); - }); - -export type ReplayMachine = z.infer; diff --git a/src/domain/replayMachineRun.test.ts b/src/domain/replayMachineRun.test.ts deleted file mode 100644 index a8ca98f93..000000000 --- a/src/domain/replayMachineRun.test.ts +++ /dev/null @@ -1,503 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { - replayMachineRunInputSchema, - runReplayMachine, -} from "./replayMachineRun.js"; - -const loginRun = () => - replayMachineRunInputSchema.parse({ - machine: { - initial_state: "login", - states: [ - { name: "login" }, - { name: "api" }, - { name: "complete", terminal: true }, - ], - transitions: [ - { - id: "capture_token", - from: "login", - to: "api", - priority: 10, - trigger: { protocol: "http", method: "POST", path: "/login" }, - captures: [ - { - variable: "token", - value: { source: "request_json", path: ["token"] }, - sensitive: true, - }, - ], - actions: [ - { - type: "http_response", - status: 204, - headers: { "x-token": "target-secret" }, - body: "target-secret", - }, - ], - max_uses: 1, - }, - { - id: "authorize", - from: "api", - to: "complete", - priority: 10, - trigger: { protocol: "http", method: "GET", path: "/api" }, - guards: [ - { - variable: "token", - value: { source: "request_header", name: "authorization" }, - }, - ], - actions: [ - { - type: "http_response", - status: 200, - headers: {}, - body: "done", - }, - ], - max_uses: 1, - }, - ], - max_transitions: 2, - limits: { - connections: 2, - messages: 4, - bytes: 1_000, - duration_ms: 100, - }, - }, - events: [ - { - protocol: "http", - connection: "not_applicable", - at_ms: 1, - method: "post", - path: "/login", - headers: {}, - body: '{"token":"target-secret"}', - }, - { - protocol: "http", - connection: "not_applicable", - at_ms: 2, - method: "GET", - path: "/api", - headers: { Authorization: "target-secret" }, - body: "", - }, - ], - }); - -const parseMachineRun = (machine: unknown, events: unknown[]) => - replayMachineRunInputSchema.parse({ machine, events }); - -const httpEvent = (path: string, atMs = 0) => ({ - protocol: "http" as const, - connection: "not_applicable" as const, - at_ms: atMs, - method: "GET", - path, - headers: {}, - body: "", -}); - -describe("direct replay machine execution", () => { - it("returns actions, aliases, terminal state, and exact limit use", () => { - const result = runReplayMachine(loginRun()); - - expect(result).toMatchObject({ - initial_state: "login", - final_state: "complete", - terminal: true, - decisions: [ - { event_sequence: 0, outcome: "matched", transition_sequence: 0 }, - { event_sequence: 1, outcome: "matched", transition_sequence: 1 }, - ], - transition_journal: [ - { - transition_id: "capture_token", - captured_aliases: [{ name: "token", sensitive: true }], - }, - { - transition_id: "authorize", - captured_aliases: [], - }, - ], - transition_actions: [ - { - transition_id: "capture_token", - actions: [ - { - type: "http_response", - status: 204, - headers: { "x-token": "" }, - body: "", - }, - ], - }, - { - transition_id: "authorize", - actions: [ - { - type: "http_response", - status: 200, - headers: {}, - body: "done", - }, - ], - }, - ], - limits: { - configured: { - transitions: 2, - connections: 2, - messages: 4, - bytes: 1_000, - duration_ms: 100, - }, - usage: { - offered_events: 2, - admitted_events: 2, - transitions: 2, - connections: 0, - messages: 0, - bytes: 25, - last_at_ms: 2, - }, - }, - }); - expect(JSON.stringify(result)).not.toContain("target-secret"); - }); - - it("classifies unmatched and guard-failed events without aborting", () => { - const input = loginRun(); - const result = runReplayMachine({ - ...input, - events: [httpEvent("/missing"), input.events[0]!, httpEvent("/api", 2)], - }); - - expect(result.decisions.map(({ outcome }) => outcome)).toEqual([ - "unmatched", - "matched", - "guard_failed", - ]); - }); - - it("classifies exhausted transitions", () => { - const input = parseMachineRun( - { - initial_state: "active", - states: [ - { name: "active", max_visits: 3 }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "retry_once", - from: "active", - to: "active", - trigger: { protocol: "http", method: "GET", path: "/retry" }, - actions: [{ type: "http_response", status: 200, body: "retry" }], - max_uses: 1, - }, - { - id: "finish", - from: "active", - to: "done", - trigger: { protocol: "http", method: "GET", path: "/done" }, - actions: [{ type: "http_response", status: 200, body: "done" }], - max_uses: 1, - }, - ], - max_transitions: 3, - }, - [httpEvent("/retry"), httpEvent("/retry", 1)], - ); - - expect( - runReplayMachine(input).decisions.map(({ outcome }) => outcome), - ).toEqual(["matched", "transition_exhausted"]); - }); -}); - -describe("direct replay machine protocol and limits", () => { - it("classifies reconnects that arrive in the wrong state", () => { - const input = parseMachineRun( - { - initial_state: "connected", - states: [ - { name: "connected" }, - { name: "reconnecting" }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "disconnect", - from: "connected", - to: "reconnecting", - trigger: { - protocol: "websocket_message", - path: "/socket", - body: "disconnect", - }, - actions: [{ type: "disconnect" }], - max_uses: 1, - }, - { - id: "reconnect", - from: "reconnecting", - to: "done", - trigger: { protocol: "websocket_connect", path: "/socket" }, - actions: [{ type: "websocket_send", data: "ready" }], - max_uses: 1, - }, - ], - max_transitions: 2, - }, - [ - { - protocol: "websocket_connect", - connection: "reconnect", - at_ms: 0, - method: null, - path: "/socket", - headers: {}, - body: "", - }, - ], - ); - - expect(runReplayMachine(input).decisions[0]?.outcome).toBe( - "unexpected_reconnect", - ); - }); - - it("rejects protocol-inconsistent events at the boundary", () => { - const input = loginRun(); - expect( - replayMachineRunInputSchema.safeParse({ - ...input, - events: [{ ...httpEvent("/login"), method: null }], - }).success, - ).toBe(false); - expect( - replayMachineRunInputSchema.safeParse({ - ...input, - events: [ - { - ...httpEvent("/login"), - protocol: "websocket_connect", - connection: "reconnect", - }, - ], - }).success, - ).toBe(false); - expect( - replayMachineRunInputSchema.safeParse({ - ...input, - events: [ - { - ...httpEvent("/login"), - headers: { Authorization: "first", authorization: "second" }, - }, - ], - }).success, - ).toBe(false); - }); - - it("reports limit refusals without committing rejected usage", () => { - const input = loginRun(); - const result = runReplayMachine({ - ...input, - machine: { - ...input.machine, - limits: { ...input.machine.limits, bytes: 1 }, - }, - events: [input.events[0]!], - }); - - expect(result.decisions).toEqual([ - { - event_sequence: 0, - outcome: "limit_exhausted", - transition_sequence: null, - }, - ]); - expect(result.limits.usage).toMatchObject({ - offered_events: 1, - admitted_events: 0, - transitions: 0, - bytes: 0, - }); - }); -}); - -/** - * Assert every dispatched action is a websocket_send carrying `body` byte for - * byte. Comparing the serialized size instead would let escaping or padding - * satisfy the assertion even if a body were truncated. - */ -const expectActionsRetained = ( - actions: readonly { readonly type: string; readonly data?: string }[], - body: string, -): void => { - expect(actions).toHaveLength(5); - for (const action of actions) { - expect(action.type).toBe("websocket_send"); - expect(action.data).toBe(body); - } - expect( - actions.reduce((total, action) => total + (action.data?.length ?? 0), 0), - ).toBe(5 * body.length); -}; - -describe("direct replay machine large inputs", () => { - it("records large repeated actions once instead of amplifying each match", () => { - const largeBody = "x".repeat(1_000_000); - const input = parseMachineRun( - { - initial_state: "active", - states: [ - { name: "active", max_visits: 11 }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "repeat", - from: "active", - to: "active", - trigger: { protocol: "http", method: "GET", path: "/repeat" }, - actions: [{ type: "http_response", status: 200, body: largeBody }], - max_uses: 10, - }, - { - id: "finish", - from: "active", - to: "done", - trigger: { protocol: "http", method: "GET", path: "/done" }, - actions: [{ type: "http_response", status: 204, body: "" }], - max_uses: 1, - }, - ], - max_transitions: 11, - }, - Array.from({ length: 10 }, (_, index) => httpEvent("/repeat", index)), - ); - - const result = runReplayMachine(input); - expect(result.transition_journal).toHaveLength(10); - expect(result.transition_actions).toHaveLength(1); - expect(JSON.stringify(result).length).toBeLessThan(1_100_000); - }); - - it("retains actions above the former four MiB aggregate cap", () => { - const largeBody = "x".repeat(1_000_000); - const parsed = replayMachineRunInputSchema.safeParse({ - machine: { - initial_state: "waiting", - states: [{ name: "waiting" }, { name: "done", terminal: true }], - transitions: [ - { - id: "send", - from: "waiting", - to: "done", - trigger: { protocol: "websocket_connect", path: "/socket" }, - actions: Array.from({ length: 5 }, () => ({ - type: "websocket_send", - data: largeBody, - })), - max_uses: 1, - }, - ], - max_transitions: 1, - }, - events: [ - { - protocol: "websocket_connect", - connection: "initial", - at_ms: 0, - method: null, - path: "/socket", - headers: {}, - body: "", - }, - ], - }); - - expect(parsed.success).toBe(true); - if (parsed.success) { - const result = runReplayMachine(parsed.data); - expectActionsRetained( - result.transition_actions[0]?.actions ?? [], - largeBody, - ); - } - }); - - it("accepts event counts and action fields beyond former caps", () => { - const input = loginRun(); - const largeEventRun = replayMachineRunInputSchema.safeParse({ - ...input, - events: Array.from({ length: 10_001 }, (_, index) => - httpEvent("/missing", index), - ), - }); - expect(largeEventRun.success).toBe(true); - if (largeEventRun.success) - expect(runReplayMachine(largeEventRun.data).decisions).toHaveLength( - 10_001, - ); - - const largeHeaderTable = replayMachineRunInputSchema.safeParse({ - machine: { - initial_state: "waiting", - states: [{ name: "waiting" }, { name: "done", terminal: true }], - transitions: [ - { - id: "respond", - from: "waiting", - to: "done", - trigger: { protocol: "http", method: "GET", path: "/done" }, - actions: [ - { - type: "http_response", - status: 200, - headers: Object.fromEntries( - Array.from({ length: 1_024 }, (_, index) => [ - `x-field-${String(index)}`, - "", - ]), - ), - body: "", - }, - ], - max_uses: 1, - }, - ], - max_transitions: 1, - }, - events: [ - { - protocol: "http", - connection: "not_applicable", - at_ms: 0, - method: "GET", - path: "/done", - headers: {}, - body: "", - }, - ], - }); - expect(largeHeaderTable.success).toBe(true); - if (largeHeaderTable.success) { - const result = runReplayMachine(largeHeaderTable.data); - const action = result.transition_actions[0]?.actions[0]; - expect(action?.type).toBe("http_response"); - if (action?.type === "http_response") - expect(Object.keys(action.headers)).toHaveLength(1_024); - } - }); -}); diff --git a/src/domain/replayMachineRun.ts b/src/domain/replayMachineRun.ts deleted file mode 100644 index 623fc9d40..000000000 --- a/src/domain/replayMachineRun.ts +++ /dev/null @@ -1,206 +0,0 @@ -import { z } from "zod"; - -import { replayMachineSchema, type ReplayMachine } from "./replayMachine.js"; -import { - replayMachineEventSchema, - ReplayMachineRuntime, -} from "./replayMachineRuntime.js"; - -const refusalOutcomeSchema = z.enum([ - "unmatched", - "invalid_state", - "guard_failed", - "transition_exhausted", - "invalid_capture", - "unexpected_reconnect", - "limit_exhausted", -]); - -/** Complete declarative input for one direct replay-machine run. */ -export const replayMachineRunInputSchema = z.strictObject({ - machine: replayMachineSchema, - events: z.array(replayMachineEventSchema), -}); - -const replayMachineRunDecisionSchema = z.strictObject({ - event_sequence: z.number().int().nonnegative(), - outcome: z.union([z.literal("matched"), refusalOutcomeSchema]), - transition_sequence: z.number().int().nonnegative().nullable(), -}); - -const replayRunActionSchema = z.discriminatedUnion("type", [ - z.strictObject({ - type: z.literal("http_response"), - status: z.number().int().min(100).max(599), - headers: z.record( - z - .string() - .min(1) - .regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u), - z.string(), - ), - body: z.string(), - }), - z.strictObject({ - type: z.literal("websocket_send"), - data: z.string(), - }), - z.strictObject({ type: z.literal("disconnect") }), - z.strictObject({ - type: z.literal("delay"), - duration_ms: z.number().int().nonnegative(), - }), -]); - -const replayRunIdentifierSchema = z - .string() - .regex(/^[A-Za-z][A-Za-z0-9_-]{0,63}$/u); - -const replayMachineRunJournalEntrySchema = z.strictObject({ - sequence: z.number().int().nonnegative(), - at_ms: z.number().int().nonnegative(), - transition_id: replayRunIdentifierSchema, - state_before: replayRunIdentifierSchema, - state_after: replayRunIdentifierSchema, - captured_aliases: z.array( - z.strictObject({ - name: replayRunIdentifierSchema, - sensitive: z.boolean(), - }), - ), -}); - -/** Capture-value-free result of directly evaluating a finite replay machine. */ -export const replayMachineRunOutputSchema = z.strictObject({ - initial_state: replayRunIdentifierSchema, - final_state: replayRunIdentifierSchema, - terminal: z.boolean(), - decisions: z.array(replayMachineRunDecisionSchema), - transition_journal: z.array(replayMachineRunJournalEntrySchema), - transition_actions: z.array( - z.strictObject({ - transition_id: replayRunIdentifierSchema, - actions: z.array(replayRunActionSchema), - }), - ), - limits: z.strictObject({ - configured: z.strictObject({ - transitions: z.number().int().positive(), - connections: z.number().int().positive(), - messages: z.number().int().positive(), - bytes: z.number().int().positive(), - duration_ms: z.number().int().positive(), - }), - usage: z.strictObject({ - offered_events: z.number().int().nonnegative(), - admitted_events: z.number().int().nonnegative(), - transitions: z.number().int().nonnegative(), - connections: z.number().int().nonnegative(), - messages: z.number().int().nonnegative(), - bytes: z.number().int().nonnegative(), - last_at_ms: z.number().int().nonnegative(), - }), - }), -}); - -export type ReplayMachineRunInput = z.infer; -export type ReplayMachineRunOutput = z.infer< - typeof replayMachineRunOutputSchema ->; - -type ReplayAction = ReplayMachine["transitions"][number]["actions"][number]; - -const redactAction = ( - runtime: ReplayMachineRuntime, - action: ReplayAction, -): ReplayAction => { - switch (action.type) { - case "http_response": - return { - ...action, - headers: Object.fromEntries( - Object.entries(action.headers).map(([name, value]) => [ - name, - runtime.redactField(value), - ]), - ), - body: runtime.redactField(action.body), - }; - case "websocket_send": - return { ...action, data: runtime.redactField(action.data) }; - case "delay": - case "disconnect": - return action; - } -}; - -/** Evaluate every supplied event in order without opening sockets or processes. */ -export const runReplayMachine = ( - input: ReplayMachineRunInput, -): ReplayMachineRunOutput => { - const runtime = new ReplayMachineRuntime(input.machine); - const decisions: ReplayMachineRunOutput["decisions"] = []; - const transitionJournal: ReplayMachineRunOutput["transition_journal"] = []; - const usedTransitionIds = new Set(); - const transitionById = new Map( - input.machine.transitions.map((transition) => [transition.id, transition]), - ); - - for (const [eventSequence, event] of input.events.entries()) { - const decision = runtime.dispatch(event); - decisions.push({ - event_sequence: eventSequence, - outcome: decision.outcome, - transition_sequence: decision.transition?.sequence ?? null, - }); - if (decision.outcome !== "matched") continue; - usedTransitionIds.add(decision.transition.transition_id); - const definition = transitionById.get(decision.transition.transition_id); - if (definition === undefined) - throw new TypeError("Replay runtime selected an unknown transition"); - transitionJournal.push({ - sequence: decision.transition.sequence, - at_ms: decision.transition.at_ms, - transition_id: decision.transition.transition_id, - state_before: decision.transition.state_before, - state_after: decision.transition.state_after, - captured_aliases: definition.captures.map(({ variable, sensitive }) => ({ - name: variable, - sensitive, - })), - }); - } - - const usage = runtime.usage; - const transitionActions = input.machine.transitions - .filter(({ id }) => usedTransitionIds.has(id)) - .map(({ id, actions }) => ({ - transition_id: id, - actions: actions.map((action) => redactAction(runtime, action)), - })); - return replayMachineRunOutputSchema.parse({ - initial_state: input.machine.initial_state, - final_state: runtime.state, - terminal: - input.machine.states.find(({ name }) => name === runtime.state) - ?.terminal ?? false, - decisions, - transition_journal: transitionJournal, - transition_actions: transitionActions, - limits: { - configured: { - transitions: input.machine.max_transitions, - ...input.machine.limits, - }, - usage: { - offered_events: input.events.length, - admitted_events: usage.events, - transitions: usage.transitions, - connections: usage.connections, - messages: usage.messages, - bytes: usage.bytes, - last_at_ms: usage.last_at_ms, - }, - }, - }); -}; diff --git a/src/domain/replayMachineRuntime.captures.test.ts b/src/domain/replayMachineRuntime.captures.test.ts deleted file mode 100644 index 9953b5e41..000000000 --- a/src/domain/replayMachineRuntime.captures.test.ts +++ /dev/null @@ -1,308 +0,0 @@ -import { expect, it } from "vitest"; - -import { replayMachineSchema } from "./replayMachine.js"; -import { ReplayMachineRuntime } from "./replayMachineRuntime.js"; - -const machine = replayMachineSchema.parse({ - initial_state: "login", - states: [ - { name: "login" }, - { name: "api" }, - { name: "complete", terminal: true }, - ], - transitions: [ - { - id: "capture_token", - from: "login", - to: "api", - priority: 10, - trigger: { protocol: "http", method: "POST", path: "/login" }, - captures: [ - { - variable: "session_value", - value: { source: "request_json", path: ["session_value"] }, - sensitive: true, - }, - ], - actions: [{ type: "http_response", status: 204, headers: {}, body: "" }], - max_uses: 1, - }, - { - id: "authorize_api", - from: "api", - to: "complete", - priority: 10, - trigger: { protocol: "http", method: "GET", path: "/api" }, - guards: [ - { - variable: "session_value", - value: { source: "request_header", name: "authorization" }, - }, - ], - actions: [ - { type: "http_response", status: 200, headers: {}, body: "done" }, - ], - max_uses: 1, - }, - ], - max_transitions: 2, -}); - -const event = ( - method: string, - path: string, - body = "", - headers: Readonly> = {}, -) => ({ - protocol: "http" as const, - connection: "not_applicable" as const, - at_ms: 0, - method, - path, - body, - headers, -}); - -it("compares captured JSON values canonically", () => { - const objectMachine = replayMachineSchema.parse({ - initial_state: "capture", - states: [ - { name: "capture" }, - { name: "guard" }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "capture_profile", - from: "capture", - to: "guard", - trigger: { protocol: "http", method: "POST", path: "/capture" }, - captures: [ - { - variable: "profile", - value: { source: "request_json", path: ["profile"] }, - }, - ], - actions: [ - { type: "http_response", status: 204, headers: {}, body: "" }, - ], - max_uses: 1, - }, - { - id: "guard_profile", - from: "guard", - to: "done", - trigger: { protocol: "http", method: "POST", path: "/guard" }, - guards: [ - { - variable: "profile", - value: { source: "request_json", path: ["profile"] }, - }, - ], - actions: [ - { type: "http_response", status: 204, headers: {}, body: "" }, - ], - max_uses: 1, - }, - ], - max_transitions: 2, - }); - const runtime = new ReplayMachineRuntime(objectMachine); - - expect( - runtime.dispatch( - event("POST", "/capture", '{"profile":{"name":"A","id":1}}'), - ), - ).toMatchObject({ outcome: "matched" }); - expect( - runtime.dispatch( - event("POST", "/guard", '{"profile":{"id":1,"name":"A"}}'), - ), - ).toMatchObject({ outcome: "matched" }); -}); - -it("does not traverse inherited properties in JSON capture paths", () => { - const inheritedPathMachine = replayMachineSchema.parse({ - ...machine, - transitions: machine.transitions.map((transition, index) => - index === 0 - ? { - ...transition, - captures: [ - { - variable: "session_value", - value: { - source: "request_json" as const, - path: ["__proto__", "toString"], - }, - sensitive: true, - }, - ], - } - : transition, - ), - }); - - expect( - new ReplayMachineRuntime(inheritedPathMachine).dispatch( - event("POST", "/login", "{}"), - ), - ).toMatchObject({ outcome: "invalid_capture" }); -}); - -it("rejects non-string sensitive captures and retains rotated values", () => { - expect( - new ReplayMachineRuntime(machine).dispatch( - event("POST", "/login", '{"session_value":1234}'), - ), - ).toMatchObject({ outcome: "invalid_capture" }); - - const rotatingMachine = replayMachineSchema.parse({ - initial_state: "active", - states: [ - { name: "active", max_visits: 3 }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "rotate", - from: "active", - to: "active", - trigger: { protocol: "http", method: "POST", path: "/rotate" }, - captures: [ - { - variable: "session_value", - value: { source: "request_json", path: ["value"] }, - sensitive: true, - }, - ], - actions: [ - { type: "http_response", status: 204, headers: {}, body: "" }, - ], - max_uses: 2, - }, - { - id: "finish", - from: "active", - to: "done", - trigger: { protocol: "http", method: "GET", path: "/done" }, - actions: [ - { type: "http_response", status: 204, headers: {}, body: "" }, - ], - max_uses: 1, - }, - ], - max_transitions: 3, - }); - const rotating = new ReplayMachineRuntime(rotatingMachine); - rotating.dispatch(event("POST", "/rotate", '{"value":"alpha"}')); - rotating.dispatch(event("POST", "/rotate", '{"value":"beta"}')); - const alias = ["<", "secret", ":session_value>"].join(""); - - expect(rotating.redact("alpha beta")).toBe(`${alias} ${alias}`); -}); - -it("falls back to a lower-priority transition after a preferred one is exhausted", () => { - const fallbackMachine = replayMachineSchema.parse({ - initial_state: "active", - states: [ - { name: "active", max_visits: 2 }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "preferred", - from: "active", - to: "active", - priority: 10, - trigger: { protocol: "http", method: "GET", path: "/next" }, - actions: [ - { type: "http_response", status: 200, headers: {}, body: "again" }, - ], - max_uses: 1, - }, - { - id: "fallback", - from: "active", - to: "done", - priority: 20, - trigger: { protocol: "http", method: "GET", path: "/next" }, - actions: [ - { type: "http_response", status: 200, headers: {}, body: "done" }, - ], - max_uses: 1, - }, - ], - max_transitions: 2, - }); - const runtime = new ReplayMachineRuntime(fallbackMachine); - - expect(runtime.dispatch(event("GET", "/next"))).toMatchObject({ - outcome: "matched", - transition: { transition_id: "preferred" }, - }); - expect(runtime.dispatch(event("GET", "/next"))).toMatchObject({ - outcome: "matched", - transition: { transition_id: "fallback" }, - }); -}); - -it("rejects non-finite parsed JSON captures and guard values", () => { - const jsonMachine = replayMachineSchema.parse({ - initial_state: "capture", - states: [ - { name: "capture" }, - { name: "guard" }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "capture_value", - from: "capture", - to: "guard", - trigger: { protocol: "http", method: "POST", path: "/capture" }, - captures: [ - { - variable: "value", - value: { source: "request_json", path: ["value"] }, - }, - ], - actions: [ - { type: "http_response", status: 204, headers: {}, body: "" }, - ], - max_uses: 1, - }, - { - id: "guard_value", - from: "guard", - to: "done", - trigger: { protocol: "http", method: "POST", path: "/guard" }, - guards: [ - { - variable: "value", - value: { source: "request_json", path: ["value"] }, - }, - ], - actions: [ - { type: "http_response", status: 204, headers: {}, body: "" }, - ], - max_uses: 1, - }, - ], - max_transitions: 2, - }); - - expect( - new ReplayMachineRuntime(jsonMachine).dispatch( - event("POST", "/capture", '{"value":1e400}'), - ), - ).toMatchObject({ outcome: "invalid_capture" }); - - const guarded = new ReplayMachineRuntime(jsonMachine); - expect( - guarded.dispatch(event("POST", "/capture", '{"value":null}')), - ).toMatchObject({ outcome: "matched" }); - expect( - guarded.dispatch(event("POST", "/guard", '{"value":1e400}')), - ).toMatchObject({ outcome: "guard_failed" }); -}); diff --git a/src/domain/replayMachineRuntime.test.ts b/src/domain/replayMachineRuntime.test.ts deleted file mode 100644 index f305423aa..000000000 --- a/src/domain/replayMachineRuntime.test.ts +++ /dev/null @@ -1,333 +0,0 @@ -import { expect, it } from "vitest"; - -import { replayMachineSchema } from "./replayMachine.js"; -import { ReplayMachineRuntime } from "./replayMachineRuntime.js"; - -const machine = replayMachineSchema.parse({ - initial_state: "login", - states: [ - { name: "login" }, - { name: "api" }, - { name: "complete", terminal: true }, - ], - transitions: [ - { - id: "capture_token", - from: "login", - to: "api", - priority: 10, - trigger: { protocol: "http", method: "POST", path: "/login" }, - captures: [ - { - variable: "session_value", - value: { source: "request_json", path: ["session_value"] }, - sensitive: true, - }, - ], - actions: [{ type: "http_response", status: 204, headers: {}, body: "" }], - max_uses: 1, - }, - { - id: "authorize_api", - from: "api", - to: "complete", - priority: 10, - trigger: { protocol: "http", method: "GET", path: "/api" }, - guards: [ - { - variable: "session_value", - value: { source: "request_header", name: "authorization" }, - }, - ], - actions: [ - { type: "http_response", status: 200, headers: {}, body: "done" }, - ], - max_uses: 1, - }, - ], - max_transitions: 2, -}); - -const event = ( - method: string, - path: string, - body = "", - headers: Readonly> = {}, -) => ({ - protocol: "http" as const, - connection: "not_applicable" as const, - at_ms: 0, - method, - path, - body, - headers, -}); - -it("captures secret values in memory and journals aliases only", () => { - const runtime = new ReplayMachineRuntime(machine); - expect( - runtime.dispatch( - event("POST", "/login", '{"session_value":"test-auth-token"}'), - ), - ).toMatchObject({ - outcome: "matched", - transition: { - transition_id: "capture_token", - sensitive_aliases: ["session_value"], - }, - }); - const expectedRedaction = ["Bearer <", "secret", ":session_value>"].join(""); - expect(runtime.redact("Bearer test-auth-token")).toBe(expectedRedaction); - expect( - runtime.dispatch( - event("GET", "/api", "", { Authorization: "test-auth-token" }), - ), - ).toMatchObject({ outcome: "matched" }); - expect(JSON.stringify(runtime.timeline)).not.toContain("test-auth-token"); - expect(runtime.state).toBe("complete"); -}); - -it("classifies wrong-state, guard, capture, and exhaustion failures", () => { - expect( - new ReplayMachineRuntime(machine).dispatch(event("GET", "/api")), - ).toMatchObject({ outcome: "invalid_state" }); - expect( - new ReplayMachineRuntime(machine).dispatch(event("POST", "/login", "{}")), - ).toMatchObject({ outcome: "invalid_capture" }); - const runtime = new ReplayMachineRuntime(machine); - runtime.dispatch( - event("POST", "/login", '{"session_value":"test-auth-token"}'), - ); - expect( - runtime.dispatch( - event("GET", "/api", "", { - authorization: "test-token-placeholder", - }), - ), - ).toMatchObject({ - outcome: "guard_failed", - }); - const bounded = new ReplayMachineRuntime( - replayMachineSchema.parse({ - initial_state: "active", - states: [{ name: "active" }, { name: "done", terminal: true }], - transitions: [ - { - id: "once", - from: "active", - to: "active", - trigger: { protocol: "http", method: "GET", path: "/once" }, - actions: [ - { type: "http_response", status: 200, headers: {}, body: "ok" }, - ], - max_uses: 1, - }, - { - id: "finish", - from: "active", - to: "done", - trigger: { protocol: "http", method: "GET", path: "/done" }, - actions: [ - { type: "http_response", status: 200, headers: {}, body: "ok" }, - ], - max_uses: 1, - }, - ], - max_transitions: 2, - }), - ); - expect(bounded.dispatch(event("GET", "/once"))).toMatchObject({ - outcome: "matched", - }); - expect(bounded.dispatch(event("GET", "/once"))).toMatchObject({ - outcome: "transition_exhausted", - }); -}); - -it("matches bounded headers and bodies and distinguishes wrong-state reconnects", () => { - const runtime = new ReplayMachineRuntime( - replayMachineSchema.parse({ - initial_state: "connected", - states: [{ name: "connected" }, { name: "done", terminal: true }], - transitions: [ - { - id: "finish", - from: "connected", - to: "done", - trigger: { - protocol: "http", - method: "POST", - path: "/finish", - headers: { "content-type": "application/json" }, - body: '{"done":true}', - }, - actions: [ - { type: "http_response", status: 204, headers: {}, body: "" }, - ], - max_uses: 1, - }, - { - id: "initial_socket", - from: "connected", - to: "connected", - trigger: { protocol: "websocket_connect", path: "/ws" }, - actions: [{ type: "disconnect" }], - max_uses: 1, - }, - ], - max_transitions: 2, - }), - ); - expect(runtime.dispatch(event("POST", "/finish", "wrong"))).toMatchObject({ - outcome: "unmatched", - }); - expect( - runtime.dispatch({ - protocol: "websocket_connect", - connection: "initial", - at_ms: 0, - method: null, - path: "/ws", - headers: {}, - body: "", - }), - ).toMatchObject({ outcome: "matched" }); - expect( - runtime.dispatch({ - protocol: "websocket_connect", - connection: "reconnect", - at_ms: 0, - method: null, - path: "/ws", - headers: {}, - body: "", - }), - ).toMatchObject({ outcome: "transition_exhausted" }); - expect( - runtime.dispatch( - event("POST", "/finish", '{"done":true}', { - "content-type": "application/json", - }), - ), - ).toMatchObject({ outcome: "matched" }); - expect( - runtime.dispatch({ - protocol: "websocket_connect", - connection: "reconnect", - at_ms: 0, - method: null, - path: "/ws", - headers: {}, - body: "", - }), - ).toMatchObject({ outcome: "unexpected_reconnect" }); -}); - -it("enforces state, connection, message, byte, and duration limits", () => { - const limitedMachine = replayMachineSchema.parse({ - initial_state: "active", - states: [ - { name: "active", max_visits: 1 }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "loop", - from: "active", - to: "active", - trigger: { protocol: "websocket_message", path: "/ws" }, - actions: [{ type: "websocket_send", data: "ack" }], - max_uses: 2, - }, - { - id: "finish", - from: "active", - to: "done", - trigger: { protocol: "http", method: "GET", path: "/done" }, - actions: [ - { type: "http_response", status: 200, headers: {}, body: "ok" }, - ], - max_uses: 1, - }, - ], - max_transitions: 3, - limits: { connections: 1, messages: 1, bytes: 100, duration_ms: 10 }, - }); - const stateLimited = new ReplayMachineRuntime(limitedMachine); - expect( - stateLimited.dispatch({ - protocol: "websocket_message", - connection: "not_applicable", - at_ms: 0, - method: null, - path: "/ws", - headers: {}, - body: "one", - }), - ).toMatchObject({ outcome: "limit_exhausted" }); - const messageLimited = new ReplayMachineRuntime( - replayMachineSchema.parse({ - ...limitedMachine, - states: limitedMachine.states.map((state) => - state.name === "active" ? { ...state, max_visits: 3 } : state, - ), - }), - ); - const message = { - protocol: "websocket_message" as const, - connection: "not_applicable" as const, - at_ms: 0, - method: null, - path: "/ws", - headers: {}, - body: "one", - }; - expect(messageLimited.dispatch(message)).toMatchObject({ - outcome: "matched", - }); - expect(messageLimited.dispatch(message)).toMatchObject({ - outcome: "limit_exhausted", - }); - const durationLimited = new ReplayMachineRuntime(limitedMachine); - expect( - durationLimited.dispatch({ ...event("GET", "/done"), at_ms: 11 }), - ).toMatchObject({ outcome: "limit_exhausted" }); - expect( - new ReplayMachineRuntime(limitedMachine).dispatch({ - ...event("GET", "/done"), - at_ms: Number.NaN, - }), - ).toMatchObject({ outcome: "limit_exhausted" }); - const monotonic = new ReplayMachineRuntime(limitedMachine); - expect( - monotonic.dispatch({ ...event("GET", "/missing"), at_ms: 5 }), - ).toMatchObject({ outcome: "unmatched" }); - expect( - monotonic.dispatch({ ...event("GET", "/missing"), at_ms: 4 }), - ).toMatchObject({ outcome: "limit_exhausted" }); - const byteLimited = new ReplayMachineRuntime( - replayMachineSchema.parse({ - ...limitedMachine, - limits: { ...limitedMachine.limits, bytes: 4 }, - }), - ); - expect(byteLimited.dispatch(event("GET", "/missing", "12345"))).toMatchObject( - { outcome: "limit_exhausted" }, - ); - const connectionLimited = new ReplayMachineRuntime(limitedMachine); - const connect = { - protocol: "websocket_connect" as const, - connection: "initial" as const, - at_ms: 0, - method: null, - path: "/unknown", - headers: {}, - body: "", - }; - expect(connectionLimited.dispatch(connect)).toMatchObject({ - outcome: "unmatched", - }); - expect( - connectionLimited.dispatch({ ...connect, connection: "reconnect" }), - ).toMatchObject({ outcome: "limit_exhausted" }); -}); diff --git a/src/domain/replayMachineRuntime.ts b/src/domain/replayMachineRuntime.ts deleted file mode 100644 index d6cb2b788..000000000 --- a/src/domain/replayMachineRuntime.ts +++ /dev/null @@ -1,462 +0,0 @@ -import { z } from "zod"; - -import type { ReplayMachine } from "./replayMachine.js"; -import { isJsonCompatible, replayValuesEqual } from "./replayMachineValues.js"; - -type ReplayTransition = ReplayMachine["transitions"][number]; -type IndexedReplayTransition = { - readonly transition: ReplayTransition; - readonly declarationOrder: number; -}; -type ReplayValueSource = ReplayTransition["captures"][number]["value"]; -interface TransitionRecordOptions { - readonly sequence: number; - readonly atMs: number; - readonly stateBefore: string; - readonly transition: ReplayTransition; - readonly captures: readonly { - readonly variable: string; - readonly sensitive: boolean; - }[]; -} - -/** One bounded inbound protocol event offered to a replay machine. */ -const replayEventHeadersSchema = z - .record( - z - .string() - .min(1) - .regex(/^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/u), - z.string().regex(/^[\t\x20-\x7e\x80-\xff]*$/u), - ) - .superRefine((headers, context) => { - const normalized = Object.keys(headers).map((name) => name.toLowerCase()); - if (new Set(normalized).size !== normalized.length) - context.addIssue({ - code: "custom", - message: "replay event headers must be unique ignoring case", - input: headers, - }); - }); - -const replayEventFields = { - at_ms: z.number().int().safe().nonnegative(), - path: z.string().startsWith("/"), - headers: replayEventHeadersSchema, - body: z.string(), -}; - -export const replayMachineEventSchema = z.discriminatedUnion("protocol", [ - z.strictObject({ - protocol: z.literal("http"), - connection: z.literal("not_applicable"), - method: z - .string() - .min(1) - .transform((method) => method.toUpperCase()), - ...replayEventFields, - }), - z.strictObject({ - protocol: z.literal("websocket_connect"), - connection: z.enum(["initial", "reconnect"]), - method: z.null(), - ...replayEventFields, - }), - z.strictObject({ - protocol: z.literal("websocket_message"), - connection: z.enum(["initial", "reconnect"]), - method: z.null(), - ...replayEventFields, - }), -]); - -/** One bounded inbound protocol event offered to a replay machine. */ -export interface ReplayMachineEvent { - readonly protocol: "http" | "websocket_connect" | "websocket_message"; - readonly connection: "not_applicable" | "initial" | "reconnect"; - readonly at_ms: number; - readonly recorded_at_ms?: number; - readonly method: string | null; - readonly path: string; - readonly headers: Readonly>; - readonly body: string; -} - -/** Runtime counters committed only for events admitted by all machine limits. */ -export interface ReplayMachineUsage { - readonly events: number; - readonly transitions: number; - readonly connections: number; - readonly messages: number; - readonly bytes: number; - readonly last_at_ms: number; -} - -/** Persistable transition journal entry containing aliases, never secrets. */ -export interface ReplayTransitionRecord { - readonly sequence: number; - readonly at_ms: number; - readonly transition_id: string; - readonly state_before: string; - readonly state_after: string; - readonly sensitive_aliases: readonly string[]; -} - -/** Result of dispatching one event through a replay machine. */ -export type ReplayMachineDecision = - | { - readonly outcome: "matched"; - readonly actions: ReplayTransition["actions"]; - readonly transition: ReplayTransitionRecord; - } - | { - readonly outcome: - | "unmatched" - | "invalid_state" - | "guard_failed" - | "transition_exhausted" - | "invalid_capture" - | "unexpected_reconnect" - | "limit_exhausted"; - readonly actions: readonly []; - readonly transition: null; - }; - -const parseJson = (value: string): unknown => { - try { - const parsed: unknown = JSON.parse(value); - return parsed; - } catch { - return undefined; - } -}; - -const atPath = ( - value: unknown, - path: readonly (string | number)[], -): unknown => { - let current = value; - for (const segment of path) { - if (typeof segment === "number") { - if (!Array.isArray(current)) return undefined; - current = current[segment]; - continue; - } - if ( - typeof current !== "object" || - current === null || - !Object.hasOwn(current, segment) - ) - return undefined; - const next: unknown = Reflect.get(current, segment); - current = next; - } - return current; -}; - -const actionJsonBody = (transition: ReplayTransition): string | undefined => { - for (const action of transition.actions) - if (action.type === "http_response") return action.body; - else if (action.type === "websocket_send") return action.data; - return undefined; -}; - -const triggerKey = (transition: ReplayTransition): string => - `${transition.trigger.protocol}\0${transition.trigger.path}`; - -const readValue = ( - source: ReplayValueSource, - event: ReplayMachineEvent, - transition: ReplayTransition, -): unknown => { - switch (source.source) { - case "request_header": - return event.headers[source.name.toLowerCase()]; - case "request_json": - return atPath(parseJson(event.body), source.path); - case "websocket_json": - return atPath(parseJson(event.body), source.path); - case "action_json": { - const body = actionJsonBody(transition); - return body === undefined - ? undefined - : atPath(parseJson(body), source.path); - } - } -}; - -const triggerMatches = ( - transition: ReplayTransition, - event: ReplayMachineEvent, -): boolean => { - const trigger = transition.trigger; - if (trigger.protocol !== event.protocol || trigger.path !== event.path) - return false; - if ( - "headers" in trigger && - Object.entries(trigger.headers).some( - ([name, value]) => event.headers[name.toLowerCase()] !== value, - ) - ) - return false; - if (trigger.protocol === "http") - return ( - trigger.method === event.method && - (trigger.body === null || trigger.body === event.body) - ); - if (trigger.protocol === "websocket_message") - return trigger.body === null || trigger.body === event.body; - return true; -}; - -const createTransitionRecord = ({ - sequence, - atMs, - stateBefore, - transition, - captures, -}: TransitionRecordOptions): ReplayTransitionRecord => ({ - sequence, - at_ms: atMs, - transition_id: transition.id, - state_before: stateBefore, - state_after: transition.to, - sensitive_aliases: captures - .filter(({ sensitive }) => sensitive) - .map(({ variable }) => variable) - .sort(), -}); - -/** Stateful evaluator for one validated replay-machine instance. */ -export class ReplayMachineRuntime { - readonly #transitionsByTrigger = new Map< - string, - readonly IndexedReplayTransition[] - >(); - readonly #variables = new Map(); - readonly #sensitiveValues = new Map>(); - readonly #uses = new Map(); - readonly #stateVisits = new Map(); - readonly #timeline: ReplayTransitionRecord[] = []; - #state: string; - #connections = 0; - #messages = 0; - #bytes = 0; - #lastAtMs = 0; - #events = 0; - - constructor(readonly machine: ReplayMachine) { - this.#state = machine.initial_state; - this.#stateVisits.set(machine.initial_state, 1); - const byTrigger = new Map(); - for (const [ - declarationOrder, - transition, - ] of machine.transitions.entries()) { - const key = triggerKey(transition); - const indexed = byTrigger.get(key) ?? []; - indexed.push({ transition, declarationOrder }); - byTrigger.set(key, indexed); - } - for (const [key, indexed] of byTrigger) - this.#transitionsByTrigger.set( - key, - indexed.sort( - (left, right) => - left.transition.priority - right.transition.priority || - left.declarationOrder - right.declarationOrder, - ), - ); - } - - /** Current machine state after all accepted transitions. */ - get state(): string { - return this.#state; - } - - /** Ordered, secret-free transition records. */ - get timeline(): readonly ReplayTransitionRecord[] { - return this.#timeline; - } - - /** Current committed use of the machine's declared limits. */ - get usage(): ReplayMachineUsage { - return { - events: this.#events, - transitions: this.#timeline.length, - connections: this.#connections, - messages: this.#messages, - bytes: this.#bytes, - last_at_ms: this.#lastAtMs, - }; - } - - /** Replace captured secret values with stable aliases before persistence. */ - redact(value: string): string { - let redacted = value; - const secrets = [...this.#sensitiveValues] - .flatMap(([variable, values]) => - [...values].map((secret) => ({ variable, secret })), - ) - .sort( - (left, right) => - right.secret.length - left.secret.length || - left.variable.localeCompare(right.variable), - ); - for (const { variable, secret } of secrets) - redacted = redacted.replaceAll(secret, ``); - return redacted; - } - - /** Replace a field containing captured secrets with one stable alias only. */ - redactField(value: string): string { - const alias = [...this.#sensitiveValues] - .filter(([, values]) => - [...values].some((secret) => value.includes(secret)), - ) - .map(([variable]) => variable) - .sort()[0]; - return alias === undefined ? value : ``; - } - - /** Evaluate and, when admitted, commit one protocol event. */ - dispatch(event: ReplayMachineEvent): ReplayMachineDecision { - const normalizedEvent = { - ...event, - headers: Object.fromEntries( - Object.entries(event.headers).map(([name, value]) => [ - name.toLowerCase(), - value, - ]), - ), - }; - if (!this.#admitEvent(normalizedEvent)) - return this.#refusal("limit_exhausted"); - const matching = this.#matchingTransitions(normalizedEvent); - const eligible = matching.filter(({ transition }) => - this.#transitionStartsHere(transition), - ); - if (eligible.length === 0) - return this.#refusal(this.#noEligibleReason(matching, normalizedEvent)); - const guarded = eligible.filter(({ transition }) => - this.#transitionGuardsMatch(transition, normalizedEvent), - ); - if (guarded.length === 0) return this.#refusal("guard_failed"); - if (this.#timeline.length >= this.machine.max_transitions) - return this.#refusal("transition_exhausted"); - const usable = guarded.find( - ({ transition }) => - (this.#uses.get(transition.id) ?? 0) < transition.max_uses, - ); - if (usable === undefined) return this.#refusal("transition_exhausted"); - const transition = usable.transition; - const used = this.#uses.get(transition.id) ?? 0; - const nextState = this.machine.states.find( - ({ name }) => name === transition.to, - ); - const nextVisits = (this.#stateVisits.get(transition.to) ?? 0) + 1; - if (nextState === undefined || nextVisits > nextState.max_visits) - return this.#refusal("limit_exhausted"); - const captures = transition.captures.map((capture) => ({ - ...capture, - captured: readValue(capture.value, normalizedEvent, transition), - })); - if ( - captures.some( - ({ captured, sensitive }) => - !isJsonCompatible(captured) || - (sensitive && typeof captured !== "string"), - ) - ) - return this.#refusal("invalid_capture"); - for (const capture of captures) { - this.#variables.set(capture.variable, capture.captured); - if (capture.sensitive && typeof capture.captured === "string") { - const values = this.#sensitiveValues.get(capture.variable) ?? new Set(); - if (capture.captured.length > 0) values.add(capture.captured); - this.#sensitiveValues.set(capture.variable, values); - } - } - const record = createTransitionRecord({ - sequence: this.#timeline.length, - atMs: normalizedEvent.recorded_at_ms ?? normalizedEvent.at_ms, - stateBefore: this.#state, - transition, - captures, - }); - this.#uses.set(transition.id, used + 1); - this.#stateVisits.set(transition.to, nextVisits); - this.#state = transition.to; - this.#timeline.push(record); - return { - outcome: "matched", - actions: transition.actions, - transition: record, - }; - } - - #matchingTransitions( - event: ReplayMachineEvent, - ): readonly IndexedReplayTransition[] { - return ( - this.#transitionsByTrigger.get(`${event.protocol}\0${event.path}`) ?? [] - ).filter(({ transition }) => triggerMatches(transition, event)); - } - - #transitionStartsHere(transition: ReplayTransition): boolean { - return transition.from === this.#state; - } - - #noEligibleReason( - matching: readonly IndexedReplayTransition[], - event: ReplayMachineEvent, - ): "unmatched" | "unexpected_reconnect" | "invalid_state" { - if (matching.length === 0) return "unmatched"; - return event.protocol === "websocket_connect" && - event.connection === "reconnect" - ? "unexpected_reconnect" - : "invalid_state"; - } - - #transitionGuardsMatch( - transition: ReplayTransition, - event: ReplayMachineEvent, - ): boolean { - return transition.guards.every((guard) => { - if (!this.#variables.has(guard.variable)) return false; - return replayValuesEqual( - this.#variables.get(guard.variable), - readValue(guard.value, event, transition), - ); - }); - } - - #admitEvent(event: ReplayMachineEvent): boolean { - const connections = - this.#connections + (event.protocol === "websocket_connect" ? 1 : 0); - const messages = - this.#messages + (event.protocol === "websocket_message" ? 1 : 0); - const bytes = this.#bytes + Buffer.byteLength(event.body); - if ( - !Number.isSafeInteger(event.at_ms) || - event.at_ms < this.#lastAtMs || - event.at_ms > this.machine.limits.duration_ms || - connections > this.machine.limits.connections || - messages > this.machine.limits.messages || - bytes > this.machine.limits.bytes - ) - return false; - this.#connections = connections; - this.#messages = messages; - this.#bytes = bytes; - this.#lastAtMs = event.at_ms; - this.#events += 1; - return true; - } - - #refusal( - outcome: Exclude, - ): ReplayMachineDecision { - return { outcome, actions: [], transition: null }; - } -} diff --git a/src/domain/replayMachineUncapped.test.ts b/src/domain/replayMachineUncapped.test.ts deleted file mode 100644 index fc8760198..000000000 --- a/src/domain/replayMachineUncapped.test.ts +++ /dev/null @@ -1,129 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { replayMachineSchema } from "./replayMachine.js"; - -const websocketActions = (count: number) => - Array.from({ length: count }, () => ({ - type: "websocket_send" as const, - data: "ok", - })); - -const websocketMachine = () => ({ - initial_state: "start", - states: [ - { name: "start" }, - { name: "active", max_visits: 100_001 }, - { name: "done", terminal: true }, - ], - transitions: [ - { - id: "begin", - from: "start", - to: "active", - trigger: { protocol: "websocket_connect", path: "/begin" }, - actions: websocketActions(1), - max_uses: 10_001, - }, - { - id: "finish", - from: "active", - to: "done", - trigger: { protocol: "websocket_message", path: "/finish" }, - actions: websocketActions(1), - max_uses: 10_001, - }, - ], - max_transitions: 100_001, - limits: { - connections: 1_001, - messages: 100_001, - bytes: 10_000_001, - duration_ms: 300_001, - }, -}); - -describe("finite replay machine schema input size", () => { - it("accepts states, transitions, guards, captures, actions, and paths beyond old caps", () => { - const states: { name: string; terminal?: boolean }[] = Array.from( - { length: 257 }, - (_, index) => ({ - name: `state-${index}`, - }), - ); - states.push({ name: "complete", terminal: true }); - const transitions = Array.from({ length: 257 }, (_, index) => ({ - id: `chain-${index}`, - from: `state-${index}`, - to: index === 256 ? "complete" : `state-${index + 1}`, - trigger: { protocol: "http", method: "GET", path: `/chain-${index}` }, - actions: [{ type: "http_response", status: 200, body: "" }], - max_uses: 10_001, - })); - transitions.push( - ...Array.from({ length: 1_745 }, (_, index) => ({ - id: `loop-${index}`, - from: "state-0", - to: "state-0", - trigger: { protocol: "http", method: "GET", path: `/loop-${index}` }, - actions: [{ type: "http_response", status: 200, body: "" }], - max_uses: 10_001, - })), - ); - - const parsed = replayMachineSchema.safeParse({ - initial_state: "state-0", - states, - transitions, - max_transitions: 100_001, - limits: { - connections: 1_001, - messages: 100_001, - bytes: 10_000_001, - duration_ms: 300_001, - }, - }); - - expect(parsed.success).toBe(true); - if (parsed.success) { - expect(parsed.data.states).toHaveLength(258); - expect(parsed.data.transitions).toHaveLength(2_002); - } - }); - - it("accepts over 32 guards, captures, actions, and path segments", () => { - const path = Array.from({ length: 33 }, (_, index) => `key-${index}`); - const input = websocketMachine(); - const machine = { - ...input, - transitions: [ - { - id: "capture", - from: "start", - to: "active", - trigger: { protocol: "websocket_connect", path: "/begin" }, - captures: Array.from({ length: 33 }, () => ({ - variable: "value", - value: { source: "request_json", path }, - sensitive: false, - })), - actions: websocketActions(33), - max_uses: 10_001, - }, - { - id: "guarded-finish", - from: "active", - to: "done", - trigger: { protocol: "websocket_message", path: "/finish" }, - guards: Array.from({ length: 33 }, () => ({ - variable: "value", - value: { source: "request_json", path }, - })), - actions: websocketActions(33), - max_uses: 10_001, - }, - ], - }; - - expect(replayMachineSchema.safeParse(machine).success).toBe(true); - }); -}); diff --git a/src/domain/replayMachineValues.ts b/src/domain/replayMachineValues.ts deleted file mode 100644 index c940ead50..000000000 --- a/src/domain/replayMachineValues.ts +++ /dev/null @@ -1,93 +0,0 @@ -/** Compare JSON-compatible replay values without recursive stack growth. */ -export const replayValuesEqual = (left: unknown, right: unknown): boolean => { - const pending: [unknown, unknown][] = [[left, right]]; - while (pending.length > 0) { - const pair = pending.pop(); - if (pair === undefined) continue; - const [currentLeft, currentRight] = pair; - const primitive = equalPrimitiveReplayValues(currentLeft, currentRight); - if (primitive !== undefined) { - if (!primitive) return false; - continue; - } - const array = compareReplayArrays(currentLeft, currentRight, pending); - if (array !== undefined) { - if (!array) return false; - continue; - } - if (!compareReplayRecords(currentLeft, currentRight, pending)) return false; - } - return true; -}; - -/** Check that captured values can be serialized as JSON without recursion. */ -export const isJsonCompatible = (value: unknown): boolean => { - const pending: unknown[] = [value]; - while (pending.length > 0) { - const candidate = pending.pop(); - if ( - candidate === null || - typeof candidate === "string" || - typeof candidate === "boolean" - ) - continue; - if (typeof candidate === "number") { - if (!Number.isFinite(candidate)) return false; - continue; - } - if (Array.isArray(candidate)) { - for (const item of candidate) pending.push(item); - continue; - } - if (typeof candidate !== "object") return false; - for (const item of Object.values(candidate)) pending.push(item); - } - return true; -}; - -const equalPrimitiveReplayValues = ( - left: unknown, - right: unknown, -): boolean | undefined => { - if (left === null || typeof left === "string" || typeof left === "boolean") - return left === right; - if (typeof left !== "number") return undefined; - return ( - Number.isFinite(left) && - left === right && - typeof right === "number" && - Number.isFinite(right) - ); -}; - -const compareReplayArrays = ( - left: unknown, - right: unknown, - pending: [unknown, unknown][], -): boolean | undefined => { - if (!Array.isArray(left)) return undefined; - if (!Array.isArray(right) || left.length !== right.length) return false; - for (let index = 0; index < left.length; index += 1) - pending.push([left[index], right[index]]); - return true; -}; - -const compareReplayRecords = ( - left: unknown, - right: unknown, - pending: [unknown, unknown][], -): boolean | undefined => { - if (typeof left !== "object" || left === null) return undefined; - if (typeof right !== "object" || right === null || Array.isArray(right)) - return false; - const leftKeys = Object.keys(left).sort(); - const rightKeys = Object.keys(right).sort(); - if ( - leftKeys.length !== rightKeys.length || - leftKeys.some((key, index) => key !== rightKeys[index]) - ) - return false; - for (const key of leftKeys) - pending.push([Reflect.get(left, key), Reflect.get(right, key)]); - return true; -}; diff --git a/src/domain/runtimeCharacterization.test.ts b/src/domain/runtimeCharacterization.test.ts deleted file mode 100644 index ffb40071c..000000000 --- a/src/domain/runtimeCharacterization.test.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { - createRuntimeCharacterizationPlan, - parseRuntimeCharacterizationPlan, -} from "./runtimeCharacterization.js"; - -const digest = (character: string): string => character.repeat(64); - -describe("provider-neutral runtime characterization plan", () => { - it("commits the selected preparation inputs", () => { - const plan = createRuntimeCharacterizationPlan({ - preparation_sha256: digest("5"), - artifact: { - path: "/approved/app.js", - sha256: digest("1"), - byte_length: 100, - }, - runtime: { - family: "ecmascript", - provider_id: "node-javascript", - executable_path: "/usr/bin/node", - executable_sha256: digest("2"), - version: "v24.18.0", - profile_sha256: digest("3"), - }, - callable: { - callable_id: "bundle.module7.hidden", - module_id: "bundle.module7", - export_name: "selected", - semantic_evidence_id: null, - selector_sha256: digest("4"), - }, - working_directory: "/owned/work", - isolated_home: "/owned/home", - expected_effect: "pure", - allowed_boundaries: [], - limits: { - max_calls: 2, - max_processes: 0, - max_files: 0, - max_bytes: 65_536, - max_handles: 32, - timeout_ms: 5_000, - idle_timeout_ms: 1_000, - }, - determinism: { - clock: "fixed", - randomness: "seeded", - identifiers: "deterministic", - seed: 7, - }, - }); - - expect(parseRuntimeCharacterizationPlan(plan)).toEqual(plan); - expect(() => - parseRuntimeCharacterizationPlan({ - ...plan, - expected_effect: "bounded-effects", - }), - ).toThrow(/digest is invalid/u); - }); -}); diff --git a/src/domain/runtimeCharacterization.ts b/src/domain/runtimeCharacterization.ts deleted file mode 100644 index 85ad3103e..000000000 --- a/src/domain/runtimeCharacterization.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { createHash } from "node:crypto"; - -import canonicalize from "canonicalize"; -import { z } from "zod"; -import { digestSchema } from "./../domain/digests.js"; - -const stableIdSchema = z.string().regex(/^[A-Za-z][A-Za-z0-9._:/-]*$/u); - -const runtimeIdentitySchema = z.strictObject({ - family: z.string().trim().min(1), - provider_id: stableIdSchema, - executable_path: z.string().min(1), - executable_sha256: digestSchema, - version: z.string().trim().min(1), - profile_sha256: digestSchema, -}); - -const artifactIdentitySchema = z.strictObject({ - path: z.string().min(1), - sha256: digestSchema, - byte_length: z.number().int().min(0).max(Number.MAX_SAFE_INTEGER), -}); - -const callableIdentitySchema = z.strictObject({ - callable_id: stableIdSchema, - module_id: stableIdSchema, - export_name: z.string().min(1), - semantic_evidence_id: z - .string() - .regex(/^ev_[a-f0-9]{64}$/u) - .nullable(), - selector_sha256: digestSchema, -}); - -export const runtimeCharacterizationPlanSchema = z.strictObject({ - plan_sha256: digestSchema, - preparation_sha256: digestSchema, - artifact: artifactIdentitySchema, - runtime: runtimeIdentitySchema, - callable: callableIdentitySchema, - working_directory: z.string().min(1), - isolated_home: z.string().min(1), - expected_effect: z.enum(["pure", "bounded-effects", "observation-only"]), - allowed_boundaries: z.array(stableIdSchema), - limits: z.strictObject({ - max_calls: z.number().int().min(1), - max_processes: z.number().int().min(0), - max_files: z.number().int().min(0), - max_bytes: z.number().int().min(1).max(Number.MAX_SAFE_INTEGER), - max_handles: z.number().int().min(0), - timeout_ms: z.number().int().min(1), - idle_timeout_ms: z.number().int().min(1), - }), - determinism: z.strictObject({ - clock: z.enum(["fixed", "real"]), - randomness: z.enum(["seeded", "system"]), - identifiers: z.enum(["deterministic", "runtime"]), - seed: z.number().int().min(0).max(0xffff_ffff), - }), -}); - -export type RuntimeCharacterizationPlan = z.infer< - typeof runtimeCharacterizationPlanSchema ->; - -/** Commit a provider-neutral preparation plan; execution checks the resulting content identity. */ -export const createRuntimeCharacterizationPlan = ( - input: Omit, "plan_sha256">, -): RuntimeCharacterizationPlan => { - const parsed = runtimeCharacterizationPlanSchema - .omit({ plan_sha256: true }) - .parse(input); - return runtimeCharacterizationPlanSchema.parse({ - ...parsed, - plan_sha256: digest(parsed), - }); -}; - -/** Parse a characterization plan and reject altered commitments. */ -export const parseRuntimeCharacterizationPlan = ( - input: unknown, -): RuntimeCharacterizationPlan => { - const parsed = runtimeCharacterizationPlanSchema.parse(input); - const { plan_sha256: planSha256, ...semantic } = parsed; - if (planSha256 !== digest(semantic)) - throw new TypeError("Runtime characterization plan digest is invalid"); - return parsed; -}; - -const digest = (value: unknown): string => { - const encoded = canonicalize(value); - if (encoded === undefined) - throw new TypeError("Runtime characterization plan is not canonical JSON"); - return createHash("sha256").update(encoded).digest("hex"); -}; diff --git a/src/domain/staticRuntimeCorrelation.test.ts b/src/domain/staticRuntimeCorrelation.test.ts index e7273fd28..e2d4fff14 100644 --- a/src/domain/staticRuntimeCorrelation.test.ts +++ b/src/domain/staticRuntimeCorrelation.test.ts @@ -5,6 +5,7 @@ import { createEvidence, type Evidence } from "./evidence.js"; import type { JsonValue } from "./jsonValue.js"; import { correlateStaticAndRuntime, + staticRuntimeCorrelationInputSchema, staticRuntimeCorrelationResultSchema, } from "./staticRuntimeCorrelation.js"; @@ -44,9 +45,7 @@ const processComparison = ( interaction: terminal === "truncated" ? "truncated" : "unchanged", exit: terminal === "truncated" ? "truncated" : "unchanged", filesystem: terminal === "truncated" ? "truncated" : "unchanged", - protocol: terminal === "truncated" ? "truncated" : "unchanged", process: terminal === "truncated" ? "truncated" : "unchanged", - shim: terminal === "truncated" ? "truncated" : "unchanged", first_divergence: terminal === "changed" ? { @@ -88,7 +87,7 @@ const processComparison = ( const mapping = ( runtime: Evidence, expected: "cochanged" | "static_only" | "runtime_only" | "both_unchanged", - dimension: "terminal" | "interaction" | "exit" | "shim" = "terminal", + dimension: string = "terminal", ) => ({ static_comparisons: [staticComparison], runtime_comparisons: [runtime], @@ -115,14 +114,17 @@ const mapping = ( }); describe("static/runtime correlation", () => { - it("accepts interaction and shim runtime dimensions", () => { + it("accepts real runtime dimensions and rejects removed protocol dimensions", () => { const runtime = processComparison("unchanged"); expect( correlateStaticAndRuntime(mapping(runtime, "static_only", "interaction")), ).toMatchObject({ status: "correlated" }); - expect( - correlateStaticAndRuntime(mapping(runtime, "static_only", "shim")), - ).toMatchObject({ status: "correlated" }); + for (const dimension of ["protocol", "shim"] as const) + expect( + staticRuntimeCorrelationInputSchema.safeParse( + mapping(runtime, "static_only", dimension), + ).success, + ).toBe(false); }); it("keeps consistent cochange as a hypothesis with complete citations", () => { diff --git a/src/domain/staticRuntimeCorrelation.ts b/src/domain/staticRuntimeCorrelation.ts index 3b7f390b7..194e49bb2 100644 --- a/src/domain/staticRuntimeCorrelation.ts +++ b/src/domain/staticRuntimeCorrelation.ts @@ -11,6 +11,7 @@ import { comparisonStatusSchema, processCaptureComparisonSchema, } from "./processCapture.js"; +import { PROCESS_COMPARISON_DIMENSIONS } from "./processComparison.js"; import { prefixedDigestSchema } from "./../domain/digests.js"; const evidenceIdSchema = prefixedDigestSchema("ev"); @@ -24,15 +25,7 @@ const functionDimensionSchema = z.enum([ "strings_names", "cfg", ]); -const runtimeDimensionSchema = z.enum([ - "terminal", - "interaction", - "exit", - "filesystem", - "protocol", - "process", - "shim", -]); +const runtimeDimensionSchema = z.enum(PROCESS_COMPARISON_DIMENSIONS); const expectedPatternSchema = z.enum([ "cochanged", "static_only", diff --git a/src/generatedMcpToolCatalog.ts b/src/generatedMcpToolCatalog.ts index 1ec9b536d..070bc869d 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},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"inventory_artifact","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},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"inspect_artifact","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},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"extract_artifact","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"decode_interface_builder","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"inspect_keyed_archive","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},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"inspect_asset_catalog","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":true,"mutatesArtifact":false,"requiresRoot":false},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"observe_native_ui","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":true,"mayShowUi":true,"mayWriteFilesystem":true,"mutatesArtifact":false,"requiresRoot":false},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"capture_native_ui_scenario","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"inspect_macho","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"inspect_signature","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"inspect_plist","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"list_architectures","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"demangle_swift","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"inspect_native_dispatch_metadata","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},"limitations":["This capability inventories PE/CLI identity only; inspect_managed_members admits metadata members, signatures, and CIL anchors.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"operation":"inspect_managed_artifact","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},"limitations":["This capability decodes PE/CLI metadata members, signatures, and file-backed method bodies; decompiled C# reconstruction and cross-build member comparison are separate operations.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"operation":"inspect_managed_members","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},"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."],"operation":"inspect_managed_native_boundaries","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":"inspect_native_data_type","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one recovered type by exact database category path or defined typed data address. Returns observed size, alignment, packing, fields, bitfields, enum values, and child type identities; source-level authority and flexible-tail semantics remain unknown unless substantiated.","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":[{"type":"/MyStruct"}],"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"document":{"description":"Exact provider document or program identity.","type":"string"},"type":{"description":"Value for type.","minLength":1,"type":"string"}},"type":"object"},"kind":"official-proxy","name":"inspect_native_data_type","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"alignment_bytes":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"array_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"array_stride_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"fields":{"items":{"additionalProperties":false,"properties":{"bit_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"bit_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flexible_tail":{"const":"unknown","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"offset_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["observed","unsupported"],"type":"string"},"type_id":{"type":"string"}},"required":["ordinal","name","offset_bytes","size_bytes","type_id","bit_size","bit_offset","status","flexible_tail"],"type":"object"},"type":"array"},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["struct","union","enum","pointer","array","typedef","scalar","unsupported","unavailable"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"members":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"],"type":"object"},"type":"array"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"packing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"referenced_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"source":{"const":"analysis-database","type":"string"},"source_archive":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["available","unavailable"],"type":"string"},"total_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["status","reason","id","name","kind","source","source_archive","address","size_bytes","alignment_bytes","packing_enabled","referenced_type","array_count","array_stride_bytes","fields","members","total_fields","truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Native Data Type"},{"analysisOperation":"inspect_native_instruction","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one exact instruction address: decoded bytes, mnemonic, ordered operand tokens, flow and typed references. Memory addressing decomposition is unavailable when the provider supplies only tokens. Data, interior instruction addresses and undecodable bytes are distinct outcomes.","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.","type":"string"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"inspect_native_instruction","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"architecture":{"type":"string"},"bytes":{"anyOf":[{"type":"string"},{"type":"null"}]},"flow":{"additionalProperties":false,"properties":{"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"direct_destinations":{"items":{"type":"string"},"type":"array"},"kind":{"enum":["call","jump","return","fallthrough","terminal","unavailable"],"type":"string"}},"required":["kind","conditional","computed","direct_destinations"],"type":"object"},"length":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"mnemonic":{"anyOf":[{"type":"string"},{"type":"null"}]},"mode":{"type":"string"},"operands":{"items":{"additionalProperties":false,"properties":{"components":{"items":{"additionalProperties":false,"properties":{"bit_width":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"kind":{"enum":["register","immediate","address","unknown"],"type":"string"},"text":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","text","value","bit_width"],"type":"object"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"memory_addressing":{"const":"unavailable","type":"string"},"provider_type":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"raw":{"type":"string"}},"required":["index","raw","provider_type","components","memory_addressing"],"type":"object"},"type":"array"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]},"raw_disassembly":{"anyOf":[{"type":"string"},{"type":"null"}]},"references":{"items":{"additionalProperties":false,"properties":{"call":{"type":"boolean"},"computed":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"target_address":{"type":"string"},"type":{"type":"string"}},"required":["target_address","type","call","jump","indirect","computed","operand_index"],"type":"object"},"type":"array"},"status":{"enum":["decoded","not-instruction-boundary","data","undecodable","outside-memory"],"type":"string"}},"required":["address","status","procedure","architecture","mode","bytes","length","mnemonic","raw_disassembly","operands","flow","references","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Native Instruction"},{"analysisOperation":"resolve_native_call_targets","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve one explicit static call site using typed provider call references. Preserves ambiguous targets as candidates and unresolved computed calls as unknown; does not execute code or traverse a call graph.","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.","type":"string"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"resolve_native_call_targets","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"call_site":{"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mechanism":{"enum":["direct","computed","indirect","unavailable"],"type":"string"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["direct","resolved-indirect","ambiguous","unresolved","not-call","unavailable"],"type":"string"},"targets":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"basis":{"const":"provider-reference","type":"string"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]},"references":{"items":{"additionalProperties":false,"properties":{"call":{"type":"boolean"},"computed":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"target_address":{"type":"string"},"type":{"type":"string"}},"required":["target_address","type","call","jump","indirect","computed","operand_index"],"type":"object"},"type":"array"},"status":{"enum":["direct","resolved-indirect","candidate"],"type":"string"}},"required":["address","procedure","status","basis","references"],"type":"object"},"type":"array"}},"required":["call_site","procedure","status","mechanism","targets","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Resolve Native Call Targets"},{"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"}},"type":"object"},"kind":"official-proxy","name":"address_name","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"comment","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"current_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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. This uses GUI cursor state and is not a procedure-name 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"}},"type":"object"},"kind":"official-proxy","name":"current_procedure","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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.","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":{},"type":"object"},"kind":"official-proxy","name":"current_document","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"goto_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"inline_comment","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"list_bookmarks","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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":{},"type":"object"},"kind":"official-proxy","name":"list_documents","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Documents"},{"analysisOperation":"list_names","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every analyzed memory and external symbol as address/value pairs. Provider metadata distinguishes Ghidra primary, dynamic, external, type, and source facts when available.","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"}},"type":"object"},"kind":"official-proxy","name":"list_names","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"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"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Names"},{"analysisOperation":"list_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every analyzed procedure as address/value pairs after provider analysis. Ghidra metadata distinguishes thunks and external functions; 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":[{}],"properties":{"document":{"description":"The document name","type":"string"}},"type":"object"},"kind":"official-proxy","name":"list_procedures","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"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"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"list_segments","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"type":"object"},"requiresSession":false,"title":"List Segments"},{"analysisOperation":"list_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every provider-defined string, or filter to one address, as address/value pairs. Ghidra also reports encoding, terminator status, and byte length.","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"}},"type":"object"},"kind":"official-proxy","name":"list_strings","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"minLength":1,"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"value":{"type":"string"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"next_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"prev_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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.","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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_assembly","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callees","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence"],"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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callers","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Procedure Callers"},{"analysisOperation":"procedure_info","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return provider metadata for one procedure identified by symbol or address: entrypoint, signature, locals, size, block count, and complete inclusive body ranges when observed. Body byte count and enclosing span remain distinct; unavailable extent is explicit.","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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_info","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"basicblock_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Procedure Info"},{"analysisOperation":"read_function_instructions","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return every raw instruction for one analyzed procedure. Instruction text is provider-specific.","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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"read_function_instructions","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"instructions":{"items":{"type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"}},"required":["procedure","instructions","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Read Function Instructions"},{"analysisOperation":"read_bytes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read 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":9007199254740991,"minimum":1,"type":"integer"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"read_bytes","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":9007199254740991,"minimum":1,"type":"integer"},"returned_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["address","requested_bytes","returned_bytes","bytes_hex","complete"],"type":"object"}},"required":["result","evidence_id","evidence"],"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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"address_to_file_offset","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"type":"object"},"requiresSession":false,"title":"Address To File Offset"},{"analysisOperation":"procedure_references","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return every raw incoming or outgoing reference edge 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","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"},"procedure":{"description":"The procedure name or address","type":"string"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_references","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"direction":{"enum":["incoming","outgoing"],"type":"string"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},"reference_kinds_available":{"type":"boolean"},"references":{"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"unresolved_calls":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"reason":{"type":"string"}},"required":["address","reason"],"type":"object"},"type":"array"}},"required":["procedure","direction","unresolved_calls","references"],"type":"object"}},"required":["result","evidence_id","evidence"],"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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_pseudo_code","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence"],"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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"resolve_containing_procedure","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"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"],"type":"object"},"requiresSession":false,"title":"Resolve Containing Procedure"},{"analysisOperation":"search_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search every analyzed procedure name using literal matching by default or regex when requested. Results are deterministic and complete.","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,"mode":"literal","pattern":"main"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"pattern":{"description":"The literal text or regex pattern to search for","minLength":1,"type":"string"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_procedures","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Search Procedures"},{"analysisOperation":"search_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search every analyzed string using literal matching by default or regex when requested. Results are deterministic and complete.","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,"mode":"literal","pattern":"authorization failed"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"pattern":{"description":"The literal text or regex pattern to search for","minLength":1,"type":"string"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_strings","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"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.","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"}},"required":["address","name"],"type":"object"},"kind":"official-proxy","name":"set_address_name","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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 multiple addresses in one call and return per-address success booleans. This mutates analysis metadata; 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"}},"required":["names"],"type":"object"},"kind":"official-proxy","name":"set_addresses_names","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":{"type":"boolean"},"propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence"],"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 and report success. This mutates navigation metadata; bookmarks are analyst-authored navigation aids, not 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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"set_bookmark","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_comment","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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; list_documents can supply names when needed, while explicit document inputs keep calls reproducible.","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"}},"required":["document"],"type":"object"},"kind":"official-proxy","name":"set_current_document","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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.","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"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_inline_comment","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"unset_bookmark","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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. Hopper may default to its current cursor; headless providers such as Ghidra require an explicit address. 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"}},"type":"object"},"kind":"official-proxy","name":"xrefs","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Xrefs"},{"analysisOperation":"inspect_native_dispatch_metadata","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect the bound provider\'s name inventory for Objective-C class/method symbols and Swift mangled symbols, returning at most max_records decoded names. Includes target SHA-256 when available, provider identity/version, analysis-profile digest, facet coverage, and per-record Evidence. This is symbol-level evidence, not runtime metadata: ivar layouts, protocol conformances, witness/class tables, and relative pointers are explicitly marked unsupported unless a provider supplies those decoders. The provider controls how its name inventory is acquired.","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":[{"max_records":5000}],"properties":{"max_records":{"default":5000,"description":"Maximum permitted records for this operation.","maximum":20000,"minimum":1,"type":"integer"}},"type":"object"},"kind":"enhanced","name":"inspect_native_dispatch_metadata","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"analysis_profile_digest":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"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"},"result":{"additionalProperties":false,"properties":{"coverage":{"default":[],"items":{"additionalProperties":false,"properties":{"decoded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"examined":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"facet":{"minLength":1,"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["complete","partial","unsupported","not_requested"],"type":"string"}},"required":["facet","status","reason","examined","decoded"],"type":"object"},"type":"array"},"db_save_result":{"anyOf":[{"additionalProperties":false,"properties":{"database_path":{"anyOf":[{"type":"string"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"operation":{"enum":["save","readback","open_database","close_database","export","import"],"type":"string"},"preserved_bookmarks":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"preserved_comments":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"preserved_names":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"succeeded":{"type":"boolean"}},"required":["operation","succeeded","preserved_names","preserved_comments","preserved_bookmarks","database_path","error"],"type":"object"},{"type":"null"}]},"objc_classes":{"default":[],"items":{"additionalProperties":false,"properties":{"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"type":"string"},"artifact_sha256":{"type":"string"},"description":{"type":"string"},"kind":{"const":"binary_metadata","type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"instance_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"is_meta_class":{"default":false,"type":"boolean"},"is_root_class":{"default":false,"type":"boolean"},"ivar_count":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"metaclass_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"methods":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"},"name":{"minLength":1,"type":"string"},"properties":{"default":[],"items":{"additionalProperties":false,"properties":{"attributes":{"default":[],"items":{"additionalProperties":false,"properties":{"is_atomic":{"default":false,"type":"boolean"},"is_copy":{"default":false,"type":"boolean"},"is_strong":{"default":false,"type":"boolean"},"is_weak":{"default":false,"type":"boolean"},"name":{"minLength":1,"type":"string"},"value":{"type":"string"}},"required":["name","value","is_weak","is_atomic","is_copy","is_strong"],"type":"object"},"type":"array"},"getter":{"anyOf":[{"type":"string"},{"type":"null"}]},"is_readonly":{"default":false,"type":"boolean"},"name":{"minLength":1,"type":"string"},"setter":{"anyOf":[{"type":"string"},{"type":"null"}]},"type_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","type_encoding","attributes","is_readonly","getter","setter"],"type":"object"},"type":"array"},"protocols":{"default":[],"items":{"type":"string"},"type":"array"},"super_class":{"anyOf":[{"type":"string"},{"type":"null"}]},"superclass_address":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","super_class","is_meta_class","is_root_class","methods","properties","protocols","ivar_count","instance_size"],"type":"object"},"type":"array"},"objc_dispatch_implementations":{"default":[],"items":{"additionalProperties":false,"properties":{"class_name":{"minLength":1,"type":"string"},"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"implementation_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"method_type":{"enum":["instance","class"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["class_name","selector","method_type","implementation_address","location","decode","evidence"],"type":"object"},"type":"array"},"objc_ivars":{"default":[],"items":{"additionalProperties":false,"properties":{"alignment":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}],"default":null},"class_name":{"minLength":1,"type":"string"},"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"name":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"default":null},"type_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["class_name","name","type_encoding","offset","size","alignment","location","decode","evidence"],"type":"object"},"type":"array"},"objc_protocol_records":{"default":[],"items":{"additionalProperties":false,"properties":{"adopted_protocols":{"items":{"type":"string"},"type":"array"},"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"methods":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"},"name":{"type":"string"},"optional_methods":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"}},"required":["name","adopted_protocols","methods","optional_methods","location","decode","evidence"],"type":"object"},"type":"array"},"objc_protocols":{"default":[],"items":{"additionalProperties":false,"properties":{"methods":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"},"name":{"minLength":1,"type":"string"},"optional_methods":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"},"properties":{"default":[],"items":{"additionalProperties":false,"properties":{"attributes":{"default":[],"items":{"additionalProperties":false,"properties":{"is_atomic":{"default":false,"type":"boolean"},"is_copy":{"default":false,"type":"boolean"},"is_strong":{"default":false,"type":"boolean"},"is_weak":{"default":false,"type":"boolean"},"name":{"minLength":1,"type":"string"},"value":{"type":"string"}},"required":["name","value","is_weak","is_atomic","is_copy","is_strong"],"type":"object"},"type":"array"},"getter":{"anyOf":[{"type":"string"},{"type":"null"}]},"is_readonly":{"default":false,"type":"boolean"},"name":{"minLength":1,"type":"string"},"setter":{"anyOf":[{"type":"string"},{"type":"null"}]},"type_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","type_encoding","attributes","is_readonly","getter","setter"],"type":"object"},"type":"array"}},"required":["name","methods","optional_methods","properties"],"type":"object"},"type":"array"},"relative_pointers":{"default":[],"items":{"additionalProperties":false,"properties":{"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"displacement":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"field":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"indirect":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"indirectable":{"type":"boolean"},"target":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["field","target","displacement","indirectable","indirect","decode","evidence"],"type":"object"},"type":"array"},"swift_conformances":{"default":[],"items":{"additionalProperties":false,"properties":{"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"module":{"anyOf":[{"type":"string"},{"type":"null"}]},"protocol_name":{"minLength":1,"type":"string"},"type_name":{"minLength":1,"type":"string"},"witness_table":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["type_name","protocol_name","module","witness_table","location","decode","evidence"],"type":"object"},"type":"array"},"swift_decls":{"default":[],"items":{"additionalProperties":false,"properties":{"access_level":{"default":"internal","enum":["private","fileprivate","internal","public","open"],"type":"string"},"is_convenience_init":{"default":false,"type":"boolean"},"is_final":{"default":false,"type":"boolean"},"is_override":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"kind":{"enum":["class","struct","enum","protocol","extension","actor","global_var","global_func"],"type":"string"},"module":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"protocols":{"default":[],"items":{"type":"string"},"type":"array"},"super_class":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","name","module","access_level","super_class","protocols","is_final","is_required","is_convenience_init","is_override"],"type":"object"},"type":"array"},"swift_dispatch_slots":{"default":[],"items":{"additionalProperties":false,"properties":{"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"implementation":{"anyOf":[{"type":"string"},{"type":"null"}]},"implementation_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"owner":{"minLength":1,"type":"string"},"requirement":{"anyOf":[{"type":"string"},{"type":"null"}]},"slot_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"table_kind":{"enum":["witness_table","class_vtable"],"type":"string"},"thunk_address":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["owner","table_kind","slot_index","requirement","implementation","implementation_address","thunk_address","location","decode","evidence"],"type":"object"},"type":"array"},"swift_symbols":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"mangled_name":{"minLength":1,"type":"string"}},"required":["mangled_name","address","decode","evidence"],"type":"object"},"type":"array"}},"required":["objc_classes","objc_protocols","swift_decls","objc_ivars","objc_protocol_records","objc_dispatch_implementations","swift_conformances","swift_dispatch_slots","swift_symbols","relative_pointers","coverage","db_save_result"],"type":"object"},"target_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["target_sha256","provider","analysis_profile_digest","result"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Native Dispatch Metadata"},{"analysisOperation":"get_objc_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate Objective-C class labels, optionally filtering by literal substring.","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":"Literal text or regular expression used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"get_objc_classes","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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.","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":{"$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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"type":"object"},"requiresSession":false,"title":"Get Objc Protocols"},{"analysisOperation":"batch_decompile","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decompile each explicit procedure symbol or address concurrently. Returns ordered per-item success or error results and aggregate counts.","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"},"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"}]},"__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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"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"],"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 until the reachable graph is exhausted. 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","direction":"forward"}],"properties":{"address":{"description":"A provider-normalized procedure address","type":"string"},"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"}]},"__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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"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"],"type":"object"},"requiresSession":false,"title":"Get Call Graph"},{"analysisOperation":"analyze_swift_types","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Categorize analyzed procedure names into Swift classes, structs, enums, protocols, extensions, and other symbols. Returns deduplicated names grouped with counts. Optionally select one category and/or apply a case-sensitive literal name filter; for example, use {category: \\"classes\\", pattern: \\"Account\\"} to find matching class 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":[{"category":"classes","pattern":"Account"}],"properties":{"category":{"description":"Limit results to one Swift symbol category.","enum":["classes","structs","enums","protocols","extensions","other"],"type":"string"},"pattern":{"description":"Case-sensitive literal filter applied to mangled symbol names.","type":"string"}},"type":"object"},"kind":"enhanced","name":"analyze_swift_types","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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 against the bound provider\'s name inventory and return a resolved or unresolved result. Unresolved names use the stable name_not_found reason; this 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":{"$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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"type":"object"},"requiresSession":false,"title":"Find Xrefs To Name"},{"analysisOperation":"binary_overview","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return native-binary metadata, every segment with its length, and exhaustive procedure/string counts. Use search_procedures, list_procedures, or analyze_function directly when you already know which procedure to inspect.","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":"binary_overview","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"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","length"],"type":"object"},"type":"array"},"string_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["document","segments","segment_count","procedure_count","string_count"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Binary Overview"},{"analysisOperation":"analyze_function","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Build a dossier for one native function identified by symbol or provider-returned address. Returns identity with complete inclusive body ranges or explicit unknown, provider-specific pseudocode and assembly, comments, calls, references, referenced strings/names, local CFG blocks, and available native API boundary observations.","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":{"procedure":{"description":"A procedure name or address","type":"string"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"analyze_function","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"assembly":{"items":{"type":"string"},"type":"array"},"basic_blocks":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"start":{"type":"string"},"successors":{"items":{"type":"string"},"type":"array"}},"required":["start","end","successors"],"type":"object"},"type":"array"},"callees":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},"type":"array"},"callers":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},"type":"array"},"comments":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"kind":{"enum":["comment","inline"],"type":"string"},"text":{"type":"string"}},"required":["address","kind","text"],"type":"object"},"type":"array"},"incoming_references":{"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"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","ghidra-aarch64-byte-table","ghidra-aarch64-halfword-table"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"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"},"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","confidence","evidence"],"type":"object"},"type":"array"}},"required":["dispatch_address","data_sources","mappings","limitations"],"type":"object"},"type":"array"},"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"},"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","jump_tables","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},{"type":"null"}],"default":null},"native_value_flow":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"def_use":{"items":{"additionalProperties":false,"properties":{"definition":{"minLength":1,"type":"string"},"input_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"use":{"minLength":1,"type":"string"}},"required":["definition","use","input_index"],"type":"object"},"type":"array"},"effects":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["memory_read","memory_write","conditional_branch","indirect_branch","direct_call","indirect_call"],"type":"string"},"operand_input":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"operation":{"minLength":1,"type":"string"},"value_input":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["operation","kind","operand_input","value_input"],"type":"object"},"type":"array"},"known_omitted_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"known_omitted_inputs":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"omitted_operations_lower_bound":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"block_membership":{"default":"unavailable","enum":["member","detached","unavailable"],"type":"string"},"id":{"minLength":1,"type":"string"},"inputs":{"items":{"additionalProperties":false,"properties":{"constant_hex":{"anyOf":[{"pattern":"^[0-9a-f]+$","type":"string"},{"type":"null"}]},"kind":{"enum":["constant","address","register","unique","other"],"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","size_bytes","location","constant_hex"],"type":"object"},"type":"array"},"is_dead":{"type":"boolean"},"opcode":{"minLength":1,"type":"string"},"output":{"anyOf":[{"additionalProperties":false,"properties":{"constant_hex":{"anyOf":[{"pattern":"^[0-9a-f]+$","type":"string"},{"type":"null"}]},"kind":{"enum":["constant","address","register","unique","other"],"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","size_bytes","location","constant_hex"],"type":"object"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["id","address","sequence","opcode","is_dead","block_membership","inputs","output"],"type":"object"},"type":"array"},"parameter_uses":{"default":[],"items":{"additionalProperties":false,"properties":{"input_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"use":{"type":"string"}},"required":["ordinal","use","input_index"],"type":"object"},"type":"array"},"parameters":{"default":[],"items":{"additionalProperties":false,"properties":{"data_type":{"type":"string"},"name":{"type":"string"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["ordinal","name","data_type"],"type":"object"},"type":"array"},"provenance":{"const":"ghidra-high-pcode","type":"string"},"truncated":{"type":"boolean"}},"required":["available","provenance","operations","def_use","effects","parameters","parameter_uses","truncated","omitted_operations_lower_bound","known_omitted_inputs","known_omitted_edges","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"reason":{"minLength":1,"type":"string"}},"required":["available","reason","limitations"],"type":"object"}]},{"type":"null"}],"default":null},"outgoing_references":{"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body","signature","locals"],"type":"object"},"pseudocode":{"type":"string"},"referenced_names":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"referenced_strings":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"}},"required":["procedure","pseudocode","assembly","comments","callers","callees","incoming_references","outgoing_references","referenced_strings","referenced_names","basic_blocks","native_api","native_value_flow","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Analyze Function"},{"analysisOperation":"inspect_native_api","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Analyze a native API boundary in one function identified by symbol or provider-returned address. Returns confidence, evidence, jump-table dispatch/data/target mappings, 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":[{"procedure":"main"}],"properties":{"procedure":{"description":"A procedure name or address","type":"string"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"inspect_native_api","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","ghidra-aarch64-byte-table","ghidra-aarch64-halfword-table"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"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"},"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","confidence","evidence"],"type":"object"},"type":"array"}},"required":["dispatch_address","data_sources","mappings","limitations"],"type":"object"},"type":"array"},"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"},"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","jump_tables","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"},"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":["procedure","boundary","substeps","unsupported_branches","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Native Api"},{"analysisOperation":"trace_feature","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a literal feature query through every matching string and procedure, their xrefs, and truthful containing-procedure resolution. Returns observations, operation count, and residual unknowns 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,"query":"license"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"trace_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"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","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 across analyzed string entries, xrefs, and truthful containing-procedure candidates. Returns observations, operation count, 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,"query":"authorization failed"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"find_code_for_string","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"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","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Find Code For String"},{"analysisOperation":"trace_call_path","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace direct callers or callees from one exact procedure address until the graph is exhausted or the optional goal is reached. Returns visited nodes, direct-call edges, a shortest traversal path, provider failures, and residual unknowns; unresolved indirect calls remain unknown.","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","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"},"start":{"description":"A provider-normalized procedure address","type":"string"}},"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"}]},"__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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]}},"required":["address","error"],"type":"object"},"type":"array"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}]},"goal_status":{"enum":["not_requested","reached","not_reached"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"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":{"additionalProperties":false,"properties":{"nodes_visited":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["nodes_visited"],"type":"object"},"traversal_path":{"items":{"type":"string"},"type":"array"},"truncated":{"type":"boolean"}},"required":["start","goal","direction","goal_status","nodes","edges","traversal_path","failures","traversal","truncated","residual_unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Trace Call Path"},{"analysisOperation":"trace_native_ui_action","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace one unique compiled UI action, object ID, native symbol or exact function address through authored connections, encoded or symbolized Objective-C handlers, and bounded static call references. Typed direct and resolved indirect calls, ambiguous candidates, inferred untyped provider callees, and targetless sites remain distinct. Runtime reachability is unknown; use trace_native_values for recovered value dependencies.","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":[{"action":"buildTapped:","max_depth":8,"max_edges":500,"max_nodes":250}],"properties":{"action":{"description":"A unique compiled UI action selector, interface object ID, native symbol or exact function address","minLength":1,"type":"string"},"max_depth":{"default":8,"description":"Maximum permitted depth for this operation.","maximum":32,"minimum":0,"type":"integer"},"max_edges":{"default":500,"description":"Maximum permitted edges for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_nodes":{"default":250,"description":"Maximum permitted nodes for this operation.","maximum":2000,"minimum":1,"type":"integer"}},"required":["action"],"type":"object"},"kind":"enhanced","name":"trace_native_ui_action","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"items":{"additionalProperties":false,"properties":{"examined":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"facet":{"minLength":1,"type":"string"},"omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["complete","partial","unsupported","not_requested"],"type":"string"}},"required":["facet","status","reason","examined","omitted"],"type":"object"},"type":"array"},"direction":{"enum":["forward","backward"],"type":"string"},"edges":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"enum":["observed","inferred","resolved","ambiguous"],"type":"string"},"to":{"minLength":1,"type":"string"}},"required":["id","from","to","relation","resolution","evidence","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"reason":{"minLength":1,"type":"string"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"const":"unresolved","type":"string"},"to":{"type":"null"}},"required":["id","from","to","relation","resolution","reason","evidence","limitations"],"type":"object"}]},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"attributes":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"id":{"minLength":1,"type":"string"},"kind":{"enum":["storyboard","scene","view_controller","view","control","constraint","layout_guide","resource","placeholder","external_object","outlet","action","segue","objc_class","objc_selector","swift_declaration","swift_requirement","dispatch_table","dispatch_slot","thunk","function","state_value","global_value","field","branch_condition","sink","unknown"],"type":"string"},"location":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},{"type":"null"}]},"name":{"minLength":1,"type":"string"}},"required":["id","kind","name","location","attributes","evidence"],"type":"object"},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"tool_version":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","version","tool_version"],"type":"object"},"reached_depth":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"start":{"minLength":1,"type":"string"},"target_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"type":"boolean"},"unresolved":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"enum":["observed","inferred","resolved","ambiguous"],"type":"string"},"to":{"minLength":1,"type":"string"}},"required":["id","from","to","relation","resolution","evidence","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"reason":{"minLength":1,"type":"string"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"const":"unresolved","type":"string"},"to":{"type":"null"}},"required":["id","from","to","relation","resolution","reason","evidence","limitations"],"type":"object"}]},"type":"array"}},"required":["target_sha256","provider","start","direction","nodes","edges","unresolved","reached_depth","truncated","reason","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Trace Native Ui Action"},{"analysisOperation":"trace_native_values","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a bounded static dependency graph from one explicit native procedure. Includes high-p-code def-use, constants, operators, memory and branch operations, resolved call edges, and derived argument/parameter and return/output bindings. Missing bindings, alias semantics, persistent state and RNG roles remain unknown. Budgets bound depth, decompilations, graph size and payloads; nodes are 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":[{"limit":1000,"max_call_sites":256,"max_depth":3,"max_edges":10000,"max_functions":16,"max_nodes":5000,"offset":0,"procedure":"0x1000"}],"properties":{"limit":{"default":1000,"description":"Value for limit.","maximum":5000,"minimum":1,"type":"integer"},"max_call_sites":{"default":256,"description":"Maximum permitted call sites for this operation.","maximum":4096,"minimum":1,"type":"integer"},"max_depth":{"default":3,"description":"Maximum permitted depth for this operation.","maximum":16,"minimum":0,"type":"integer"},"max_edges":{"default":10000,"description":"Maximum permitted edges for this operation.","maximum":40000,"minimum":1,"type":"integer"},"max_functions":{"default":16,"description":"Maximum permitted functions for this operation.","maximum":64,"minimum":1,"type":"integer"},"max_nodes":{"default":5000,"description":"Maximum permitted nodes for this operation.","maximum":20000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Value for offset.","maximum":9007199254740991,"minimum":0,"type":"integer"},"procedure":{"description":"Value for procedure.","minLength":1,"type":"string"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"trace_native_values","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"decompilations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"edges":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"type":"string"},"input_index":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"kind":{"enum":["def-use","call","parameter-use","argument-binding","return-binding"],"type":"string"},"source":{"type":"string"},"status":{"enum":["derived","direct","resolved-indirect","candidate"],"type":"string"},"target":{"type":"string"}},"required":["source","target","input_index","kind","status","evidence_id"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"nodes":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"type":"string"},"id":{"type":"string"},"kind":{"enum":["operation","parameter"],"type":"string"},"operation":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"block_membership":{"default":"unavailable","enum":["member","detached","unavailable"],"type":"string"},"id":{"minLength":1,"type":"string"},"inputs":{"items":{"additionalProperties":false,"properties":{"constant_hex":{"anyOf":[{"pattern":"^[0-9a-f]+$","type":"string"},{"type":"null"}]},"kind":{"enum":["constant","address","register","unique","other"],"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","size_bytes","location","constant_hex"],"type":"object"},"type":"array"},"is_dead":{"type":"boolean"},"opcode":{"minLength":1,"type":"string"},"output":{"anyOf":[{"additionalProperties":false,"properties":{"constant_hex":{"anyOf":[{"pattern":"^[0-9a-f]+$","type":"string"},{"type":"null"}]},"kind":{"enum":["constant","address","register","unique","other"],"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","size_bytes","location","constant_hex"],"type":"object"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["id","address","sequence","opcode","is_dead","block_membership","inputs","output"],"type":"object"},{"type":"null"}]},"parameter":{"anyOf":[{"additionalProperties":false,"properties":{"data_type":{"type":"string"},"name":{"type":"string"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["ordinal","name","data_type"],"type":"object"},{"type":"null"}]},"procedure":{"type":"string"}},"required":["id","procedure","evidence_id","kind","operation","parameter"],"type":"object"},"type":"array"},"procedures":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"analysis_profile_digest":{"anyOf":[{"type":"string"},{"type":"null"}]},"depth":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"type":"string"},"provider":{"type":"string"}},"required":["address","depth","evidence_id","provider","analysis_profile_digest"],"type":"object"},"type":"array"},"seed":{"type":"string"},"target_sha256":{"type":"string"},"total_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"},"unknowns":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"procedure":{"type":"string"},"reason":{"type":"string"}},"required":["procedure","address","reason"],"type":"object"},"type":"array"}},"required":["seed","target_sha256","nodes","edges","procedures","unknowns","total_nodes","total_edges","decompilations","next_offset","truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Trace Native Values"},{"analysisOperation":"observe_native_ui","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Observe an already-running native app by PID and window ID, bound to the active Mach-O target. Captures a bounded accessibility tree and selected-window screenshot; OS permission denial fails without broad capture or target launch.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pid":123,"window_id":456}],"properties":{"accessibility":{"default":true,"description":"Value for accessibility.","type":"boolean"},"max_nodes":{"default":500,"description":"Maximum accessibility nodes per capture; increase for large windows.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"pid":{"description":"Value for pid.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"screenshot":{"default":true,"description":"Value for screenshot.","type":"boolean"},"window_id":{"description":"Value for window id.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id"],"type":"object"},"kind":"native-provider","name":"observe_native_ui","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"initial":{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"restore":{"const":"leave-as-is","type":"string"},"steps":{"items":{"additionalProperties":false,"properties":{"after":{"anyOf":[{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},{"type":"null"}]},"before":{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"type":"string"},"outcome":{"enum":["completed","failed","cancelled"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["index","kind","before","after","outcome","reason"],"type":"object"},"type":"array"},"target_sha256":{"type":"string"}},"required":["target_sha256","initial","steps","restore","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Observe Native Ui"},{"analysisOperation":"capture_native_ui_scenario","annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run selected-element press, increment/decrement scroll, AXValue text entry and bounded wait steps in one exact native app window. Returns ordered before/after captures and action/capture failures. Actions can change app data, network activity and persistent state; application state is left as-is and restoration is not attempted.","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":[{"pid":123,"steps":[{"kind":"wait","milliseconds":100}],"window_id":456}],"properties":{"accessibility":{"default":true,"description":"Value for accessibility.","type":"boolean"},"max_nodes":{"default":500,"description":"Maximum accessibility nodes per capture; increase for large windows.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"pid":{"description":"Value for pid.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"screenshot":{"default":true,"description":"Value for screenshot.","type":"boolean"},"steps":{"description":"Value for steps.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"click","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":32,"type":"array"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["increment","decrement"],"type":"string"},"kind":{"const":"scroll","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":32,"type":"array"}},"required":["kind","path","direction"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"key-entry","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":32,"type":"array"},"text":{"description":"Value for text.","type":"string"}},"required":["kind","path","text"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"wait","description":"Value for kind.","type":"string"},"milliseconds":{"description":"Wait duration in milliseconds, within the 180-second operation deadline.","maximum":180000,"minimum":0,"type":"integer"}},"required":["kind","milliseconds"],"type":"object"}]},"minItems":1,"type":"array"},"window_id":{"description":"Value for window id.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","steps"],"type":"object"},"kind":"native-provider","name":"capture_native_ui_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"initial":{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"restore":{"const":"leave-as-is","type":"string"},"steps":{"items":{"additionalProperties":false,"properties":{"after":{"anyOf":[{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},{"type":"null"}]},"before":{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"type":"string"},"outcome":{"enum":["completed","failed","cancelled"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["index","kind","before","after","outcome","reason"],"type":"object"},"type":"array"},"target_sha256":{"type":"string"}},"required":["target_sha256","initial","steps","restore","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Capture Native Ui Scenario"},{"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":{"$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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"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"],"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 exact 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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"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"],"type":"object"},"requiresSession":false,"title":"Inspect Signature"},{"analysisOperation":"inspect_plist","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Parse Info.plist from the active artifact by default, or pass any local plist path. Returns 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":[{"path":"/Applications/Example.app/Contents/Info.plist"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"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"],"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 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":{"$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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"type":"object"},"type":"array"}},"required":["architectures","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Architectures"},{"analysisOperation":"demangle_swift","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Demangle an ordered list 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 Swift symbols to demangle.","items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["symbols"],"type":"object"},"kind":"native-provider","name":"demangle_swift","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"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"],"type":"object"},"requiresSession":false,"title":"Demangle Swift"},{"analysisOperation":"inspect_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect an active archive or application package in one call. Returns the complete content-addressed artifact graph, source Evidence, observations, relationships, integrity contradictions, hypotheses, unexplored branches, limitations, and next probes inline. Read-only DMG mounting is used automatically on supported macOS hosts. Integrity mismatches fail by default; record-and-continue keeps mismatches explicitly untrusted. It does not extract files; use extract_artifact to materialize its regular contents.","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_policy":{"default":"fail","description":"Value for integrity policy.","enum":["fail","record-and-continue"],"type":"string"}},"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"minLength":1,"type":"string"}},"required":["contradiction_id","statement","occurrence_id","declared_sha256","observed_sha256","evidence_id"],"type":"object"},"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":[{"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"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"hypotheses":{"items":{"additionalProperties":false,"properties":{"basis_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"confidence":{"enum":["medium","low"],"type":"string"},"hypothesis_id":{"pattern":"^aih_[a-f0-9]{64}$","type":"string"},"limitation":{"minLength":1,"type":"string"},"statement":{"minLength":1,"type":"string"}},"required":["hypothesis_id","statement","confidence","basis_evidence_ids","limitation"],"type":"object"},"type":"array"},"inspection_id":{"pattern":"^ai_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"next_probes":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},"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":{"minLength":1,"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["observation_id","kind","subject","value","evidence_id"],"type":"object"},"type":"array"},"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":{"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"}},"required":["provider","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"}]},"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","dos-mz","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":["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"},"minItems":1,"type":"array"},"unexplored_branches":{"items":{"additionalProperties":false,"properties":{"branch_id":{"pattern":"^aib_[a-f0-9]{64}$","type":"string"},"detail":{"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":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},{"type":"null"}]},"reason":{"enum":["format-specific-analysis-required","unknown-format"],"type":"string"}},"required":["branch_id","reason","detail","next_probe","evidence_id"],"type":"object"},"type":"array"}},"required":["inspection_id","subject","substeps","observations","derived_relationships","hypotheses","contradictions","unexplored_branches","next_probes","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Artifact"},{"analysisOperation":"extract_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Extract all regular files from the active archive or application package into a fresh temporary directory chosen by REA. The result includes its location. Rejects traversal and symlink escapes, never overwrites, enforces archive integrity checks, 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":[{}],"properties":{},"type":"object"},"kind":"artifact-provider","name":"extract_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifacts":{"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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["artifact_id","relative_path","sha256","bytes_written","created"],"type":"object"},"type":"array"},"cleanup":{"additionalProperties":false,"properties":{"attempted":{"type":"boolean"},"residual_paths":{"items":{"minLength":1,"type":"string"},"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"},"selected_occurrence_ids":{"items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"source_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"}},"required":["extraction_id","source_manifest_id","selected_occurrence_ids","files_sha256","output_root_alias"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"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","dos-mz","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["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":{"type":"string"},"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"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":"array"}},"required":["manifest","extraction_manifest","output_root","artifacts","containment_verified","cleanup","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Extract Artifact"},{"analysisOperation":"decode_interface_builder","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decode compiled storyboard and nib archives inside the active Apple app bundle, including keyed property lists and NIBArchive object tables, into a bounded object, hierarchy, and connection graph. This is static archive parsing; unrecognized archive classes and unresolved code handlers remain explicit unknowns.","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":{"max_connections":{"default":40000,"description":"Maximum permitted connections for this operation.","maximum":40000,"minimum":1,"type":"integer"},"max_documents":{"default":64,"description":"Maximum permitted documents for this operation.","maximum":64,"minimum":1,"type":"integer"},"max_objects":{"default":20000,"description":"Maximum permitted objects for this operation.","maximum":20000,"minimum":1,"type":"integer"}},"type":"object"},"kind":"artifact-provider","name":"decode_interface_builder","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"documents":{"items":{"additionalProperties":false,"properties":{"archive_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"connection_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"document_kind":{"enum":["nib","storyboard_scene"],"type":"string"},"hierarchy_complete":{"type":"boolean"},"object_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relative_path":{"minLength":1,"type":"string"}},"required":["relative_path","archive_sha256","document_kind","object_count","connection_count","hierarchy_complete"],"type":"object"},"maxItems":64,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"items":{"additionalProperties":false,"properties":{"examined":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"facet":{"minLength":1,"type":"string"},"omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["complete","partial","unsupported","not_requested"],"type":"string"}},"required":["facet","status","reason","examined","omitted"],"type":"object"},"type":"array"},"edges":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"enum":["observed","inferred","resolved","ambiguous"],"type":"string"},"to":{"minLength":1,"type":"string"}},"required":["id","from","to","relation","resolution","evidence","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"reason":{"minLength":1,"type":"string"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"const":"unresolved","type":"string"},"to":{"type":"null"}},"required":["id","from","to","relation","resolution","reason","evidence","limitations"],"type":"object"}]},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"attributes":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"id":{"minLength":1,"type":"string"},"kind":{"enum":["storyboard","scene","view_controller","view","control","constraint","layout_guide","resource","placeholder","external_object","outlet","action","segue","objc_class","objc_selector","swift_declaration","swift_requirement","dispatch_table","dispatch_slot","thunk","function","state_value","global_value","field","branch_condition","sink","unknown"],"type":"string"},"location":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},{"type":"null"}]},"name":{"minLength":1,"type":"string"}},"required":["id","kind","name","location","attributes","evidence"],"type":"object"},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"tool_version":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","version","tool_version"],"type":"object"},"target_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"type":"boolean"}},"required":["target_sha256","provider","nodes","edges","coverage","truncated"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"target_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["target_sha256","documents","graph","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Decode Interface Builder"},{"analysisOperation":"inspect_keyed_archive","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one Foundation NSKeyedArchiver plist in the active app bundle as original object-table nodes, class descriptors, named roots, and UID edges. Preserves shared and cyclic references without instantiating classes. The path is relative to the bundle; root selection and object pagination preserve original identities.","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":"Contents/Resources/Model.plist"}],"properties":{"limit":{"default":20000,"description":"Value for limit.","maximum":20000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Value for offset.","maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"default":".","description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"root":{"description":"Value for root.","type":"string"}},"type":"object"},"kind":"artifact-provider","name":"inspect_keyed_archive","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"archive_format":{"enum":["binary-plist","xml-plist"],"type":"string"},"archive_path":{"type":"string"},"archive_sha256":{"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"objects":{"items":{"additionalProperties":false,"properties":{"class_id":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"class_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["nil","scalar","array","dictionary","class-descriptor","archived-object"],"type":"string"},"status":{"enum":["observed","unknown-class","unresolved-class","nil"],"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["id","kind","class_id","class_name","status","value"],"type":"object"},"type":"array"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"references":{"items":{"additionalProperties":false,"properties":{"path":{"items":{"anyOf":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"type":"array"},"raw":{"$ref":"#/$defs/__schema0"},"source":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["resolved","nil","unresolved","malformed"],"type":"string"},"target":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["source","path","target","status","raw"],"type":"object"},"type":"array"},"roots":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"target_sha256":{"type":"string"},"total_objects":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["target_sha256","archive_path","archive_sha256","archive_format","roots","objects","references","total_objects","total_references","offset","next_offset","truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Keyed Archive"},{"analysisOperation":"inspect_asset_catalog","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect compiled Assets.car metadata in an active Apple app bundle. Returns stable paginated catalog and rendition records with raw assetutil metadata and catalog digests; rendition bytes are not extracted.","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":[{"limit":1000,"offset":0}],"properties":{"limit":{"default":1000,"description":"Value for limit.","maximum":10000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Value for offset.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"artifact-provider","name":"inspect_asset_catalog","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"catalogs":{"items":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"record_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","record_count"],"type":"object"},"type":"array"},"limit":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records":{"items":{"additionalProperties":false,"properties":{"asset_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"catalog_path":{"minLength":1,"type":"string"},"catalog_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["catalog","rendition"],"type":"string"},"metadata":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"rendition_name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["catalog_path","catalog_sha256","index","kind","asset_name","rendition_name","metadata"],"type":"object"},"type":"array"},"resource_key_matches":{"items":{"additionalProperties":false,"properties":{"field":{"minLength":1,"type":"string"},"key":{"minLength":1,"type":"string"},"renditions":{"items":{"additionalProperties":false,"properties":{"catalog_path":{"minLength":1,"type":"string"},"catalog_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"record_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rendition_name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["catalog_path","catalog_sha256","record_index","rendition_name"],"type":"object"},"type":"array"},"source_archive_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_node_id":{"minLength":1,"type":"string"},"source_path":{"minLength":1,"type":"string"},"status":{"enum":["matched","ambiguous","unmatched"],"type":"string"}},"required":["source_node_id","source_path","source_archive_sha256","field","key","status","renditions"],"type":"object"},"type":"array"},"target_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"total_records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["target_sha256","catalogs","total_records","offset","limit","records","resource_key_matches","next_offset","truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Asset Catalog"},{"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 complete inline inventories when metadata is admitted and explicit partial or malformed coverage otherwise.","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":{"path":{"description":"Managed PE/CLI path to open before inspection; omit only when a managed target is already active","minLength":1,"type":"string"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"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"},"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"],"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":65535,"minimum":1,"type":"integer"}},"required":["machine","machine_hex","architecture","optional_header","section_count","characteristics","cli"],"type":"object"},"references":{"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"},"resources":{"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"},"target_frameworks":{"items":{"type":"string"},"type":"array"}},"required":["artifact","pe","classification","metadata","module","assembly","target_frameworks","references","resources","attributes","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Artifact"},{"analysisOperation":"inspect_managed_members","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect PE/CLI metadata members, signatures, raw CIL hashes, 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 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":[{}],"properties":{},"type":"object"},"kind":"managed-provider","name":"inspect_managed_members","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"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"},"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"],"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":{"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"},"fields":{"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"},"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":{"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"},"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":{"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"],"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"},"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"}]},"types":{"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"}},"required":["artifact","module","metadata","identity_scope","types","fields","methods","member_refs","call_edges","field_accesses","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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":[{}],"properties":{},"type":"object"},"kind":"managed-provider","name":"inspect_managed_native_boundaries","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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":{"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"},"native_implementations":{"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"},"pinvoke_imports":{"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"},"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":["artifact","module","metadata","identity_scope","cli_native","module_refs","pinvoke_imports","native_implementations","summary","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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/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 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":{"$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":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_b3525a33f9aecdcfeac8372301c13cb9153b189d93ef337eee0fef9425171ce3","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/00000000.dll","sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","requires_mvid":"00112233-4455-6677-8899-aabbccddeeff","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"00112233-4455-6677-8899-aabbccddeeff","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null},"right":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_8f79f99bceb5bf3d5e5af7fd678ac07b67427756eca0784cd56ffa6b9c4dbda4","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/11111111.dll","sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","requires_mvid":"ffeeddcc-bbaa-4988-9766-554433221100","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"ffeeddcc-bbaa-4988-9766-554433221100","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["left","right"],"type":"object"},"kind":"application","name":"compare_managed_members","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"}},"required":["name","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"},"right_status":{"enum":["complete","partial","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial"],"type":"string"}},"required":["status","left_status","right_status"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"fields":{"items":{"anyOf":[{"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":{"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"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"enum":["exact","high"],"type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"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"},"status":{"enum":["unchanged","changed"],"type":"string"}},"required":["evidence_links","limitations","item_id","status","left","right","match"],"type":"object"},{"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":{"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"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"type":"null"},"status":{"enum":["removed","unknown"],"type":"string"}},"required":["evidence_links","limitations","item_id","status","left","right","match"],"type":"object"},{"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":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"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"},"status":{"enum":["added","unknown"],"type":"string"}},"required":["evidence_links","limitations","item_id","status","left","right","match"],"type":"object"},{"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":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"minItems":1,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"minItems":1,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"ambiguous","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"type":"null"},"status":{"const":"unknown","type":"string"}},"required":["evidence_links","limitations","item_id","status","left","right","match"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"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":{"anyOf":[{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"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":{"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"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"enum":["exact","high"],"type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"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"},"status":{"enum":["unchanged","changed"],"type":"string"}},"required":["evidence_links","limitations","item_id","dimensions","status","left","right","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"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":{"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"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"type":"null"},"status":{"enum":["removed","unknown"],"type":"string"}},"required":["evidence_links","limitations","item_id","dimensions","status","left","right","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"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":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"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"},"status":{"enum":["added","unknown"],"type":"string"}},"required":["evidence_links","limitations","item_id","dimensions","status","left","right","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"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":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"minItems":1,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"minItems":1,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"ambiguous","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"type":"null"},"status":{"const":"unknown","type":"string"}},"required":["evidence_links","limitations","item_id","dimensions","status","left","right","match"],"type":"object"}]},"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"},"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":["comparison_id","algorithm","left","right","summary","matching","methods","fields","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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":{"$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":[{"managed_boundaries":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_0b4af8f787323ba7fb52a35b1c21115b2c53d55d61ff9de4a16b006b818a2ba2","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":8192,"format":"pe","path":"/examples/ManagedInterop.exe","sha256":"6666666666666666666666666666666666666666666666666666666666666666"},"cli_native":{"il_only":true,"managed_native_header_rva":0,"managed_native_header_size":0,"native_entry_point":false,"ready_to_run_signature":false,"requires_32bit":false,"strong_name_signed":false},"coverage":{"issues":[],"state":"complete"},"identity_scope":{"requires_artifact_sha256":"6666666666666666666666666666666666666666666666666666666666666666","requires_mvid":"00112233-4455-4677-8899-aabbccddeeff","token_identity":"build-local"},"limitations":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"00112233-4455-4677-8899-aabbccddeeff","name":"ManagedInterop.exe","row_offset":0,"token":"0x00000001"},"module_refs":[{"name":"nativehelper.dll","row_offset":256,"token":"0x1a000001"}],"native_implementations":[],"pinvoke_imports":[{"best_fit":"assembly-default","call_convention":"cdecl","char_set":"not-specified","import_name":"open_native","import_scope_name":"nativehelper.dll","import_scope_token":"0x1a000001","mapping_flags":0,"mapping_flags_hex":"0x0000","member_kind":"method","member_name":"OpenNative","member_token":"0x06000001","no_mangle":true,"row_offset":288,"supports_last_error":false,"throw_on_unmappable_char":"assembly-default","token":"0x1c000001","verification":"managed-declaration-only"}],"summary":{"mixed_mode_or_native_header":false,"module_ref_count":1,"native_implementation_count":0,"pinvoke_import_count":1,"ready_to_run":false}},"operation":"inspect_managed_native_boundaries","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null},"native_observations":[{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_9ec8ff855a81995540b10a08acf864e2003b588f92dd88cd2b796e3ad288fdc9","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"architectures":{"exhaustive":true,"items":[],"limitations":[],"total":0},"build_metadata":{"exhaustive":true,"items":[],"limitations":[],"total":0},"dependencies":{"exhaustive":true,"items":[],"limitations":[],"total":0},"endian":"little","entrypoints":{"exhaustive":true,"items":[],"limitations":[],"total":0},"exports":{"exhaustive":true,"items":[{"address":"0x1000","name":"open_native","reexport":false,"source":"nm","weak":false}],"limitations":[],"total":1},"file_type":"dylib","flags":[],"format":"mach-o","imports":{"exhaustive":true,"items":[],"limitations":[],"total":0},"limitations":[],"load_commands":{"exhaustive":true,"items":[],"limitations":[],"total":0},"provenance":[],"segments":{"exhaustive":true,"items":[],"limitations":[],"total":0},"uuid":null,"word_size":64},"operation":"inspect_macho","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"native-macos","name":"REA native macOS provider","version":"1"},"raw_result":null,"subject":{"architecture":"x86_64","digest":{"sha256":"7777777777777777777777777777777777777777777777777777777777777777"},"format":"mach-o","local_path":"/examples/nativehelper.dll","name":"nativehelper.dll"}}]}],"properties":{"managed_boundaries":{"additionalProperties":false,"description":"Value for managed boundaries.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"native_observations":{"description":"Native function or export Evidence records","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"minItems":1,"type":"array"}},"required":["managed_boundaries","native_observations"],"type":"object"},"kind":"application","name":"verify_managed_native_boundaries","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"}},"required":["name","token_identity","token_to_address_mapping"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"status":{"enum":["complete-within-inputs","partial"],"type":"string"}},"required":["status"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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"},"unsupported":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","accepted","unsupported","symbols"],"type":"object"},"pinvoke_imports":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"basis":{"enum":["exact-export-name","exact-function-name"],"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"},"prefixItems":[{"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":"array"},"confidence":{"const":"observed","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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"},"status":{"const":"verified","type":"string"}},"required":["item_id","managed","evidence_links","limitations","status","basis","confidence","matched_native","candidates"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"const":"decorated-name-candidate","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"},"prefixItems":[{"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":"array"},"confidence":{"const":"inferred","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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"},"status":{"const":"inferred","type":"string"}},"required":["item_id","managed","evidence_links","limitations","status","basis","confidence","matched_native","candidates"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"enum":["no-native-candidate","unsupported-native-evidence"],"type":"string"},"candidates":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"type":"null"},"status":{"const":"unresolved","type":"string"}},"required":["item_id","managed","evidence_links","limitations","status","basis","confidence","matched_native","candidates"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"const":"module-mismatch","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"},"prefixItems":[{"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":"array"},"confidence":{"const":"unknown","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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"},"status":{"const":"contradicted","type":"string"}},"required":["item_id","managed","evidence_links","limitations","status","basis","confidence","matched_native","candidates"],"type":"object"}]},"type":"array"},"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":["verification_id","algorithm","managed_boundary","native_observations","summary","pinvoke_imports","native_implementations","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 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":{"$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":[{"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":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_cf07661a99083e446ac5f18af3ca331cb1af7c3cd6cb7c9dc8bff880a1ed8bb9","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/22222222.dll","sha256":"2222222222222222222222222222222222222222222222222222222222222222"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"2222222222222222222222222222222222222222222222222222222222222222","requires_mvid":"11112222-3333-4444-9555-666677778888","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[{"body":{"anchors":[],"decoded_instruction_count":1,"exception_regions":[],"file_offset":512,"header_format":"tiny","il_sha256":"4444444444444444444444444444444444444444444444444444444444444444","il_size":1,"init_locals":false,"instruction_count":1,"issue":null,"local_var_sig_token":null,"max_stack":8,"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","opcode_counts":{"ret":1},"rva":8192,"status":"present","truncated_instructions":0},"declaring_type":"Example.Program","declaring_type_token":"0x02000001","flags":22,"impl_flags":0,"name":"Main","row_offset":128,"rva":8192,"signature":{"calling_convention":"default","field_type":null,"generic_parameter_count":0,"issue":null,"kind":"method","parameter_count":0,"parameter_types":[],"parse_status":"decoded","raw_length":3,"raw_sha256":"3333333333333333333333333333333333333333333333333333333333333333","return_type":"void"},"token":"0x06000001"}],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"11112222-3333-4444-9555-666677778888","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null}}],"properties":{"decompiler":{"additionalProperties":false,"description":"Value for decompiler.","properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":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.","minLength":1,"type":"string"},"options":{"default":[],"description":"Value for options.","items":{"type":"string"},"type":"array"},"version":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Value for version."}},"required":["name","family"],"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":[{"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.","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"},"minItems":1,"type":"array"},"notes":{"default":[],"description":"Value for notes.","items":{"minLength":1,"type":"string"},"type":"array"},"static_members":{"additionalProperties":false,"description":"Value for static members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["static_members","decompiler","methods"],"type":"object"},"kind":"application","name":"import_managed_reconstruction","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"}],"default":null},"family":{"enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"minLength":1,"type":"string"},"options":{"default":[],"items":{"type":"string"},"type":"array"},"options_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":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":{"minLength":1,"type":"string"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"text":{"minLength":1,"type":"string"},"text_length":{"maximum":9007199254740991,"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"},"minItems":1,"type":"array"},"notes":{"items":{"minLength":1,"type":"string"},"type":"array"},"phase":{"const":"reconstruction-import","type":"string"},"reconstruction_id":{"pattern":"^mre_[a-f0-9]{64}$","type":"string"},"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":9007199254740991,"minimum":0,"type":"integer"},"decompiled_il_methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"imported_methods":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pseudocode_methods":{"maximum":9007199254740991,"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":["reconstruction_id","phase","executed","static_observation","decompiler","summary","methods","notes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Import Managed Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Prepare a non-executing managed runtime-correlation plan from authenticated inspect_managed_members Evidence. Planning does not probe or launch a runtime; it records the configured executable or the default command name, locks the exact artifact SHA-256, MVID, method signature, and decoded-IL hash, and describes requested effects and bounds without claiming execution or confinement.","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":[{"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":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_cf07661a99083e446ac5f18af3ca331cb1af7c3cd6cb7c9dc8bff880a1ed8bb9","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/22222222.dll","sha256":"2222222222222222222222222222222222222222222222222222222222222222"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"2222222222222222222222222222222222222222222222222222222222222222","requires_mvid":"11112222-3333-4444-9555-666677778888","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[{"body":{"anchors":[],"decoded_instruction_count":1,"exception_regions":[],"file_offset":512,"header_format":"tiny","il_sha256":"4444444444444444444444444444444444444444444444444444444444444444","il_size":1,"init_locals":false,"instruction_count":1,"issue":null,"local_var_sig_token":null,"max_stack":8,"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","opcode_counts":{"ret":1},"rva":8192,"status":"present","truncated_instructions":0},"declaring_type":"Example.Program","declaring_type_token":"0x02000001","flags":22,"impl_flags":0,"name":"Main","row_offset":128,"rva":8192,"signature":{"calling_convention":"default","field_type":null,"generic_parameter_count":0,"issue":null,"kind":"method","parameter_count":0,"parameter_types":[],"parse_status":"decoded","raw_length":3,"raw_sha256":"3333333333333333333333333333333333333333333333333333333333333333","return_type":"void"},"token":"0x06000001"}],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"11112222-3333-4444-9555-666677778888","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null}}],"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":{"default":false,"description":"Value for allow network.","type":"boolean"},"allow_ui":{"default":false,"description":"Value for allow ui.","type":"boolean"},"max_output_bytes":{"default":65536,"description":"Maximum permitted output bytes for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"max_threads":{"default":32,"description":"Maximum permitted threads for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"description":"Value for timeout ms.","maximum":9007199254740991,"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":{"additionalProperties":false,"description":"Value for static members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["static_members","method","requested_effect","host"],"type":"object"},"kind":"application","name":"plan_managed_runtime_correlation","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"bounds":{"additionalProperties":false,"properties":{"allow_network":{"default":false,"type":"boolean"},"allow_ui":{"default":false,"type":"boolean"},"max_output_bytes":{"default":65536,"maximum":9007199254740991,"minimum":0,"type":"integer"},"max_threads":{"default":32,"maximum":9007199254740991,"minimum":1,"type":"integer"},"timeout_ms":{"default":5000,"maximum":9007199254740991,"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":{"minLength":1,"type":"string"},"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":"correlation-plan","type":"string"},"requested_runtime":{"additionalProperties":false,"properties":{"confinement":{"const":"not-established","type":"string"},"effect":{"enum":["attach","load","debugger","reflection","instrumentation"],"type":"string"},"executable_path":{"minLength":1,"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":{"enum":["none","host"],"type":"string"}},"required":["effect","host","executable_path","network","confinement"],"type":"object"},"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":["correlation_id","phase","executed","static_observation","method_lock","requested_runtime","effect_taxonomy","bounds","unsupported_until_executor_exists","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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":{"$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":{"managed_artifact":{"additionalProperties":false,"description":"Value for managed artifact.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_members":{"additionalProperties":false,"description":"Value for managed members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_native_boundaries":{"additionalProperties":false,"description":"Value for managed native boundaries.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["managed_artifact"],"type":"object"},{"additionalProperties":false,"properties":{"managed_artifact":{"additionalProperties":false,"description":"Value for managed artifact.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_members":{"additionalProperties":false,"description":"Value for managed members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_native_boundaries":{"additionalProperties":false,"description":"Value for managed native boundaries.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["managed_members"],"type":"object"},{"additionalProperties":false,"properties":{"managed_artifact":{"additionalProperties":false,"description":"Value for managed artifact.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_members":{"additionalProperties":false,"description":"Value for managed members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_native_boundaries":{"additionalProperties":false,"description":"Value for managed native boundaries.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["managed_native_boundaries"],"type":"object"}],"examples":[{"managed_members":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_cf07661a99083e446ac5f18af3ca331cb1af7c3cd6cb7c9dc8bff880a1ed8bb9","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/22222222.dll","sha256":"2222222222222222222222222222222222222222222222222222222222222222"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"2222222222222222222222222222222222222222222222222222222222222222","requires_mvid":"11112222-3333-4444-9555-666677778888","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[{"body":{"anchors":[],"decoded_instruction_count":1,"exception_regions":[],"file_offset":512,"header_format":"tiny","il_sha256":"4444444444444444444444444444444444444444444444444444444444444444","il_size":1,"init_locals":false,"instruction_count":1,"issue":null,"local_var_sig_token":null,"max_stack":8,"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","opcode_counts":{"ret":1},"rva":8192,"status":"present","truncated_instructions":0},"declaring_type":"Example.Program","declaring_type_token":"0x02000001","flags":22,"impl_flags":0,"name":"Main","row_offset":128,"rva":8192,"signature":{"calling_convention":"default","field_type":null,"generic_parameter_count":0,"issue":null,"kind":"method","parameter_count":0,"parameter_types":[],"parse_status":"decoded","raw_length":3,"raw_sha256":"3333333333333333333333333333333333333333333333333333333333333333","return_type":"void"},"token":"0x06000001"}],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"11112222-3333-4444-9555-666677778888","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null}}],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"status":{"enum":["complete-within-inputs","partial"],"type":"string"}},"required":["status"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3,"minItems":1,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"projection_id":{"pattern":"^magp_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"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":["projection_id","root_artifact_sha256","source_evidence","summary","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Project Managed Application Graph"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List page targets exposed by the selected loopback Chrome DevTools Protocol endpoint. Optionally filter by exact origin. URLs preserve query values and fragments; only URL userinfo credentials are removed.","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":[{"cdp_endpoint":"http://127.0.0.1:9222"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"}},"required":["cdp_endpoint"],"type":"object"},"kind":"browser-provider","name":"list_browser_targets","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"targets":{"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"}},"required":["browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Browser Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one selected page target through CDP without evaluating JavaScript, navigating, clicking, closing, or mutating the page. If no origin filter is supplied, capture is scoped to the target\'s current origin. Returns DOM structure, accessibility, scripts, resources, attach-window network and console metadata, workers, and redacted storage inventory as 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","anyOf":[{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"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"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"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"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"}],"examples":[{"cdp_endpoint":"http://127.0.0.1:9222","target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"type":"object"},"kind":"browser-provider","name":"inspect_web_page","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","unavailable"],"type":"string"}},"required":["status","retained_bytes","excluded_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"],"type":"string"},"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"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}]},"status":{"enum":["not_approved","included","partial","unavailable"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}]}},"required":["format","json_shape"],"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"},"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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"}},"required":["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":["browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Web Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Capture JavaScript source from one selected CDP page and statically derive a chunk graph, route and endpoint candidates, vendor fingerprints, page-declared WebMCP metadata, and optionally fetch source maps from the selected target origin or explicitly requested origins. 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,"examples":[{"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,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"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"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},"kind":"browser-provider","name":"analyze_web_bundle","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text_available":{"const":true,"type":"boolean"}},"required":["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":{"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial"],"type":"string"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","parsed_scripts","parse_failures","visited_ast_nodes"],"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":{"items":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"}},"required":["sha256","bytes","media_type","charset","text"],"type":"object"},"declared_url":{"type":"string"},"limitation":{"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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"}},"required":["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":{"const":"included","type":"string"}},"required":["script_key","declared_url","artifact","original_sources","original_module_edges","mappings","status","limitation"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"type":"null"},"declared_url":{"type":"string"},"limitation":{"type":"string"},"mappings":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"original_module_edges":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"original_sources":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"script_key":{"type":"string"},"status":{"enum":["fetch_failed","invalid","policy_filtered"],"type":"string"}},"required":["script_key","declared_url","artifact","original_sources","original_module_edges","mappings","status","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"],"type":"string"}},"required":["status","requested","processed","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"},"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":["capture","observations","inferences","unknowns","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Analyze Web Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Arm a CDP observation window of the requested duration while the user operates the page. By default it follows the selected target\'s current origin; an explicit origin list controls which origins may be retained. Records navigation, redirect, lifecycle, and failure events.","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":[{"cdp_endpoint":"http://127.0.0.1:9222","observation_ms":10000,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"observation_ms":{"default":10000,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":1,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},"kind":"browser-provider","name":"observe_web_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"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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":["browser","target","window","timeline","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Observe Web Session"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inventory every page-registered WebMCP tool and its complete structural input-schema summary using the experimental CDP WebMCP domain. Metadata is 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":[{"cdp_endpoint":"http://127.0.0.1:9222","observation_ms":100,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},"kind":"browser-provider","name":"discover_webmcp_tools","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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":["browser","target","status","tools","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Discover Webmcp Tools"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Compare passive web captures by providing before and after, or compare recorded scenarios by providing before_scenario and after_scenario with an optional normalization policy. Use exactly one input group. Scenario comparison aligns exact step IDs, records deterministic literal normalization, and returns every artifact-level difference plus alignment failures inline. 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"},"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"},"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}]},"normalization":{"rules":[{"artifacts":["dom","accessibility"],"match":"build-123","replacement":"[BUILD_ID]","rule_id":"volatile-build-id"}]}}],"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":"Byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","unavailable"],"type":"string"}},"required":["status","retained_bytes","excluded_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":"Byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included"],"type":"string"},"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"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable"],"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":"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}],"description":"Value for json shape."}},"required":["format","json_shape"],"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"},"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.","minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"}},"required":["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":"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":"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 CDP target identifier selected from the endpoint\'s target listing.","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 CDP target identifier selected from the endpoint\'s target listing.","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":["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"},"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 CDP target identifier selected from the endpoint\'s target listing.","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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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":["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.","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.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"anyOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","description":"Value for kind.","type":"string"},"level":{"description":"Value for level.","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.","type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"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":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"request","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","type":"null"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","minLength":1,"type":"string"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"request-failed","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","type":"null"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":"Byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","type":"string"},"payload_type":{"const":"text","description":"Value for payload type.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","type":"null"},"payload_type":{"const":"binary","description":"Value for payload type.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"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":[{"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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"minLength":1,"type":"string"},"type":"array"},"start_origin":{"description":"Value for start origin.","minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"steps":{"description":"Value for steps.","items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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"},"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.","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.","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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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.","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.","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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"description":"Structured, caller-actionable error when the operation fails.","type":"null"},"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":{"const":"completed","description":"Current lifecycle or verification status.","type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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"},"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.","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.","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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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.","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.","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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"description":"Structured, caller-actionable error when the operation fails.","type":"string"},"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":["failed","cancelled"],"type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"minItems":1,"type":"array"}},"required":["browser","scenario","duration_ms","steps","events","completeness","limitations"],"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":"Byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","unavailable"],"type":"string"}},"required":["status","retained_bytes","excluded_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":"Byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included"],"type":"string"},"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"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable"],"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":"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}],"description":"Value for json shape."}},"required":["format","json_shape"],"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"},"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.","minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"}},"required":["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":"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":"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 CDP target identifier selected from the endpoint\'s target listing.","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 CDP target identifier selected from the endpoint\'s target listing.","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":["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"},"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 CDP target identifier selected from the endpoint\'s target listing.","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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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":["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.","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.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"anyOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","description":"Value for kind.","type":"string"},"level":{"description":"Value for level.","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.","type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"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":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"request","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","type":"null"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","minLength":1,"type":"string"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"request-failed","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","type":"null"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":"Byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","type":"string"},"payload_type":{"const":"text","description":"Value for payload type.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","type":"null"},"payload_type":{"const":"binary","description":"Value for payload type.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"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":[{"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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"},"secret_references":{"description":"Value for secret references.","items":{"minLength":1,"type":"string"},"type":"array"},"start_origin":{"description":"Value for start origin.","minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"steps":{"description":"Value for steps.","items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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"},"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.","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.","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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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.","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.","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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"description":"Structured, caller-actionable error when the operation fails.","type":"null"},"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":{"const":"completed","description":"Current lifecycle or verification status.","type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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"},"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.","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.","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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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.","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.","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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"description":"Structured, caller-actionable error when the operation fails.","type":"string"},"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":["failed","cancelled"],"type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"minItems":1,"type":"array"}},"required":["browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"normalization":{"additionalProperties":false,"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"},"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"type":"array"}},"type":"object"}},"type":"object"},"kind":"browser-provider","name":"compare_web_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"after_only":{"items":{"minLength":1,"type":"string"},"type":"array"},"aligned_steps":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"before_only":{"items":{"minLength":1,"type":"string"},"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":{"minLength":1,"type":"string"},"step_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["code","step_id","reason"],"type":"object"},"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":{"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total"],"type":"object"},"comparison_kind":{"const":"browser_scenario","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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"},"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"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"},"steps":{"items":{"additionalProperties":false,"properties":{"after_action":{"minLength":1,"type":"string"},"after_step_index":{"maximum":9007199254740991,"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":[{"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"},"type":"array"},"before_action":{"minLength":1,"type":"string"},"before_step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"step_id":{"minLength":1,"type":"string"}},"required":["step_id","before_step_index","after_step_index","before_action","after_action","status","artifact_diffs"],"type":"object"},"type":"array"}},"required":["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":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}],"default":{"changes":[],"reason":"Dimension was not recorded by this version 1 capture diff.","status":"unknown","total_changes":0}},"dom_structure":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"metadata":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"network":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"resources":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"scripts":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"storage":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}],"default":{"changes":[],"reason":"Dimension was not recorded by this version 1 capture diff.","status":"unknown","total_changes":0}},"webmcp":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","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"}},"required":["overall_status","before_target","after_target","dimensions","limitations"],"type":"object"}]}},"required":["result","evidence_id","evidence"],"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 configured page as an inline, content-addressed PNG artifact. The operation 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":[{"cdp_endpoint":"http://127.0.0.1:9222","target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},"kind":"browser-provider","name":"capture_web_screenshot","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["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"},"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":["browser","target","captured_at","viewport","artifact","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 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"},"before":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"channel_threshold":0}],"properties":{"after":{"description":"The later or right-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["sha256","bytes","media_type","data_base64"],"type":"object"},"channel_threshold":{"default":0,"description":"Value for channel threshold.","maximum":255,"minimum":0,"type":"integer"}},"required":["before","after"],"type":"object"},"kind":"browser-provider","name":"compare_web_screenshots","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"oneOf":[{"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":{"const":0,"type":"number"},"changed_ratio":{"const":0,"type":"number"},"channel_threshold":{"maximum":255,"minimum":0,"type":"integer"},"compared_pixels":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"maximum_channel_delta":{"maximum":255,"minimum":0,"type":"integer"},"mean_absolute_channel_delta":{"maximum":255,"minimum":0,"type":"number"},"status":{"const":"identical","type":"string"}},"required":["before","after","channel_threshold","limitations","status","compared_pixels","changed_pixels","changed_ratio","maximum_channel_delta","mean_absolute_channel_delta"],"type":"object"},{"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":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"changed_ratio":{"exclusiveMinimum":0,"maximum":1,"type":"number"},"channel_threshold":{"maximum":255,"minimum":0,"type":"integer"},"compared_pixels":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"maximum_channel_delta":{"exclusiveMinimum":0,"maximum":255,"type":"integer"},"mean_absolute_channel_delta":{"exclusiveMinimum":0,"maximum":255,"type":"number"},"status":{"const":"different","type":"string"}},"required":["before","after","channel_threshold","limitations","status","compared_pixels","changed_pixels","changed_ratio","maximum_channel_delta","mean_absolute_channel_delta"],"type":"object"},{"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":{"type":"null"},"changed_ratio":{"type":"null"},"channel_threshold":{"maximum":255,"minimum":0,"type":"integer"},"compared_pixels":{"const":0,"type":"number"},"limitations":{"items":{"type":"string"},"type":"array"},"maximum_channel_delta":{"type":"null"},"mean_absolute_channel_delta":{"type":"null"},"status":{"const":"dimension_mismatch","type":"string"}},"required":["before","after","channel_threshold","limitations","status","compared_pixels","changed_pixels","changed_ratio","maximum_channel_delta","mean_absolute_channel_delta"],"type":"object"}]}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Compare Web Screenshots"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run a controlled browser scenario when passive observation cannot exercise the application. Launch the selected executable or connect to a loopback CDP target, provide a start URL and actions, and optionally declare additional origins for navigation, storage, or request replay. By default, only the start URL origin is in scope. Environment, empty storage, disabled request replay, redaction, and a URL-only final capture are defaults; provide secrets, initial storage, request replay, or additional artifacts when needed. Actions run until completion or cancellation unless timeout_ms is set. Results are returned inline.","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_timeout","duration_ms":250,"step_id":"settle"}],"browser":{"executable_path":"/opt/chromium/chrome","mode":"launch"},"start_url":{"query":[],"url":"https://app.example.test/"}}],"properties":{"actions":{"description":"Required sequence of explicit browser 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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"url":{"description":"Value for url.","minLength":1,"type":"string"}},"required":["url"],"type":"object"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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.","exclusiveMinimum":0,"maximum":9007199254740991,"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","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.","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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"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._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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":"Wait this many milliseconds; the wait ends early on cancellation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"}},"required":["step_id","action","duration_ms"],"type":"object"}]},"minItems":1,"type":"array"},"allowed_origins":{"description":"Optional exact HTTP(S) origins for later navigation, storage seed, and replay routes. Defaults to the start URL origin.","items":{"minLength":1,"type":"string"},"type":"array"},"browser":{"description":"Required launch/connect selection. Launch uses the selected executable and an owned temporary profile; connect uses one loopback CDP endpoint and target.","oneOf":[{"additionalProperties":false,"properties":{"executable_path":{"description":"Local filesystem path for executable.","minLength":1,"type":"string"},"headless":{"default":true,"description":"Run without a visible browser window; defaults to true and can be disabled when the host supports a display.","type":"boolean"},"mode":{"const":"launch","description":"Operation mode that selects the requested behavior.","type":"string"}},"required":["mode","executable_path"],"type":"object"},{"additionalProperties":false,"properties":{"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"mode":{"const":"connect","description":"Operation mode that selects the requested behavior.","type":"string"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["mode","cdp_endpoint","target_id"],"type":"object"}]},"capture":{"additionalProperties":false,"default":{"after_each_step":[],"at_end":["url"],"events":[]},"description":"Optional retained artifacts and event families. Defaults to only a final sanitized URL; request screenshots, DOM, accessibility, history, storage, and event capture explicitly.","properties":{"after_each_step":{"default":[],"description":"Value for after each step.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"type":"array"},"at_end":{"default":["url"],"description":"Value for at end.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"type":"array"},"events":{"default":[],"description":"Value for events.","items":{"enum":["console","page-errors","network","websockets","frames","workers","popups","downloads"],"type":"string"},"type":"array"}},"type":"object"},"environment":{"additionalProperties":false,"default":{"color_scheme":"light","locale":"en-US","reduced_motion":"reduce","service_workers":"block","timezone":"UTC","viewport":{"device_scale_factor":1,"height":720,"width":1280}},"description":"Optional deterministic browser settings. Defaults to 1280x720, en-US, UTC, light mode, reduced motion, and blocked service workers.","properties":{"color_scheme":{"default":"light","description":"Value for color scheme.","enum":["light","dark","no-preference"],"type":"string"},"locale":{"default":"en-US","description":"Value for locale.","minLength":2,"pattern":"^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$","type":"string"},"reduced_motion":{"default":"reduce","description":"Value for reduced motion.","enum":["reduce","no-preference"],"type":"string"},"service_workers":{"default":"block","description":"Value for service workers.","enum":["allow","block"],"type":"string"},"timezone":{"default":"UTC","description":"Value for timezone.","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(?:\\\\/[A-Za-z0-9_+-]+)*$","type":"string"},"viewport":{"additionalProperties":false,"default":{"device_scale_factor":1,"height":720,"width":1280},"description":"Value for viewport.","properties":{"device_scale_factor":{"default":1,"description":"Value for device scale factor.","exclusiveMinimum":0,"type":"number"},"height":{"default":720,"description":"Value for height.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"width":{"default":1280,"description":"Value for width.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"type":"object"}},"type":"object"},"request_replay":{"description":"Optional exact request replay. Defaults to disabled; replay routes and unmatched-request behavior must be explicitly declared when enabled.","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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"url":{"description":"Value for url.","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":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","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.","minLength":1,"pattern":"^[!#$%&\'*+\\\\-.^_`|~0-9A-Za-z]+$","type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"url":{"description":"Value for url.","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._-]*$","type":"string"}},"required":["route_id","method","request","response"],"type":"object"},"minItems":1,"type":"array"},"unmatched":{"description":"Value for unmatched.","enum":["abort","passthrough-declared-origins"],"type":"string"}},"required":["mode","unmatched","routes"],"type":"object"}]},"secrets":{"default":[],"description":"Optional environment-variable references for values used in actions, URLs, storage, or replay, and for redacting matching observed text. Secret values are never supplied inline.","items":{"additionalProperties":false,"properties":{"environment_variable":{"description":"Value for environment variable.","minLength":1,"type":"string"},"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"}},"required":["secret_id","environment_variable"],"type":"object"},"type":"array"},"start_url":{"additionalProperties":false,"description":"Required initial HTTP(S) URL. Query values must be declared separately as public literals or secret references.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"url":{"description":"Value for url.","minLength":1,"type":"string"}},"required":["url"],"type":"object"},"storage":{"additionalProperties":false,"description":"Optional initial cookies, local storage, or session storage. Defaults to empty; every supplied value and origin must be declared and within the allowed origins.","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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"url":{"description":"Value for url.","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.","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":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","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"},"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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"origin":{"description":"Value for origin.","minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"origin":{"description":"Value for origin.","minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"type":"array"}},"type":"object"}},"required":["browser","start_url","actions"],"type":"object"},"kind":"browser-provider","name":"capture_browser_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"},"status":{"const":"incomplete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"const":"truncated","type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"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":{"anyOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","type":"string"},"level":{"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"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":{"type":"null"},"header_names":{"items":{"type":"string"},"type":"array"},"kind":{"const":"request","type":"string"},"method":{"minLength":1,"type":"string"},"resource_type":{"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"type":"null"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"type":"null"},"header_names":{"items":{"type":"string"},"type":"array"},"kind":{"const":"response","type":"string"},"method":{"minLength":1,"type":"string"},"resource_type":{"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"maximum":599,"minimum":100,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"minLength":1,"type":"string"},"header_names":{"items":{"type":"string"},"type":"array"},"kind":{"const":"request-failed","type":"string"},"method":{"minLength":1,"type":"string"},"resource_type":{"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"type":"null"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"type":"string"},"payload_type":{"const":"text","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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"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":{"type":"null"},"payload_type":{"const":"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"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":[{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"type":"string"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"type":"array"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"scenario":{"additionalProperties":false,"properties":{"action_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"allowed_origins":{"items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"},"secret_references":{"items":{"minLength":1,"type":"string"},"type":"array"},"start_origin":{"minLength":1,"type":"string"}},"required":["start_origin","allowed_origins","action_count","secret_references"],"type":"object"},"steps":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"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":{"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":{"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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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"},"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":{"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":{"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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["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":{"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":{"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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"},"status":{"const":"incomplete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"const":"truncated","type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"}]},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"type":"null"},"event_sequence_end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"const":"completed","type":"string"},"step_id":{"minLength":1,"type":"string"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"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":{"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":{"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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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"},"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":{"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":{"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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["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":{"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":{"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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"},"status":{"const":"incomplete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"const":"truncated","type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"}]},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"type":"string"},"event_sequence_end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"enum":["failed","cancelled"],"type":"string"},"step_id":{"minLength":1,"type":"string"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"minItems":1,"type":"array"}},"required":["browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Capture Browser Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List every Electron file:// page target from a selected loopback CDP endpoint. Local file paths are canonicalized after symlink resolution. Selecting an endpoint exposes every eligible target and its local path metadata.","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":[{"cdp_endpoint":"http://127.0.0.1:9223"}],"properties":{"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"}},"required":["cdp_endpoint"],"type":"object"},"kind":"electron-provider","name":"list_electron_targets","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"targets":{"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"}},"required":["browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Electron Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one Electron file page by supplying its loopback CDP endpoint and target ID. The provider rechecks that the target currently exists at that endpoint and is a local file page. Returns frames, DOM structure, resource paths, and scripts without evaluating renderer JavaScript or invoking Electron APIs. The selected endpoint exposes every local file page and its metadata to this tool.","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":{"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"include_script_sources":{"const":false,"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},{"additionalProperties":false,"properties":{"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"include_script_sources":{"const":true,"description":"Whether to include script sources in the result.","type":"boolean"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id","include_script_sources"],"type":"object"}],"examples":[{"cdp_endpoint":"http://127.0.0.1:9223","target_id":"TARGET_ID_FROM_LIST_ELECTRON_TARGETS"}],"type":"object"},"kind":"electron-provider","name":"inspect_electron_page","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"}},"required":["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":[{"minLength":1,"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_id":{"minLength":1,"type":"string"},"type":{"minLength":1,"type":"string"}},"required":["target_id","type","file_path","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["browser","target","capture_window","completeness","frames","dom","scripts","resources","workers","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Electron Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Reconstruct one local ASAR or extracted JavaScript application as an inline application graph without executing it. Returns all recovered graph nodes, edges, semantic relations, limitations, and 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":[{"format":"auto","input_path":"/Applications/Example.app/Contents/Resources/app.asar"}],"properties":{"format":{"default":"auto","description":"Declared input artifact format.","enum":["auto","asar","directory"],"type":"string"},"input_path":{"description":"Local filesystem path for input.","minLength":1,"type":"string"}},"required":["input_path"],"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"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"input_path":{"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":{"minLength":1,"type":"string"},"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"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"},"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":{"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"},"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","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"},"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":9007199254740991,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"minLength":1,"type":"string"},"type":"array"},"status":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["function_node_id","algorithm","status","components","limitations","evidence","fingerprint_id","fingerprint_sha256"],"type":"object"},"type":"array"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"minLength":1,"type":"string"},"role_key":{"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"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"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptSemanticRelationGraph","type":"string"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"detail":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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"},"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"},"type":"array"}},"required":["schema","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"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"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_bytes_read","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":["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"],"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_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","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":[],"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"},"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":{"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":true,"target_id":"example-target"},"predicate_type":"rea.electron-page-inspection","provider":{"id":"rea-cdp-electron","name":"REA Electron file-page CDP observation provider","version":"1"},"raw_result":null,"subject":null}],"static_layers":[{"analysis":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}}}]}],"properties":{"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"role":{"default":"application","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.","type":"string"},"kind":{"const":"file-root","description":"Value for kind.","type":"string"},"root":{"description":"Value for root.","minLength":1,"type":"string"}},"required":["kind","root"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","type":"string"},"kind":{"const":"url-prefix","description":"Value for kind.","type":"string"},"prefix":{"description":"Value for prefix.","minLength":1,"type":"string"}},"required":["kind","prefix"],"type":"object"}]},"type":"array"}},"required":["analysis"],"type":"object"},"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"reconciliation_id":{"pattern":"^jrr_[a-f0-9]{64}$","type":"string"},"reconciliations":{"items":{"anyOf":[{"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":9007199254740991,"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"},"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-location-unresolved","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":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"const":"matched","type":"string"}},"required":["reconciliation_id","entity_kind","runtime_evidence_id","runtime_node_id","basis","confidence","reason","candidate_static_count","candidate_static_nodes","static_layer_id","static_node_id","status"],"type":"object"},{"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":9007199254740991,"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"},"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-location-unresolved","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":{"type":"null"},"static_node_id":{"type":"null"},"status":{"enum":["ambiguous","unmatched","unknown"],"type":"string"}},"required":["reconciliation_id","entity_kind","runtime_evidence_id","runtime_node_id","basis","confidence","reason","candidate_static_count","candidate_static_nodes","static_layer_id","static_node_id","status"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"target_location":{"anyOf":[{"minLength":1,"type":"string"},{"additionalProperties":false,"properties":{"kind":{"const":"unresolved","type":"string"},"reason":{"const":"unverifiable-file-location","type":"string"},"reported_url":{"minLength":1,"type":"string"}},"required":["kind","reported_url","reason"],"type":"object"}]},"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"},"minItems":1,"type":"array"},"source_map_authority":{"additionalProperties":false,"properties":{"limitation":{"minLength":1,"type":"string"},"runtime_script_declarations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_layer_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"used_for_primary_matching":{"const":false,"type":"boolean"}},"required":["used_for_primary_matching","static_layer_count","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":{"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":"","type":"string"},"kind":{"const":"file-root","type":"string"},"root":{"minLength":1,"type":"string"}},"required":["kind","root","artifact_prefix"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","type":"string"},"kind":{"const":"url-prefix","type":"string"},"prefix":{"minLength":1,"type":"string"}},"required":["kind","prefix","artifact_prefix"],"type":"object"}]},"type":"array"}},"required":["layer_id","role","evidence_id","graph_id","root_artifact_sha256","input_path","format","runtime_mappings"],"type":"object"},"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"},"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"},"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":["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"],"type":"object"},"requiresSession":false,"title":"Reconcile Javascript Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Use this for a provider-owned Electron run when passive CDP or Inspector observation cannot exercise application behavior. REA owns startup and teardown, accepts caller-defined 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","args":[],"executable_path":"/Applications/Electron.app/Contents/MacOS/Electron"}],"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.","minLength":1,"type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_id","kind","selector"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"wait","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"window_index":{"description":"Value for window index.","maximum":9007199254740991,"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.","minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":9007199254740991,"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.","minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":9007199254740991,"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.","minLength":1,"type":"string"},"url":{"description":"Value for url.","minLength":1,"type":"string"}},"required":["step_id","kind","delivery","url"],"type":"object"}]},"type":"array"},"application_path":{"description":"Local filesystem path for application.","minLength":1,"type":"string"},"application_root":{"description":"Local filesystem application root selected for this operation.","minLength":1,"type":"string"},"args":{"default":[],"description":"Value for args.","items":{"type":"string"},"type":"array"},"executable_path":{"description":"Local filesystem path for executable.","minLength":1,"type":"string"}},"required":["executable_path","application_path"],"type":"object"},"kind":"electron-provider","name":"capture_electron_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"actions":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"type":"null"},"kind":{"enum":["click","wait","renderer-reload","renderer-crash","deep-link"],"type":"string"},"status":{"const":"completed","type":"string"},"step_id":{"minLength":1,"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","elapsed_ms","status","error"],"type":"object"},{"additionalProperties":false,"properties":{"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"type":"string"},"kind":{"enum":["click","wait","renderer-reload","renderer-crash","deep-link"],"type":"string"},"status":{"enum":["failed","cancelled"],"type":"string"},"step_id":{"minLength":1,"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","elapsed_ms","status","error"],"type":"object"}]},"type":"array"},"application":{"additionalProperties":false,"properties":{"application_path":{"minLength":1,"type":"string"},"cleanup":{"const":"terminated-owned-process","type":"string"},"electron_version":{"minLength":1,"type":"string"},"executable_path":{"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":{"type":"string"},"type":"array"},"observed_roles":{"items":{"type":"string"},"type":"array"},"pre_capture_activity":{"const":"unavailable","type":"string"},"status":{"enum":["complete","partial_attach","hook_conflict","target_exited","cleanup_failed"],"type":"string"},"unavailable_event_families":{"items":{"type":"string"},"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":{"type":"string"},"type":"array"},"artifact_path":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"correlation_id":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"default":"electron-active-hook","type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","channel","frame","argument_shapes","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["events","observed"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"processes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"service_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"minLength":1,"type":"string"}},"required":["pid","type","name","service_name"],"type":"object"},"type":"array"}},"required":["items"],"type":"object"},"timeline":{"additionalProperties":false,"default":{"events":[],"observed":0},"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"type":"string"},"type":"array"},"artifact_path":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"correlation_id":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","event","phase","channel","direction","sender","receiver","frame","target","argument_shapes","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["events","observed"],"type":"object"},"windows":{"items":{"additionalProperties":false,"properties":{"destroyed":{"type":"boolean"},"title":{"type":"string"},"url":{"type":"string"},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"web_contents_id":{"type":"string"},"window_id":{"type":"string"}},"required":["window_id","web_contents_id","url","title","visible","destroyed"],"type":"object"},"type":"array"}},"required":["application","actions","windows","processes","ipc","timeline","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Capture Electron Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List every eligible Node/Electron V8 Inspector target from an explicit literal-loopback endpoint. Node discovery file locations that cannot be verified are preserved as unresolved reported URLs; they do not prove filesystem identity. Listing does not attach to targets.","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":[{"inspector_endpoint":"http://127.0.0.1:9229"}],"properties":{"inspector_endpoint":{"description":"Value for inspector endpoint.","minLength":1,"type":"string"}},"required":["inspector_endpoint"],"type":"object"},"kind":"runtime-provider","name":"list_javascript_runtime_targets","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"unconnectable":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unsupported_location","unconnectable"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"minLength":1,"type":"string"},"protocol_version":{"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"targets":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"minLength":1,"type":"string"},"sanitized_url":{"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},{"additionalProperties":false,"properties":{"kind":{"const":"unresolved","type":"string"},"reason":{"const":"unverifiable-file-location","type":"string"},"reported_url":{"minLength":1,"type":"string"}},"required":["kind","reported_url","reason"],"type":"object"}]},"protocol_type":{"minLength":1,"type":"string"},"target_id":{"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location"],"type":"object"},"type":"array"}},"required":["runtime","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 Node/Electron V8 Inspector target by supplying its loopback Inspector endpoint and target ID. The provider rechecks target presence and attachability; a Node discovery file location may remain unresolved. Loaded script locations are validated independently from Debugger.scriptParsed. Captures script and Runtime execution-context metadata. REA never evaluates, pauses, resumes, reads source, or instruments the target; require/import edges, EventEmitter activity, and Electron IPC remain explicit unknowns. Reconcile the result with static Application Graph Evidence using reconcile_javascript_runtime. The selected endpoint exposes every target it serves to this tool.","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":[{"inspector_endpoint":"http://127.0.0.1:9229","target_id":"TARGET_ID_FROM_LIST_JAVASCRIPT_RUNTIME_TARGETS"}],"properties":{"inspector_endpoint":{"description":"Value for inspector endpoint.","minLength":1,"type":"string"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":9007199254740991,"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 CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["inspector_endpoint","target_id"],"type":"object"},"kind":"runtime-provider","name":"observe_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"minLength":1,"type":"string"},"type":"array"}},"required":["observation_ms","events_observed","events_retained","events_dropped","metadata_bytes_retained","truncated","truncation_reasons"],"type":"object"},"directly_observed":{"items":{"minLength":1,"type":"string"},"type":"array"},"execution_contexts":{"items":{"additionalProperties":false,"properties":{"context_key":{"minLength":1,"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["created","destroyed","cleared"],"type":"string"}},"required":["context_key","state","name","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"minLength":1,"type":"string"},"protocol_version":{"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"scripts":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"invalid_protocol_value":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unsupported_location","invalid_protocol_value"],"type":"object"},"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"execution_context_key":{"anyOf":[{"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":{"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"minLength":1,"type":"string"},"sanitized_url":{"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"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":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"minLength":1,"type":"string"},"sanitized_url":{"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},{"additionalProperties":false,"properties":{"kind":{"const":"unresolved","type":"string"},"reason":{"const":"unverifiable-file-location","type":"string"},"reported_url":{"minLength":1,"type":"string"}},"required":["kind","reported_url","reason"],"type":"object"}]},"protocol_type":{"minLength":1,"type":"string"},"runtime_kind":{"anyOf":[{"enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},{"const":"unknown","type":"string"}]},"runtime_kind_authority":{"enum":["caller-declared-unverified","not-declared"],"type":"string"},"target_id":{"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location","runtime_kind","runtime_kind_authority"],"type":"object"},"unavailable_without_instrumentation":{"items":{"minLength":1,"type":"string"},"type":"array"},"unknowns":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["runtime","target","capture","scripts","execution_contexts","directly_observed","unavailable_without_instrumentation","unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 every reachable part of an authenticated JavaScript Application Graph supplied as inline Evidence. 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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"direction":"both","seed":{"case_sensitive":false,"kind":"module","match":"exact","value":"renderer.js"}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"}},"required":["seed","application"],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"source_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-source","partial","no-match"],"type":"string"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","source_graph_status","total_seed_matches"],"type":"object"},"direction":{"enum":["outgoing","incoming","both"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"graph":{"anyOf":[{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"native_handoffs":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"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"},"type":"array"},"export_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"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"},"type":"array"},"recommended_tools":{"items":{"enum":["open_binary","binary_overview","search_procedures","analyze_function","xrefs"],"type":"string"},"type":"array"},"requested_exports":{"items":{"minLength":1,"type":"string"},"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"},"type":"array"},"paths":{"items":{"additionalProperties":false,"properties":{"authorities":{"items":{"minLength":1,"type":"string"},"type":"array"},"contains_inference":{"type":"boolean"},"edge_ids":{"items":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"type":"array"},"end_kind":{"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"},"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"},"type":"array"},"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":{"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":{"minLength":1,"type":"string"},"kind":{"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","kind","basis","field"],"type":"object"},"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":["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"],"type":"object"},"requiresSession":false,"title":"Trace Application Feature"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace static JavaScript data-flow, direct call/return, and closure relations from inline application Evidence. 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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"query":{"direction":"backward-provenance","seed":{"kind":"semantic-node","node_id":"jsrg_node_0000000000000000000000000000000000000000000000000000000000000000"}}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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"},"minItems":1,"type":"array"},"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"},"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"},"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.","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.","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.","minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]}},"required":["seed","direction"],"type":"object"}},"required":["application","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"status":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["status"],"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"},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"minLength":1,"type":"string"},"role_key":{"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"type":"array"},"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"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":{"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","type":"string"},"value":{"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","type":"string"},"name":{"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"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"},"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","unsupported"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"relevant_unknowns":{"maximum":9007199254740991,"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","traversed_nodes","traversed_relations","traversed_functions","traversed_modules","relevant_unknowns"],"type":"object"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"detail":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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"},"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"},"type":"array"}},"required":["query_id","source_graph_id","seed","direction","status","seed_node_ids","nodes","relations","unknowns","expected_match_node_ids","summary","coverage","limitations","source_evidence_id","evidence_links"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 inline Evidence. 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 the complete matching 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,"examples":[{"left":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"right":{"authority":"analyst-inference","confidence":"inferred","environment":null,"evidence_id":"ev_c2754cf75e286b839ed825f247062067a6472acb1e7b6ce0f9aaceec6448d6d7","evidence_links":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"limitations":["Artifact identity is unavailable for this observation.","A static module resident in an observed bundle is not reported as executed.","Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.","Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.","Not-observed means absent from the bounded captures in scope, never globally unloaded.","Only caller-supplied, semantically verified Evidence records were reconciled.","Source-map authority remains separate from passive runtime authority."],"locations":[],"normalized_result":{"coverage":{"omitted_graph_items":0,"omitted_reconciliation_items":0,"omitted_runtime_entities":0,"omitted_static_load_states":0,"status":"complete-within-inputs","truncated":false},"evidence_links":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[{"edge_id":"jag_edge_3799eb1c2b0f224013a0edba8911a8b9edabd5fa6da2f893a6cfa24a899c9463","evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"cross-layer-reconciliation","confidence":"high","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"extractor":{"executable_sha256":null,"name":"rea-javascript-runtime-reconciliation","operation":"reconcile_javascript_runtime","version":"1"},"limitations":["Equal content digests establish byte identity, not execution causality.","Passive script parsing or target presence does not prove feature execution."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"inferred"},"identifier_strategy":{"stability":"relationship-exact","strategy":"semantic-content-sha256"},"properties":{"basis":"content-and-location","reconciliation_id":"jrr_item_ea9d751c4bf3a2234af56b80d5ac8a1f953da9a9477cd46586a62934ff4a5fb2","static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753"},"relation":"observed_as","source_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","target_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"},{"edge_id":"jag_edge_f3c06b02c5ac77056b5d2a9f8de834ea0a9123b01dc369a011e3adc4a535338b","evidence":{"artifact":{"available":false,"detail":"The relationship is runtime metadata, not standalone bytes.","reason":"not-applicable"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The relationship was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"relationship-exact","strategy":"semantic-content-sha256"},"properties":{"basis":"passive-cdp-observation"},"relation":"loads","source_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","target_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"}],"graph_id":"jag_0536a9584eb91a16f78f71e8bef4cffc3105df18098fe65a7b114add520203ca","limitations":["Cross-layer observed_as edges are inferences; digest equality proves byte identity only.","Runtime presence is bounded to passive capture windows and does not prove feature execution.","Source-map relationships retain their original static authority and are not promoted into runtime matches."],"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"}}]},{"identity":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","runtime_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","stability":"capture-only","strategy":"runtime-instance"},"kind":"runtime-script-instance","node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e","observations":[{"evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The entity was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"/Applications/Example.app/Contents/Resources/app/renderer.js","observation_id":"jag_observation_9315403b875ea70c310909daf797780ab9045ff8f4803db38a9184e4f0704f11","properties":{"cdp_hash":"example","is_module":true,"language":"JavaScript","length":29,"location":"/Applications/Example.app/Contents/Resources/app/renderer.js","source_sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"}}]},{"identity":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","runtime_key":"example-target","stability":"capture-only","strategy":"runtime-instance"},"kind":"target","node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","observations":[{"evidence":{"artifact":{"available":false,"detail":"This runtime entity has no standalone artifact bytes.","reason":"not-applicable"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The entity was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":null,"target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"Example","observation_id":"jag_observation_844a03a29af96a0bcd4625e0377b67c439af68a462c5fa83009c7c27283c5dee","properties":{"attached":false,"location":"/Applications/Example.app/Contents/Resources/app/index.html","runtime_type":"page"}}]}],"root_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265"],"schema":"JavaScriptApplicationGraph"},"limitations":["A static module resident in an observed bundle is not reported as executed.","Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.","Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.","Not-observed means absent from the bounded captures in scope, never globally unloaded.","Only caller-supplied, semantically verified Evidence records were reconciled.","Source-map authority remains separate from passive runtime authority."],"reconciliation_id":"jrr_ec50425a5a5a5cb85aa40f13f72dcba54a8ab16170d9421a0277fbdf0fa4c9eb","reconciliations":[{"basis":"none","candidate_static_count":0,"candidate_static_nodes":[],"confidence":"unknown","entity_kind":"target","reason":"no-static-content-match","reconciliation_id":"jrr_item_abd5635b06340f082ef46bff8802a361c7b30011085f1c9e7437b29b451c1e5e","runtime_evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","runtime_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","static_layer_id":null,"static_node_id":null,"status":"unmatched"},{"basis":"content-and-location","candidate_static_count":1,"candidate_static_nodes":[{"static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"}],"confidence":"high","entity_kind":"script","reason":"content-and-location-match","reconciliation_id":"jrr_item_ea9d751c4bf3a2234af56b80d5ac8a1f953da9a9477cd46586a62934ff4a5fb2","runtime_evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","runtime_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e","static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","status":"matched"}],"runtime_captures":[{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","frames":0,"kind":"electron","scripts":1,"scripts_complete_within_scope":true,"target_key":"example-target","target_location":"/Applications/Example.app/Contents/Resources/app/index.html","target_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","workers":0}],"source_map_authority":{"limitation":"Source-map declarations and original-source content retain separate static authority and are not used as primary runtime byte matches.","runtime_script_declarations":0,"static_layer_count":1,"used_for_primary_matching":false},"static_layers":[{"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","format":"directory","graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","input_path":"/Applications/Example.app/Contents/Resources/app","layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","role":"application","root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","runtime_mappings":[]}],"static_load_states":[{"kind":"javascript-asset","reason":"runtime-script-correspondence","runtime_node_ids":["jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"],"static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","status":"loaded"}],"summary":{"ambiguous":0,"matched":1,"runtime_frames":0,"runtime_scripts":1,"runtime_targets":1,"runtime_workers":0,"static_loaded":1,"static_not_observed":0,"static_resident":0,"static_unknown":0,"unknown":0,"unmatched":1}},"operation":"reconcile_javascript_runtime","parameters":{"runtime_evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"static_layers":[{"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","role":"application","runtime_mappings":[]}]},"predicate_type":"rea.javascript-runtime-reconciliation","provider":{"id":"rea-javascript-runtime-reconciliation","name":"REA JavaScript runtime reconciliation","version":"1"},"raw_result":null,"subject":null}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"type":"array"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"type":"array"}},"required":["left","right"],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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_omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"right_graph_omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["left_graph_status","right_graph_status","left_graph_omitted_count","right_graph_omitted_count","status"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"items":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"anyOf":[{"additionalProperties":false,"properties":{"basis":{"enum":["exact-node-identity","exact-content-digest","exact-module-source-digest"],"type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"exact","type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","basis","confidence","candidate_left_node_ids","candidate_right_node_ids"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"const":"source-map-identity","type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"high","type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","basis","confidence","candidate_left_node_ids","candidate_right_node_ids"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"enum":["structural-fingerprint","semantic-key"],"type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"medium","type":"string"},"status":{"const":"matched","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":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","changed","unknown"],"type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","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":{"type":"null"},"status":{"enum":["removed","unknown"],"type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","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":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"enum":["added","unknown"],"type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"prefixItems":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}],"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"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":{"type":"null"},"status":{"const":"unknown","type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"prefixItems":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}],"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"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":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"const":"unknown","type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"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"},"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":["comparison_id","left","right","summary","matching","items","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 with inline authenticated JavaScript Application Graph Evidence. 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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"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","vcs":{"dirty":null,"head":null,"kind":"none"}}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"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":{"anyOf":[{"anyOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"minItems":1,"type":"array"},"content_state":{"const":"hashed","description":"Value for content state.","type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"size":{"description":"Value for size.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["path","classifications","limitations","kind","language","sha256","size","content_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["redacted-secret","excluded","unreadable","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","type":"null"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for size."}},"required":["path","classifications","limitations","kind","language","sha256","size","content_state"],"type":"object"}]},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"path":{"description":"Local filesystem path used by this operation.","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"},"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"target":{"description":"Value for target.","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"}]},"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","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"},"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"minLength":1,"type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"manifests":{"description":"Value for manifests.","items":{"minLength":1,"type":"string"},"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"reason":{"description":"Value for reason.","minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","minLength":1,"type":"string"},"importer_version":{"anyOf":[{"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.","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.","minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"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","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"}},"required":["reference","application"],"type":"object"},"kind":"application","name":"compare_source_to_bundle","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"],"type":"string"}},"required":["status","reference_inventory_state","application_graph_status","retained_source_files","retained_application_nodes","candidate_evaluations"],"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":9007199254740991,"minimum":1,"type":"integer"},"signals":{"items":{"additionalProperties":false,"properties":{"current_values":{"items":{"minLength":1,"type":"string"},"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":{"minLength":1,"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["kind","weight","source_value","current_values"],"type":"object"},"minItems":1,"type":"array"}},"required":["current_node_id","current_node_kind","score","confidence","signals"],"type":"object"},"type":"array"},"confidence":{"enum":["exact","high","medium","unknown"],"type":"string"},"current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"mapping_id":{"pattern":"^stbc_item_[a-f0-9]{64}$","type":"string"},"source_language":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"source_path":{"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","limitations"],"type":"object"},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"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"},"scoring":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea-source-to-bundle-signals","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"},"type":"array"}},"required":["comparison_id","reference","application","scoring","summary","items","unmapped_current_node_ids","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Compare Source To Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph supplied as inline Evidence. 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,"examples":[{"left":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"left_export_name":"default","left_module_path":"parser.mjs","right":{"authority":"analyst-inference","confidence":"inferred","environment":null,"evidence_id":"ev_c2754cf75e286b839ed825f247062067a6472acb1e7b6ce0f9aaceec6448d6d7","evidence_links":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"limitations":["Artifact identity is unavailable for this observation.","A static module resident in an observed bundle is not reported as executed.","Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.","Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.","Not-observed means absent from the bounded captures in scope, never globally unloaded.","Only caller-supplied, semantically verified Evidence records were reconciled.","Source-map authority remains separate from passive runtime authority."],"locations":[],"normalized_result":{"coverage":{"omitted_graph_items":0,"omitted_reconciliation_items":0,"omitted_runtime_entities":0,"omitted_static_load_states":0,"status":"complete-within-inputs","truncated":false},"evidence_links":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[{"edge_id":"jag_edge_3799eb1c2b0f224013a0edba8911a8b9edabd5fa6da2f893a6cfa24a899c9463","evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"cross-layer-reconciliation","confidence":"high","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"extractor":{"executable_sha256":null,"name":"rea-javascript-runtime-reconciliation","operation":"reconcile_javascript_runtime","version":"1"},"limitations":["Equal content digests establish byte identity, not execution causality.","Passive script parsing or target presence does not prove feature execution."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"inferred"},"identifier_strategy":{"stability":"relationship-exact","strategy":"semantic-content-sha256"},"properties":{"basis":"content-and-location","reconciliation_id":"jrr_item_ea9d751c4bf3a2234af56b80d5ac8a1f953da9a9477cd46586a62934ff4a5fb2","static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753"},"relation":"observed_as","source_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","target_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"},{"edge_id":"jag_edge_f3c06b02c5ac77056b5d2a9f8de834ea0a9123b01dc369a011e3adc4a535338b","evidence":{"artifact":{"available":false,"detail":"The relationship is runtime metadata, not standalone bytes.","reason":"not-applicable"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The relationship was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"relationship-exact","strategy":"semantic-content-sha256"},"properties":{"basis":"passive-cdp-observation"},"relation":"loads","source_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","target_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"}],"graph_id":"jag_0536a9584eb91a16f78f71e8bef4cffc3105df18098fe65a7b114add520203ca","limitations":["Cross-layer observed_as edges are inferences; digest equality proves byte identity only.","Runtime presence is bounded to passive capture windows and does not prove feature execution.","Source-map relationships retain their original static authority and are not promoted into runtime matches."],"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"}}]},{"identity":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","runtime_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","stability":"capture-only","strategy":"runtime-instance"},"kind":"runtime-script-instance","node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e","observations":[{"evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The entity was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"/Applications/Example.app/Contents/Resources/app/renderer.js","observation_id":"jag_observation_9315403b875ea70c310909daf797780ab9045ff8f4803db38a9184e4f0704f11","properties":{"cdp_hash":"example","is_module":true,"language":"JavaScript","length":29,"location":"/Applications/Example.app/Contents/Resources/app/renderer.js","source_sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"}}]},{"identity":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","runtime_key":"example-target","stability":"capture-only","strategy":"runtime-instance"},"kind":"target","node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","observations":[{"evidence":{"artifact":{"available":false,"detail":"This runtime entity has no standalone artifact bytes.","reason":"not-applicable"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The entity was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":null,"target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"Example","observation_id":"jag_observation_844a03a29af96a0bcd4625e0377b67c439af68a462c5fa83009c7c27283c5dee","properties":{"attached":false,"location":"/Applications/Example.app/Contents/Resources/app/index.html","runtime_type":"page"}}]}],"root_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265"],"schema":"JavaScriptApplicationGraph"},"limitations":["A static module resident in an observed bundle is not reported as executed.","Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.","Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.","Not-observed means absent from the bounded captures in scope, never globally unloaded.","Only caller-supplied, semantically verified Evidence records were reconciled.","Source-map authority remains separate from passive runtime authority."],"reconciliation_id":"jrr_ec50425a5a5a5cb85aa40f13f72dcba54a8ab16170d9421a0277fbdf0fa4c9eb","reconciliations":[{"basis":"none","candidate_static_count":0,"candidate_static_nodes":[],"confidence":"unknown","entity_kind":"target","reason":"no-static-content-match","reconciliation_id":"jrr_item_abd5635b06340f082ef46bff8802a361c7b30011085f1c9e7437b29b451c1e5e","runtime_evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","runtime_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","static_layer_id":null,"static_node_id":null,"status":"unmatched"},{"basis":"content-and-location","candidate_static_count":1,"candidate_static_nodes":[{"static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"}],"confidence":"high","entity_kind":"script","reason":"content-and-location-match","reconciliation_id":"jrr_item_ea9d751c4bf3a2234af56b80d5ac8a1f953da9a9477cd46586a62934ff4a5fb2","runtime_evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","runtime_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e","static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","status":"matched"}],"runtime_captures":[{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","frames":0,"kind":"electron","scripts":1,"scripts_complete_within_scope":true,"target_key":"example-target","target_location":"/Applications/Example.app/Contents/Resources/app/index.html","target_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","workers":0}],"source_map_authority":{"limitation":"Source-map declarations and original-source content retain separate static authority and are not used as primary runtime byte matches.","runtime_script_declarations":0,"static_layer_count":1,"used_for_primary_matching":false},"static_layers":[{"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","format":"directory","graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","input_path":"/Applications/Example.app/Contents/Resources/app","layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","role":"application","root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","runtime_mappings":[]}],"static_load_states":[{"kind":"javascript-asset","reason":"runtime-script-correspondence","runtime_node_ids":["jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"],"static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","status":"loaded"}],"summary":{"ambiguous":0,"matched":1,"runtime_frames":0,"runtime_scripts":1,"runtime_targets":1,"runtime_workers":0,"static_loaded":1,"static_not_observed":0,"static_resident":0,"static_unknown":0,"unknown":0,"unmatched":1}},"operation":"reconcile_javascript_runtime","parameters":{"runtime_evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"static_layers":[{"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","role":"application","runtime_mappings":[]}]},"predicate_type":"rea.javascript-runtime-reconciliation","provider":{"id":"rea-javascript-runtime-reconciliation","name":"REA JavaScript runtime reconciliation","version":"1"},"raw_result":null,"subject":null},"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":{"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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.","minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","minLength":1,"type":"string"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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.","minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","minLength":1,"type":"string"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left","right"],"type":"object"},"kind":"application","name":"compare_javascript_export_shapes","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"type":"string"},"value":{"anyOf":[{"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":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"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":{"minLength":1,"type":"string"},"type":"array"},"path":{"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":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"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"},"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":{"anyOf":[{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"const":"selected","type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"},{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"type":"null"},"status":{"enum":["missing","ambiguous"],"type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"},{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"const":"unavailable","type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"}]},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"right":{"anyOf":[{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"const":"selected","type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"},{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"type":"null"},"status":{"enum":["missing","ambiguous"],"type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"},{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"const":"unavailable","type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"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"},"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":["comparison_id","left","right","summary","changes","coverage","evidence_links","limitations","runtime_validation"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 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","anyOf":[{"additionalProperties":false,"properties":{"cases":{"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"type":"array"},"case_id":{"description":"Value for case id.","minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"minItems":1,"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"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"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":"Resource budgets that bound execution and retained output for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":9007199254740991,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Byte count for input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Byte count for memory.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"module_bytes":{"default":4194304,"description":"Byte count for module.","maximum":9007199254740991,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Byte count for output.","maximum":9007199254740991,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Byte count for protocol.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Byte count for stderr.","maximum":9007199254740991,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":9007199254740991,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Byte count for tmpfs.","maximum":9007199254740991,"minimum":1,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":9007199254740991,"minimum":1,"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":{"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"}},"required":["path"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode","cases"],"type":"object"},{"additionalProperties":false,"properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"type":"array"},"case_id":{"description":"Value for case id.","minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"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":9007199254740991,"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.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"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":"Resource budgets that bound execution and retained output for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":9007199254740991,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Byte count for input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Byte count for memory.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"module_bytes":{"default":4194304,"description":"Byte count for module.","maximum":9007199254740991,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Byte count for output.","maximum":9007199254740991,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Byte count for protocol.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Byte count for stderr.","maximum":9007199254740991,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":9007199254740991,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Byte count for tmpfs.","maximum":9007199254740991,"minimum":1,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":9007199254740991,"minimum":1,"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":{"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"}},"required":["path"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode","generator"],"type":"object"},{"additionalProperties":false,"properties":{"cases":{"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"type":"array"},"case_id":{"description":"Value for case id.","minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"minItems":1,"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"},"left":{"additionalProperties":false,"description":"Left-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"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":"Resource budgets that bound execution and retained output for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":9007199254740991,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Byte count for input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Byte count for memory.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"module_bytes":{"default":4194304,"description":"Byte count for module.","maximum":9007199254740991,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Byte count for output.","maximum":9007199254740991,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Byte count for protocol.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Byte count for stderr.","maximum":9007199254740991,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":9007199254740991,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Byte count for tmpfs.","maximum":9007199254740991,"minimum":1,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":9007199254740991,"minimum":1,"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":{"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"}},"required":["path"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode","plan_digest","cases"],"type":"object"},{"additionalProperties":false,"properties":{"cases":{"default":[],"description":"Value for cases.","items":{"additionalProperties":false,"properties":{"arguments":{"description":"Value for arguments.","items":{"$ref":"#/$defs/__schema0"},"type":"array"},"case_id":{"description":"Value for case id.","minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"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":9007199254740991,"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.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"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":"Resource budgets that bound execution and retained output for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":9007199254740991,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Byte count for input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Byte count for memory.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"module_bytes":{"default":4194304,"description":"Byte count for module.","maximum":9007199254740991,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Byte count for output.","maximum":9007199254740991,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Byte count for protocol.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Byte count for stderr.","maximum":9007199254740991,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":9007199254740991,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Byte count for tmpfs.","maximum":9007199254740991,"minimum":1,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":9007199254740991,"minimum":1,"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":{"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"}},"required":["path"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode","plan_digest","generator"],"type":"object"}],"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":"/tmp/example/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"}],"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":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"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":{"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":9007199254740991,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":9007199254740991,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"module_bytes":{"default":4194304,"maximum":9007199254740991,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":9007199254740991,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":9007199254740991,"minimum":1,"type":"integer"},"result_depth":{"default":16,"maximum":9007199254740991,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":9007199254740991,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":9007199254740991,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":9007199254740991,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":9007199254740991,"minimum":1,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":9007199254740991,"minimum":1,"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":{"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"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":{"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"}},"required":["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"}},"required":["provider","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"}]},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["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"}]},"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","dos-mz","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":["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"}},"required":["provider","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"}]},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["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"}]},"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","dos-mz","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":["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"}},"required":["provider","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"}]},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["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"}]},"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","dos-mz","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":["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 later execution.","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":"/tmp/example/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"replay":{"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/tmp/example/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.","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"},"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"},"type":"array"},"case_id":{"description":"Value for case id.","minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"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":9007199254740991,"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.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"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":"Resource budgets that bound execution and retained output for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":9007199254740991,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Byte count for input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Byte count for memory.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"module_bytes":{"default":4194304,"description":"Byte count for module.","maximum":9007199254740991,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Byte count for output.","maximum":9007199254740991,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Byte count for protocol.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Byte count for stderr.","maximum":9007199254740991,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":9007199254740991,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Byte count for tmpfs.","maximum":9007199254740991,"minimum":1,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":9007199254740991,"minimum":1,"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":{"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"}},"required":["path"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","minLength":1,"type":"string"}},"required":["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._:/-]*$","type":"string"},"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"export_name":{"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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":{"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"max_handles":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"max_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"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":{"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"working_directory":{"minLength":1,"type":"string"}},"required":["plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism"],"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":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"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":{"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":9007199254740991,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"maximum":9007199254740991,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"module_bytes":{"default":4194304,"maximum":9007199254740991,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"maximum":9007199254740991,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"maximum":9007199254740991,"minimum":1,"type":"integer"},"result_depth":{"default":16,"maximum":9007199254740991,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"maximum":9007199254740991,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"maximum":9007199254740991,"minimum":0,"type":"integer"},"tasks":{"default":8,"maximum":9007199254740991,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"maximum":9007199254740991,"minimum":1,"type":"integer"},"wall_time_ms":{"default":3000,"maximum":9007199254740991,"minimum":1,"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":{"include_sources":{"type":"boolean"},"path":{"minLength":1,"type":"string"}},"required":["path","include_sources"],"type":"object"},{"type":"null"}]},"right":{"additionalProperties":false,"properties":{"entry_alias":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"type":"string"},"modules":{"items":{"additionalProperties":false,"properties":{"alias":{"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":{"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"}},"required":["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"}},"required":["provider","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"}]},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["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"}]},"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","dos-mz","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":["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"},"transformation":{"additionalProperties":false,"properties":{"artifact_path":{"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"},"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":["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"}},"required":["provider","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"}]},"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","dos-mz","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":["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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]}},"required":["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 exact Node characterization plan in the owned controlled-replay boundary. The supplied plan_sha256 is checked against the freshly computed plan_sha256 as content identity; a mismatch fails before execution. Returns transformation, replay, cleanup, and provider-neutral characterization Evidence.","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":[{"plan_sha256":"0000000000000000000000000000000000000000000000000000000000000000","preparation":{"expected_effect":"pure","instrumentation":{"artifact_path":"/tmp/example/bundle.js","artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","selection":{"byte_end":120,"byte_start":100,"export_name":"selected","selected_sha256":"0000000000000000000000000000000000000000000000000000000000000000"}},"replay":{"cases":[{"arguments":[""],"case_id":"empty"}],"left":{"entry_alias":"bundle","entry_export":"selected","modules":[{"alias":"bundle","dependencies":{},"format":"commonjs-factory","path":"/tmp/example/bundle.js","role":"module"}]},"mode":"plan"},"selected_alias":"bundle"}}],"properties":{"plan_sha256":{"description":"SHA-256 content identity of the prepared plan; execution rejects a mismatch.","pattern":"^[a-f0-9]{64}$","type":"string"},"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.","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"},"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"},"type":"array"},"case_id":{"description":"Value for case id.","minLength":1,"type":"string"}},"required":["case_id","arguments"],"type":"object"},"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":9007199254740991,"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.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"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":"Resource budgets that bound execution and retained output for this operation.","properties":{"cpu_quota_percent":{"default":50,"description":"Value for cpu quota percent.","maximum":9007199254740991,"minimum":1,"type":"integer"},"input_bytes":{"default":262144,"description":"Byte count for input.","maximum":9007199254740991,"minimum":1,"type":"integer"},"memory_bytes":{"default":134217728,"description":"Byte count for memory.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"module_bytes":{"default":4194304,"description":"Byte count for module.","maximum":9007199254740991,"minimum":1,"type":"integer"},"output_bytes":{"default":524288,"description":"Byte count for output.","maximum":9007199254740991,"minimum":1,"type":"integer"},"protocol_bytes":{"default":16777216,"description":"Byte count for protocol.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_depth":{"default":16,"description":"Value for result depth.","maximum":9007199254740991,"minimum":1,"type":"integer"},"result_nodes":{"default":10000,"description":"Value for result nodes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stderr_bytes":{"default":32768,"description":"Byte count for stderr.","maximum":9007199254740991,"minimum":0,"type":"integer"},"tasks":{"default":8,"description":"Value for tasks.","maximum":9007199254740991,"minimum":1,"type":"integer"},"tmpfs_bytes":{"default":16777216,"description":"Byte count for tmpfs.","maximum":9007199254740991,"minimum":1,"type":"integer"},"wall_time_ms":{"default":3000,"description":"Value for wall time ms.","maximum":9007199254740991,"minimum":1,"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":{"include_sources":{"default":false,"description":"Whether to include sources in the result.","type":"boolean"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"}},"required":["path"],"type":"object"},"right":{"additionalProperties":false,"description":"Right-hand input used for comparison or differential execution.","properties":{"entry_alias":{"description":"Value for entry alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"entry_export":{"default":"default","description":"Value for entry export.","minLength":1,"type":"string"},"modules":{"description":"Value for modules.","items":{"additionalProperties":false,"properties":{"alias":{"description":"Value for alias.","minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"dependencies":{"additionalProperties":{"minLength":1,"pattern":"^[A-Za-z0-9_./:@-]+$","type":"string"},"default":{},"description":"Value for dependencies.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"role":{"default":"module","description":"Value for role.","enum":["module","stub"],"type":"string"}},"required":["alias","path","format"],"type":"object"},"minItems":1,"type":"array"}},"required":["modules","entry_alias"],"type":"object"}},"required":["left","mode"],"type":"object"},"selected_alias":{"description":"Value for selected alias.","minLength":1,"type":"string"}},"required":["selected_alias","expected_effect","instrumentation","replay"],"type":"object"}},"required":["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"}},"required":["provider","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"}]},"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","dos-mz","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":["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"}]},"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","dos-mz","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":["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._:/-]*$","type":"string"},"type":"array"},"artifact":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","byte_length"],"type":"object"},"callable":{"additionalProperties":false,"properties":{"callable_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"export_name":{"minLength":1,"type":"string"},"module_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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":{"minLength":1,"type":"string"},"limits":{"additionalProperties":false,"properties":{"idle_timeout_ms":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_calls":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"max_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"max_handles":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"max_processes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"timeout_ms":{"maximum":9007199254740991,"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":{"minLength":1,"type":"string"},"executable_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"family":{"minLength":1,"type":"string"},"profile_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"provider_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"version":{"minLength":1,"type":"string"}},"required":["family","provider_id","executable_path","executable_sha256","version","profile_sha256"],"type":"object"},"working_directory":{"minLength":1,"type":"string"}},"required":["plan_sha256","preparation_sha256","artifact","runtime","callable","working_directory","isolated_home","expected_effect","allowed_boundaries","limits","determinism"],"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"}},"required":["provider","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"}]},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["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"}]},"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","dos-mz","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":["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"}},"required":["provider","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"}]},"stderr":{"type":"string"},"termination":{"enum":["completed","timeout","oom","crash","cancelled","protocol_error"],"type":"string"}},"required":["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"}]},"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","dos-mz","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":["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"},"transformation":{"additionalProperties":false,"properties":{"artifact_path":{"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"},"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":["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"}},"required":["provider","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"}]},"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","dos-mz","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":["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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]}},"required":["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 the complete deterministic ReconstructionObligationLedger from an authenticated Evidence 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. The inline result carries the 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":[],"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"manifest":{"bindings":[],"contradictions":[]},"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","dos-mz","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"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence 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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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 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":"Value for offset.","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."},"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","dos-mz","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":["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 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 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"description":"Value for domain.","minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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.","minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"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":[{"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"},"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","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"},"type":"array"},"rationale":{"description":"Value for rationale.","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 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"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"},"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence 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.","minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","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.","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.","minLength":1,"type":"string"},"parser":{"description":"Value for parser.","minLength":1,"type":"string"},"schema":{"description":"Value for schema.","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._:/-]*$","type":"string"},"command":{"description":"Value for command.","minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"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.","minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence 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._:/-]*$","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":"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"},"minItems":2,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"}},"required":["obligation_id","evidence_ids"],"type":"object"},"type":"array"}},"required":["bindings","contradictions"],"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._:/-]*$","type":"string"},"type":"array"},"disposition":{"description":"Value for disposition.","enum":["active","blocked","out-of-scope"],"type":"string"},"family":{"description":"Value for family.","minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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"},"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":{"minLength":1,"type":"string"},"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._:/-]*$","type":"string"},"type":"array"},"review_evidence_ids":{"description":"Ordered Evidence identifiers for the review observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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.","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.","minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"minLength":1,"type":"string"},"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"},"type":"array"}},"required":["evidence_bundle","reviewed_obligations","manifest"],"type":"object"},"kind":"application","name":"build_reconstruction_obligation_ledger","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"closure_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"status":{"enum":["complete","partial"],"type":"string"}},"required":["status"],"type":"object"},"dependency_graph":{"items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"ledger_id":{"pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"minLength":1,"type":"string"},"state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"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"},"minItems":1,"type":"array"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"type":"array"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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":{"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"type":"array"},"owner":{"additionalProperties":false,"properties":{"module_path":{"minLength":1,"type":"string"},"owner_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"minLength":1,"type":"string"},"parser":{"minLength":1,"type":"string"},"schema":{"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._:/-]*$","type":"string"},"command":{"minLength":1,"type":"string"},"enumerated_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"properties":{"mode":{"enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"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._:/-]*$","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._:/-]*$","type":"string"},"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":{"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"type":"array"},"family":{"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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":{"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"type":"array"},"origin":{"enum":["generated","reviewed"],"type":"string"},"required":{"type":"boolean"},"required_case_kinds":{"items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"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":{"minLength":1,"type":"string"},"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._:/-]*$","type":"string"},"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":{"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":{"minLength":1,"type":"string"},"unavailable_authority":{"items":{"minLength":1,"type":"string"},"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"},"type":"array"},"ownership_graph":{"items":{"additionalProperties":false,"properties":{"module_path":{"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"symbol":{"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"reports":{"additionalProperties":false,"properties":{"contradicted_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"type":"array"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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"},"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","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","obligations","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Build Reconstruction Obligation Ledger"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Evaluate inline evidence-backed reconstruction coverage against one named boundary. 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":false,"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":[{"boundary_id":"replacement.cli","coverage":{"artifacts":[],"boundaries":[{"allowed_dispositions":[],"allowed_unknown_ids":[],"boundary_id":"replacement.cli","required_claim_ids":["claim.cli.help"],"required_package_proof_kinds":["clean-install","authority-independence"],"required_surface_ids":["cli.help"],"title":"CLI replacement"}],"claims":[],"contradictions":[],"evidence_bundle":{"artifacts":[],"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"owners":[],"package_proofs":[],"residual_unknown_ids":[],"surfaces":[],"verifier_contracts":[],"verifier_results":[]}}],"properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","minLength":1,"type":"string"},"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","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"},"minItems":1,"type":"array"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["artifact_id","artifact_sha256","version","environment_sha256","evidence_ids"],"type":"object"},"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"},"type":"array"},"allowed_unknown_ids":{"description":"Value for allowed unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"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"},"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"},"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"},"minItems":1,"type":"array"},"title":{"description":"Value for title.","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"},"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.","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"},"minItems":1,"type":"array"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"minItems":1,"type":"array"},"title":{"description":"Value for title.","minLength":1,"type":"string"}},"required":["claim_id","title","kind","surface_ids","required_dimensions","required_authority"],"type":"object"},"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"},"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"},"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"},"type":"array"}},"required":["contradiction_id","status","surface_ids","claim_ids","evidence_ids"],"type":"object"},"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","dos-mz","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"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence 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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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 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":"Value for offset.","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."},"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","dos-mz","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":["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 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 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"description":"Value for domain.","minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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.","minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"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":[{"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"},"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","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"},"type":"array"},"rationale":{"description":"Value for rationale.","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 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for owner export."},"owner_path":{"description":"Local filesystem path for owner.","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.","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"},"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"},"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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"},"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"},"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"},"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"family":{"description":"Value for family.","minLength":1,"type":"string"},"location":{"description":"Value for location.","minLength":1,"type":"string"},"occurrence_id":{"anyOf":[{"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"},"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"},"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"},"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":9007199254740991,"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"},"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"},"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"},"minItems":1,"type":"array"},"covered_dimensions":{"description":"Value for covered dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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"},"type":"array"},"repeats":{"description":"Value for repeats.","maximum":9007199254740991,"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"},"type":"array"}},"required":["evidence_bundle","artifacts","surfaces","owners","claims","verifier_contracts","verifier_results","residual_unknown_ids","contradictions","package_proofs","boundaries"],"type":"object"}},"required":["coverage","boundary_id"],"type":"object"},"kind":"application","name":"evaluate_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"},"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":{"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"},"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"rationale":{"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"},"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"}},"required":["boundary_id","status","summary","reasons","recommended_probes","evidence_ids"],"type":"object"},"requiresSession":false,"title":"Evaluate 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 analysis snapshot 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"},{"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","dos-mz","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 to the caller-supplied path, then close the active target and every provider resource started for it. Existing files require 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 the complete current target, provider, capability availability, client-feature, analysis, and server-identity status without starting analysis.","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":[{}],"properties":{"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"}},"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"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"anyOf":[{"additionalProperties":{},"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["request_id","operation","elapsed_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"],"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"}},"required":["provider","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/__schema0"},"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/__schema0"},"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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"type":"null"}},"required":["operation","effects","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","effects","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/__schema0"},"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/__schema0"},"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/__schema0"},"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"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"type":"null"}},"required":["operation","effects","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","effects","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/__schema1"},"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"},"progress":{"type":"boolean"}},"required":["progress","cancellation","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,"minItems":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,"minItems":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"],"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"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","open"],"type":"object"},{"additionalProperties":{},"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["request_id","operation","elapsed_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"],"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"}},"required":["provider","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/__schema0"},"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/__schema0"},"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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"type":"null"}},"required":["operation","effects","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","effects","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/__schema0"},"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/__schema0"},"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/__schema0"},"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"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"type":"null"}},"required":["operation","effects","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","effects","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","dos-mz","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/__schema1"},"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"},"progress":{"type":"boolean"}},"required":["progress","cancellation","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,"minItems":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,"minItems":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"],"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"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","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 bundle to the requested local path. Existing files require overwrite: true; records and manifests use canonical byte-stable ordering.","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 the JSON bundle at the supplied local path, validate every Evidence 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 caller-selected command under a PTY and return process capture Evidence with residual unknowns. A command name resolves through the inherited PATH; the working directory defaults to the caller\'s current directory; host environment variables are inherited with scenario overrides. Filesystem snapshots are opt-in through filesystem_observation_paths. The target runs with the current user\'s permissions; this is 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,"default":{"max":1,"min":1},"description":"Value for cardinality.","properties":{"max":{"description":"Value for max.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["min","max"],"type":"object"},"consume":{"default":false,"description":"Value for consume.","type":"boolean"},"exact":{"$ref":"#/$defs/__schema1","description":"Value for exact."},"ignore_fields":{"default":[],"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms","files","effects","truncated"],"type":"string"},"type":"array"},"kind":{"const":"event","description":"Value for kind.","type":"string"},"since":{"default":{"kind":"scenario_start"},"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_-]*$","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._-]*$","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"],"type":"object"},{"additionalProperties":false,"properties":{"consume":{"default":false,"description":"Value for consume.","type":"boolean"},"kind":{"const":"terminal_text","description":"Value for kind.","type":"string"},"literal":{"description":"Value for literal.","minLength":1,"type":"string"},"occurrence":{"default":1,"description":"Value for occurrence.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"since":{"default":{"kind":"scenario_start"},"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_-]*$","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._-]*$","type":"string"},"kind":{"const":"event_id","description":"Value for kind.","type":"string"}},"required":["kind","event_id"],"type":"object"}]}},"required":["kind","literal"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"all","description":"Value for kind.","type":"string"},"triggers":{"description":"Value for triggers.","items":{"$ref":"#/$defs/__schema0"},"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"},"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"},"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":9007199254740991,"type":"integer"},"min":{"description":"Value for min.","exclusiveMinimum":0,"maximum":9007199254740991,"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":[{"arguments":[],"checkpoints":[],"command_shims":[],"environment":{},"events":[],"executable":"/usr/bin/true","filesystem_observation_paths":[],"idle_timeout_ms":30000,"limits":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"normalization":{"paths":false,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"reactive":null,"replay":{"http":[],"machine":null,"websocket_connections":[],"websocket_messages":[]},"settle_ms":100,"terminal":{"columns":80,"rows":24,"scrollback":1000},"timeout_ms":30000,"working_directory":"/tmp"}],"properties":{"arguments":{"default":[],"description":"Value for arguments.","items":{"type":"string"},"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_-]*$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"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":9007199254740991,"type":"integer"},"type":{"const":"terminal_literal","description":"Value for type.","type":"string"},"value":{"description":"Value for value.","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"},"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._-]*$","type":"string"},"routes":{"description":"Value for routes.","items":{"properties":{"arguments":{"description":"Value for arguments.","items":{"type":"string"},"type":"array"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"outputs":{"default":[],"description":"Value for outputs.","items":{"properties":{"at_ms":{"description":"Value for at ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"data":{"description":"Value for data.","type":"string"},"stream":{"description":"Value for stream.","enum":["stdout","stderr"],"type":"string"}},"required":["at_ms","stream","data"],"type":"object"},"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"},"minItems":1,"type":"array"}},"required":["name","routes"],"type":"object"},"type":"array"},"environment":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for environment.","propertyNames":{"pattern":"^[^=\\\\0]+$","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":65535,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":65535,"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"}]},"type":"array"},"executable":{"description":"Command name or executable path to run.","minLength":1,"type":"string"},"filesystem_observation_paths":{"default":[],"description":"Value for filesystem observation paths.","items":{"minLength":1,"type":"string"},"type":"array"},"idle_timeout_ms":{"default":30000,"description":"Value for idle timeout ms.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"limits":{"additionalProperties":false,"default":{"connections":100,"file_bytes":10000000,"files":10000,"filesystem_depth":16,"output_bytes":1000000,"processes":1000,"protocol_body_bytes":1000000,"protocol_events":10000},"description":"Resource budgets that bound execution and retained output for this operation.","properties":{"connections":{"default":100,"description":"Value for connections.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"file_bytes":{"default":10000000,"description":"Byte count for file.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"files":{"default":10000,"description":"Value for files.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"filesystem_depth":{"default":16,"description":"Value for filesystem depth.","maximum":9007199254740991,"minimum":0,"type":"integer"},"output_bytes":{"default":1000000,"description":"Byte count for output.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"processes":{"default":1000,"description":"Value for processes.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"protocol_body_bytes":{"default":1000000,"description":"Byte count for protocol body.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"protocol_events":{"default":10000,"description":"Value for protocol events.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"type":"object"},"normalization":{"default":{"paths":false,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"description":"Value for normalization.","properties":{"paths":{"default":false,"description":"Value for paths.","type":"boolean"},"patterns":{"default":[],"description":"Value for patterns.","items":{"properties":{"pattern":{"description":"Literal text or regular expression used to filter matching results.","type":"string"},"replacement":{"description":"Value for replacement.","type":"string"}},"required":["pattern","replacement"],"type":"object"},"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":9007199254740991,"type":"integer"}},"type":"object"},"reactive":{"anyOf":[{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"states":{"description":"Value for states.","items":{"additionalProperties":false,"properties":{"deadline_ms":{"description":"Value for deadline ms.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"max_visits":{"description":"Maximum permitted visits for this operation.","exclusiveMinimum":0,"maximum":9007199254740991,"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.","type":"string"},"sensitive":{"default":false,"description":"Value for sensitive.","type":"boolean"},"type":{"const":"send_input","description":"Value for type.","type":"string"}},"required":["type","data"],"type":"object"},{"additionalProperties":false,"properties":{"columns":{"description":"Value for columns.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"rows":{"description":"Value for rows.","exclusiveMinimum":0,"maximum":9007199254740991,"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._-]*$","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_-]*$","type":"string"},"type":{"const":"checkpoint","description":"Value for type.","type":"string"}},"required":["type","name"],"type":"object"}]},"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"priority":{"description":"Value for priority.","maximum":9007199254740991,"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._-]*$","type":"string"}},"required":["kind","state"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"finish","description":"Value for kind.","type":"string"}},"required":["kind"],"type":"object"}]},"when":{"$ref":"#/$defs/__schema0","description":"Value for when."}},"required":["id","priority","max_uses","when","actions","target"],"type":"object"},"minItems":1,"type":"array"}},"required":["id","max_visits","deadline_ms","on"],"type":"object"},"minItems":1,"type":"array"}},"required":["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.","type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"disconnect":{"default":false,"description":"Value for disconnect.","type":"boolean"},"max_calls":{"default":1,"description":"Maximum permitted calls for this operation.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"method":{"description":"Value for method.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","pattern":"^\\\\/.*","type":"string"},"request_body":{"description":"Value for request body.","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"},"type":"array"},"machine":{"anyOf":[{"additionalProperties":false,"properties":{"initial_state":{"description":"Value for initial state.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Resource budgets that bound execution and retained output for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":9007199254740991,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":9007199254740991,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":9007199254740991,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":9007199254740991,"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":9007199254740991,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"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.","type":"string"},"headers":{"additionalProperties":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"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.","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":9007199254740991,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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_-]*$","type":"string"}},"required":["variable","value"],"type":"object"},"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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_-]*$","type":"string"}},"required":["variable","value"],"type":"object"},"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":9007199254740991,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","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":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"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":[{"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"},"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.","type":"string"},"delay_ms":{"default":0,"description":"Value for delay ms.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["data"],"type":"object"},"type":"array"}},"required":["messages"],"type":"object"},"type":"array"},"websocket_messages":{"default":[],"description":"Value for websocket messages.","items":{"type":"string"},"type":"array"}},"type":"object"},"settle_ms":{"default":100,"description":"Value for settle ms.","maximum":9007199254740991,"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":65535,"minimum":1,"type":"integer"},"rows":{"default":24,"description":"Value for rows.","maximum":65535,"minimum":1,"type":"integer"},"scrollback":{"default":1000,"description":"Value for scrollback.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"timeout_ms":{"default":30000,"description":"Value for timeout ms.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"working_directory":{"default":".","description":"Value for working directory.","type":"string"}},"required":["executable"],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"type":"array"},"files_before":{"items":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"type":"array"},"filesystem_checkpoints":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"effects":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"after":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"before":{"type":"null"},"path":{"type":"string"},"status":{"const":"created","type":"string"}},"required":["path","status","before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after":{"type":"null"},"before":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"path":{"type":"string"},"status":{"const":"deleted","type":"string"}},"required":["path","status","before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"before":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"path":{"type":"string"},"status":{"enum":["modified","unchanged"],"type":"string"}},"required":["path","status","before","after"],"type":"object"}]},"type":"array"},"files":{"items":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","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":{"oneOf":[{"additionalProperties":false,"properties":{"after":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"before":{"type":"null"},"path":{"type":"string"},"status":{"const":"created","type":"string"}},"required":["path","status","before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after":{"type":"null"},"before":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"path":{"type":"string"},"status":{"const":"deleted","type":"string"}},"required":["path","status","before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"before":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"path":{"type":"string"},"status":{"enum":["modified","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":{"type":"string"},"replacement":{"type":"string"}},"required":["pattern","replacement"],"type":"object"},"type":"array"},"pids":{"type":"boolean"},"ports":{"type":"boolean"},"time_bucket_ms":{"exclusiveMinimum":0,"maximum":9007199254740991,"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":[{"oneOf":[{"additionalProperties":false,"properties":{"active_state":{"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":{"type":"null"},"status":{"const":"running","type":"string"},"transitions":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"action_event_ids":{"items":{"minLength":1,"type":"string"},"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"type":"array"},"outcome":{"type":"null"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"minLength":1,"type":"string"},"state_before":{"minLength":1,"type":"string"},"transition_id":{"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["sequence","transition_id","state_before","trigger_event_ids","action_event_ids","action_types","state_after","outcome"],"type":"object"},{"additionalProperties":false,"properties":{"action_event_ids":{"items":{"minLength":1,"type":"string"},"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"type":"array"},"outcome":{"const":"passed","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"type":"null"},"state_before":{"minLength":1,"type":"string"},"transition_id":{"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["sequence","transition_id","state_before","trigger_event_ids","action_event_ids","action_types","state_after","outcome"],"type":"object"}]},"type":"array"}},"required":["status","outcome","active_state","controls","transitions"],"type":"object"},{"additionalProperties":false,"properties":{"active_state":{"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":{"enum":["passed","predicate_timeout","scenario_deadline","ambiguous_match","action_rejected","target_lost","capture_incomplete","cancelled","cleanup_failed"],"type":"string"},"status":{"const":"finished","type":"string"},"transitions":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"action_event_ids":{"items":{"minLength":1,"type":"string"},"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"type":"array"},"outcome":{"type":"null"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"minLength":1,"type":"string"},"state_before":{"minLength":1,"type":"string"},"transition_id":{"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["sequence","transition_id","state_before","trigger_event_ids","action_event_ids","action_types","state_after","outcome"],"type":"object"},{"additionalProperties":false,"properties":{"action_event_ids":{"items":{"minLength":1,"type":"string"},"type":"array"},"action_types":{"items":{"enum":["send_input","resize","close_stdin","send_signal","checkpoint"],"type":"string"},"type":"array"},"outcome":{"const":"passed","type":"string"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"type":"null"},"state_before":{"minLength":1,"type":"string"},"transition_id":{"minLength":1,"type":"string"},"trigger_event_ids":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["sequence","transition_id","state_before","trigger_event_ids","action_event_ids","action_types","state_after","outcome"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"type":"array"},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state_after":{"minLength":1,"type":"string"},"state_before":{"minLength":1,"type":"string"},"transition_id":{"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","environment"],"type":"string"}},"required":["scope","reason"],"type":"object"},"type":"array"},"settlement":{"oneOf":[{"additionalProperties":false,"properties":{"cleanup_outcome":{"const":"not_required","type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"quiesced","type":"string"}},"required":["state","elapsed_ms","cleanup_outcome"],"type":"object"},{"additionalProperties":false,"properties":{"cleanup_outcome":{"enum":["cleaned","failed"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"enum":["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":["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"],"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 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":{"authority":"controlled-replay","confidence":"observed","environment":{"architecture":"x86_64","id":"fixture-linux","isolation":"container","platform":"linux"},"evidence_id":"ev_9ec082070fb80aa3e6ab77f9c98c1874e507ae6ab00444513849e732151e11bb","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"cleanup":{"owned_process_group":"verified","temporary_root":"removed"},"event_journal":[],"exit":{"code":0,"reason":"exited","signal":null},"files_after":[],"files_before":[],"filesystem_checkpoints":[{"at_ms":0,"effects":[],"files":[],"name":"before","truncated":false},{"at_ms":50,"effects":[],"files":[],"name":"after_settlement","truncated":false}],"filesystem_effects":[],"frames":[],"interaction_events":[],"limitations":[],"manifest":{"architecture":"fixture","comparison_contract":{},"comparison_contract_sha256":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","completed_at":"2026-01-01T00:00:00.001Z","executable_sha256":"0000000000000000000000000000000000000000000000000000000000000000","full_scenario_sha256":"e9fb6dbb12060cb724e2c6360da0d406b8dcb13ed91769105f92efe312491fc7","normalization_sha256":"60a27b2d1ee5aa73bf2e5cb2deaed2e9cc548f961ad2e3772c981828b643cc43","platform":"fixture","provider_version":"3","pty_backend":"node-pty","rea_version":"1.1.0","replay_plan":{},"replay_plan_sha256":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","scenario":{"executable_sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"shim_plan":[],"shim_plan_sha256":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","started_at":"2026-01-01T00:00:00.000Z"},"normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"process_samples":[],"protocol_events":[],"reactive_run":null,"rendered_frames":[],"replay_transitions":[],"residual_unknowns":[],"settlement":{"cleanup_outcome":"not_required","elapsed_ms":50,"state":"quiesced"},"shim_events":[],"truncated":false},"operation":"capture_process_scenario","parameters":{"scenario":"reference"},"predicate_type":"rea.process-capture","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"subject":null},"right":{"authority":"controlled-replay","confidence":"observed","environment":{"architecture":"x86_64","id":"fixture-linux","isolation":"container","platform":"linux"},"evidence_id":"ev_a3dbab1b57f2c3ab72757e1226ba64f50f0578a89d6928c6528bf872415a47f2","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"cleanup":{"owned_process_group":"verified","temporary_root":"removed"},"event_journal":[],"exit":{"code":0,"reason":"exited","signal":null},"files_after":[],"files_before":[],"filesystem_checkpoints":[{"at_ms":0,"effects":[],"files":[],"name":"before","truncated":false},{"at_ms":50,"effects":[],"files":[],"name":"after_settlement","truncated":false}],"filesystem_effects":[],"frames":[],"interaction_events":[],"limitations":[],"manifest":{"architecture":"fixture","comparison_contract":{},"comparison_contract_sha256":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","completed_at":"2026-01-01T00:00:00.001Z","executable_sha256":"0000000000000000000000000000000000000000000000000000000000000000","full_scenario_sha256":"e9fb6dbb12060cb724e2c6360da0d406b8dcb13ed91769105f92efe312491fc7","normalization_sha256":"60a27b2d1ee5aa73bf2e5cb2deaed2e9cc548f961ad2e3772c981828b643cc43","platform":"fixture","provider_version":"3","pty_backend":"node-pty","rea_version":"1.1.0","replay_plan":{},"replay_plan_sha256":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","scenario":{"executable_sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"shim_plan":[],"shim_plan_sha256":"4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945","started_at":"2026-01-01T00:00:00.000Z"},"normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"process_samples":[],"protocol_events":[],"reactive_run":null,"rendered_frames":[],"replay_transitions":[],"residual_unknowns":[],"settlement":{"cleanup_outcome":"not_required","elapsed_ms":50,"state":"quiesced"},"shim_events":[],"truncated":false},"operation":"capture_process_scenario","parameters":{"scenario":"reconstruction"},"predicate_type":"rea.process-capture","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"subject":null}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"max_capture_age_ms":{"description":"Maximum permitted capture age ms for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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":9007199254740991,"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":9007199254740991,"minimum":0,"type":"integer"},"min":{"description":"Value for min.","maximum":9007199254740991,"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._-]*$","type":"string"},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"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"},"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._-]*$","type":"string"},"before":{"description":"The earlier or left-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"}},"required":["before","after"],"type":"object"},"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._-]*$","type":"string"},"event":{"description":"Value for event.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"}},"required":["event","anchor"],"type":"object"},"type":"array"},"prefix":{"default":[],"description":"Value for prefix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"type":"array"},"suffix":{"default":[],"description":"Value for suffix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"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._-]*$","type":"string"},"minItems":2,"type":"array"}},"required":["events"],"type":"object"},"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._-]*$","type":"string"},"trace":{"description":"Value for trace.","items":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},{"additionalProperties":false,"properties":{"unordered":{"description":"Value for unordered.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"minItems":2,"type":"array"}},"required":["unordered"],"type":"object"}]},"type":"array"}},"required":["id","trace"],"type":"object"},"minItems":1,"type":"array"}},"required":["kind","variants"],"type":"object"}]}},"required":["events","language"],"type":"object"}},"required":["left","right"],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"anyOf":[{"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":{"const":"pass","type":"string"}},"required":["satisfied_constraints","raw_trace","status","matched_variant"],"type":"object"},{"additionalProperties":false,"properties":{"matched_variant":{"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":["fail","unknown"],"type":"string"}},"required":["satisfied_constraints","raw_trace","status","matched_variant"],"type":"object"}]},"right":{"anyOf":[{"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":{"const":"pass","type":"string"}},"required":["satisfied_constraints","raw_trace","status","matched_variant"],"type":"object"},{"additionalProperties":false,"properties":{"matched_variant":{"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":["fail","unknown"],"type":"string"}},"required":["satisfied_constraints","raw_trace","status","matched_variant"],"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"],"type":"object"},"requiresSession":true,"title":"Compare Process Captures"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare complete artifact inventories by logical occurrence path, content identity, metadata, and graph relations. Pass the inventory Evidence nested in each inspect_artifact result as left and right. Every delta cites both inputs, and gaps yield truncated or unknown, never equivalence. Returns every change inline.","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":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_196e5dd37264f7b088ab8c0be326d22cac37e798bc89c72bcabc2ef9d74eed55","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"edges":[],"limitations":[],"manifest":{"edge_count":0,"graph_sha256":"8fa9468fe1a1a23c968cc1215eac19cce2510530cb8cbdd99b0b93bcd251c586","manifest_id":"agm_aada25a1123169497307a2f381969ca213532b63d2259e999bffe2aa50fe5227","node_count":1,"occurrence_count":1,"root_artifact_id":"art_2827b82d5d864b615b237ca45cf8a10fc5c14a1b73ba5bb8b358dddefc8e9f8c","root_format":"file","root_sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"nodes":[{"architecture":null,"artifact_id":"art_2827b82d5d864b615b237ca45cf8a10fc5c14a1b73ba5bb8b358dddefc8e9f8c","content_state":"materialized","executable":false,"format":"file","kind":"resource","limitations":[],"media_type":null,"sha256":"0000000000000000000000000000000000000000000000000000000000000000","size":1}],"occurrences":[{"artifact_id":"art_2827b82d5d864b615b237ca45cf8a10fc5c14a1b73ba5bb8b358dddefc8e9f8c","compressed_size":null,"declared_size":1,"encrypted":false,"entry_kind":"file","executable":false,"hash_status":"verified","limitations":[],"logical_path":".","occurrence_id":"occ_273bef4da5057c50b27edf034ffce68d5d9c0c5795778fc3ff41e4e6b3ef5586","parent_occurrence_id":null,"source_location":null}],"provenance":[]},"operation":"inventory_artifact","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-artifact","name":"REA artifact graph","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"file","local_path":"fixture-left","name":"fixture-left"}},"right":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_8c9ecce090f574469d379fb8bb173e65eff08071fa599b37547ed32dcd102a09","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"edges":[],"limitations":[],"manifest":{"edge_count":0,"graph_sha256":"6e02ceaea80d013e00e4c0c30621df60312f00e03dc338ec47f548671f6a7ec4","manifest_id":"agm_6fa9493e8b0d8164b3ca317323aeffc6be1f81e1e7a3cf4e668310093ba8ef73","node_count":1,"occurrence_count":1,"root_artifact_id":"art_96f554e44817506903722ba66b6b001897989fe181ef986478bc023e1fedf4b1","root_format":"file","root_sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"nodes":[{"architecture":null,"artifact_id":"art_96f554e44817506903722ba66b6b001897989fe181ef986478bc023e1fedf4b1","content_state":"materialized","executable":false,"format":"file","kind":"resource","limitations":[],"media_type":null,"sha256":"1111111111111111111111111111111111111111111111111111111111111111","size":1}],"occurrences":[{"artifact_id":"art_96f554e44817506903722ba66b6b001897989fe181ef986478bc023e1fedf4b1","compressed_size":null,"declared_size":1,"encrypted":false,"entry_kind":"file","executable":false,"hash_status":"verified","limitations":[],"logical_path":".","occurrence_id":"occ_4257a159555da426a3dd9e420ba59795ef3d87d0b1fd93e5cc7d969539519364","parent_occurrence_id":null,"source_location":null}],"provenance":[]},"operation":"inventory_artifact","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-artifact","name":"REA artifact graph","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"file","local_path":"fixture-right","name":"fixture-right"}}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["left","right"],"type":"object"},"kind":"session","name":"compare_artifacts","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"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"},"minItems":1,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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":{"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"},"type":"array"},"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"],"type":"object"},"requiresSession":true,"title":"Compare Artifacts"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two explicit sets of analyze_function Evidence 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":{"$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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":[],"basic_blocks":[{"end":"0x1001","start":"0x1000","successors":[]}],"callees":[],"callers":[],"comments":[],"incoming_references":[],"outgoing_references":[],"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":"return 0;","referenced_names":[],"referenced_strings":[]},"operation":"analyze_function","parameters":{"procedure":"main"},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"mach-o","local_path":"/tmp/function-0","name":"function-0"}},"right":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":[],"basic_blocks":[{"end":"0x1001","start":"0x1000","successors":[]}],"callees":[],"callers":[],"comments":[],"incoming_references":[],"outgoing_references":[],"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":"return 1;","referenced_names":[],"referenced_strings":[]},"operation":"analyze_function","parameters":{"procedure":"main"},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"mach-o","local_path":"/tmp/function-1","name":"function-1"}}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["left","right"],"type":"object"},"kind":"session","name":"compare_functions","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"conclusion_kind":{"const":"derived_relationship","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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"const":"unchanged","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","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"},{"additionalProperties":false,"properties":{"conclusion_kind":{"enum":["derived_relationship","contradiction"],"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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"const":"changed","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","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"},{"additionalProperties":false,"properties":{"conclusion_kind":{"const":"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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"type":"null"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"type":"null"},"status":{"enum":["truncated","unknown"],"type":"string"},"text_delta":{"type":"null"}},"required":["dimension","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"}]},"type":"array"},"dimensions":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"conclusion_kind":{"const":"derived_relationship","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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"const":"unchanged","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","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"},{"additionalProperties":false,"properties":{"conclusion_kind":{"enum":["derived_relationship","contradiction"],"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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"const":"changed","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","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"},{"additionalProperties":false,"properties":{"conclusion_kind":{"const":"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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"type":"null"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"type":"null"},"status":{"enum":["truncated","unknown"],"type":"string"},"text_delta":{"type":"null"}},"required":["dimension","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"}]},"maxItems":8,"minItems":8,"type":"array"},"function_match":{"anyOf":[{"additionalProperties":false,"properties":{"left_name":{"type":"string"},"method":{"const":"symbol","type":"string"},"right_name":{"type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","method","left_name","right_name"],"type":"object"},{"additionalProperties":false,"properties":{"left_name":{"type":"string"},"method":{"const":"explicit","type":"string"},"right_name":{"type":"string"},"status":{"enum":["mismatched","ambiguous"],"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","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"],"type":"object"},"requiresSession":true,"title":"Compare Functions"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two canonical Evidence 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 returns every change inline.","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":"/tmp/left-evidence.json","record_pairs":[],"right_bundle_path":"/tmp/right-evidence.json"}],"properties":{"left_bundle_path":{"description":"Local filesystem path for left bundle.","minLength":1,"type":"string"},"record_pairs":{"default":[],"description":"Value for record pairs.","items":{"properties":{"left_evidence_id":{"description":"Exact Evidence identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_evidence_id":{"description":"Exact Evidence identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"type":"array"},"right_bundle_path":{"description":"Local filesystem path for right bundle.","minLength":1,"type":"string"}},"required":["left_bundle_path","right_bundle_path"],"type":"object"},"kind":"session","name":"compare_bundles","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"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"},"type":"array"},"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"],"type":"object"},"requiresSession":true,"title":"Compare Bundles"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Aggregate validated process and artifact comparison Evidence. Runtime observations remain distinct from static behavior candidates; missing or incomplete comparisons produce unresolved findings, never causal claims. Returns every finding inline.","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_cc8049f629a9318e985bee4a547c0ec6646e9d3c2cbbabf4ac9b3758bc3ede86","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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}}],"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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":"derived_relationship","dimension":"assembly","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"left_count":0,"left_digest":"12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126","limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":"12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126","status":"unchanged","text_delta":{"added_lines":0,"hunks":0,"removed_lines":0}},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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":"changed","summary":{"changed":1,"truncated":0,"unchanged":7,"unknown":0}},"operation":"compare_functions","parameters":{"left_evidence_id":"ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","right_evidence_id":"ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"},"predicate_type":"rea.function-comparison","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"subject":null}]}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"type":"array"}},"type":"object"},"kind":"session","name":"find_changed_behavior","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"},"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"},"type":"array"}},"required":["items"],"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"],"type":"object"},"requiresSession":true,"title":"Find Changed Behavior"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Build every shortest direct-callee path inline from complete analyze_function Evidence records using exact canonical addresses. Missing dossiers and provider mixing 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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":[],"basic_blocks":[{"end":"0x1001","start":"0x1000","successors":[]}],"callees":[],"callers":[],"comments":[],"incoming_references":[],"outgoing_references":[],"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":"return 0;","referenced_names":[],"referenced_strings":[]},"operation":"analyze_function","parameters":{"procedure":"main"},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"mach-o","local_path":"/tmp/function-0","name":"function-0"}}],"goal":{"address":"0x1000"},"start":{"address":"0x1000"}}],"properties":{"functions":{"description":"Value for functions.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"minItems":1,"type":"array"},"goal":{"additionalProperties":false,"description":"Value for goal.","properties":{"address":{"description":"Value for address.","pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9a-fA-F]{2})+:)?0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"start":{"additionalProperties":false,"description":"Value for start.","properties":{"address":{"description":"Value for address.","pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9a-fA-F]{2})+:)?0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"}},"required":["functions","start","goal"],"type":"object"},"kind":"session","name":"build_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"items":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"source":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"target":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"}},"required":["source","target","evidence_links"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","evidence_links"],"type":"object"},"minItems":1,"type":"array"}},"required":["hops","nodes","edges","evidence_links"],"type":"object"},"minItems":1,"type":"array"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"}},"required":["exhaustive"],"type":"object"},"shortest_hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"start":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"const":"found","type":"string"}},"required":["start","goal","explored","evidence_links","limitations","status","shortest_hops","search_scope","paths"],"type":"object"},{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":true,"type":"boolean"}},"required":["exhaustive"],"type":"object"},"shortest_hops":{"type":"null"},"start":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"const":"not_found","type":"string"}},"required":["start","goal","explored","evidence_links","limitations","status","shortest_hops","search_scope","paths"],"type":"object"},{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":false,"type":"boolean"}},"required":["exhaustive"],"type":"object"},"shortest_hops":{"type":"null"},"start":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"const":"unknown","type":"string"}},"required":["start","goal","explored","evidence_links","limitations","status","shortest_hops","search_scope","paths"],"type":"object"}]}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Build Call Path"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate every explicit caller-declared hypothesis 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. Returns all correlations and their complete Evidence closure inline.","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":[{"mappings":[{"hypothesis":{"expected_pattern":"static_only","statement":"Static implementation changed without terminal change."},"runtime":{"comparison_evidence_id":"ev_d500bc6f4b82dd9fa7c7d6e970c95bfa980a13ce3c031932bfc0bc8a8f042060","dimension":"terminal"},"side_alignment":"left_to_left","static":{"comparison_evidence_id":"ev_cc8049f629a9318e985bee4a547c0ec6646e9d3c2cbbabf4ac9b3758bc3ede86","selector":{"dimension":"pseudocode","kind":"function"}}}],"runtime_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_d500bc6f4b82dd9fa7c7d6e970c95bfa980a13ce3c031932bfc0bc8a8f042060","evidence_links":["ev_9ec082070fb80aa3e6ab77f9c98c1874e507ae6ab00444513849e732151e11bb","ev_a3dbab1b57f2c3ab72757e1226ba64f50f0578a89d6928c6528bf872415a47f2"],"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_9ec082070fb80aa3e6ab77f9c98c1874e507ae6ab00444513849e732151e11bb","left_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"right_evidence_id":"ev_a3dbab1b57f2c3ab72757e1226ba64f50f0578a89d6928c6528bf872415a47f2","right_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10}},"predicate_type":"rea.process-comparison","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"subject":null}],"static_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_cc8049f629a9318e985bee4a547c0ec6646e9d3c2cbbabf4ac9b3758bc3ede86","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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}}],"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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":"derived_relationship","dimension":"assembly","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"left_count":0,"left_digest":"12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126","limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":"12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126","status":"unchanged","text_delta":{"added_lines":0,"hunks":0,"removed_lines":0}},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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":"changed","summary":{"changed":1,"truncated":0,"unchanged":7,"unknown":0}},"operation":"compare_functions","parameters":{"left_evidence_id":"ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","right_evidence_id":"ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"},"predicate_type":"rea.function-comparison","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"subject":null}]}],"properties":{"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.","minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"runtime":{"additionalProperties":false,"description":"Value for runtime.","properties":{"comparison_evidence_id":{"description":"Exact Evidence 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 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.","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"},"minItems":1,"type":"array"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"minItems":1,"type":"array"}},"required":["static_comparisons","runtime_comparisons","mappings"],"type":"object"},"kind":"session","name":"correlate_static_and_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"minItems":2,"type":"array"},"hypothesis":{"additionalProperties":false,"properties":{"expected_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"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":{"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"},"type":"array"}},"required":["items"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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"],"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":[{"specification":{"claims":[{"claim_id":"terminal-output","comparison_evidence_id":"ev_d500bc6f4b82dd9fa7c7d6e970c95bfa980a13ce3c031932bfc0bc8a8f042060","dimension":"terminal","kind":"behavioral","title":"Terminal output remains equivalent"}],"name":"Terminal compatibility"}}],"properties":{"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._-]*$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence 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.","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._-]*$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence 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.","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._-]*$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence 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.","minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"}]},"minItems":1,"type":"array"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","claims"],"type":"object"}},"required":["specification"],"type":"object"},"kind":"session","name":"verify_reconstruction","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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._-]*$","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"},"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"},"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"},"minItems":1,"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"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"},"type":"array"}},"required":["items"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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._-]*$","type":"string"},"minItems":1,"type":"array"},"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"type":"array"}},"required":["operation","rationale","claim_ids","unknown_ids"],"type":"object"},"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":9007199254740991,"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"],"type":"object"},"requiresSession":true,"title":"Verify Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"List every current residual-unknown head in deterministic ID order, with optional exact status, severity, and domain filters. Results are complete and inline. 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":[{}],"properties":{"domain":{"description":"Value for domain.","minLength":1,"type":"string"},"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":{"items":{"items":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","total"],"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. 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":[{"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":{"contradicting_evidence_ids":{"default":[],"description":"Ordered Evidence identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"description":"Value for domain.","minLength":1,"type":"string"},"question":{"description":"Concrete unresolved question to retain for later investigation.","minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"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":[{"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 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"}},"required":["question","severity","domain","required_authority","required_confidence","required_environment","recommended_probes","relationships"],"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"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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 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":[{"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":{"contradicting_evidence_ids":{"description":"Ordered Evidence identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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.","minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"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":[{"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"},"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","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"},"type":"array"},"rationale":{"description":"Value for rationale.","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 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id","expected_revision","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"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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.","type":"string"},"connection":{"const":"not_applicable","description":"Value for connection.","type":"string"},"headers":{"additionalProperties":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","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","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.","type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"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.","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.","type":"string"},"connection":{"description":"Value for connection.","enum":["initial","reconnect"],"type":"string"},"headers":{"additionalProperties":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"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.","pattern":"^\\\\/.*","type":"string"},"protocol":{"const":"websocket_message","description":"Value for protocol.","type":"string"}},"required":["protocol","connection","method","at_ms","path","headers","body"],"type":"object"}]},"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_-]*$","type":"string"},"limits":{"additionalProperties":false,"default":{"bytes":1000000,"connections":100,"duration_ms":30000,"messages":10000},"description":"Resource budgets that bound execution and retained output for this operation.","properties":{"bytes":{"default":1000000,"description":"Value for bytes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"connections":{"default":100,"description":"Value for connections.","maximum":9007199254740991,"minimum":1,"type":"integer"},"duration_ms":{"default":30000,"description":"Value for duration ms.","maximum":9007199254740991,"minimum":1,"type":"integer"},"messages":{"default":10000,"description":"Value for messages.","maximum":9007199254740991,"minimum":1,"type":"integer"}},"type":"object"},"max_transitions":{"description":"Maximum permitted transitions for this operation.","maximum":9007199254740991,"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":9007199254740991,"minimum":1,"type":"integer"},"name":{"description":"Exact name used by this operation.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","type":"string"},"terminal":{"default":false,"description":"Value for terminal.","type":"boolean"}},"required":["name"],"type":"object"},"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.","type":"string"},"headers":{"additionalProperties":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"default":{},"description":"Value for headers.","propertyNames":{"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.","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":9007199254740991,"minimum":0,"type":"integer"},"type":{"const":"delay","description":"Value for type.","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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_-]*$","type":"string"}},"required":["variable","value"],"type":"object"},"type":"array"},"from":{"description":"Value for from.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"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_-]*$","type":"string"}},"required":["variable","value"],"type":"object"},"type":"array"},"id":{"description":"Value for id.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","type":"string"},"max_uses":{"description":"Maximum permitted uses for this operation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"priority":{"default":100,"description":"Value for priority.","maximum":9007199254740991,"minimum":0,"type":"integer"},"to":{"description":"Value for to.","pattern":"^[A-Za-z][A-Za-z0-9_-]*$","type":"string"},"trigger":{"description":"Value for trigger.","oneOf":[{"additionalProperties":false,"properties":{"body":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Value for body."},"headers":{"additionalProperties":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"minLength":1,"pattern":"^[!#$%&\'*+.^_`|~0-9A-Za-z-]+$","type":"string"},"type":"object"},"method":{"description":"Value for method.","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":{"pattern":"^[\\\\t\\\\x20-\\\\x7e\\\\x80-\\\\xff]*$","type":"string"},"description":"Value for headers.","propertyNames":{"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":[{"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"},"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"},"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"},"terminal":{"type":"boolean"},"transition_actions":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"body":{"type":"string"},"headers":{"additionalProperties":{"type":"string"},"propertyNames":{"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":{"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":9007199254740991,"minimum":0,"type":"integer"},"type":{"const":"delay","type":"string"}},"required":["type","duration_ms"],"type":"object"}]},"type":"array"},"transition_id":{"pattern":"^[A-Za-z][A-Za-z0-9_-]{0,63}$","type":"string"}},"required":["transition_id","actions"],"type":"object"},"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"},"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"},"type":"array"}},"required":["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":true},"description":"Return every Evidence record and residual unknown currently retained by this session as one inline bundle for direct inspection or follow-up workflows.","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":[{}],"properties":{},"type":"object"},"kind":"session","name":"get_evidence_bundle","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":{"artifacts":{"items":{"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","dos-mz","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"},"captures":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"items":{"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":"array"},"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"},"type":"array"},"records":{"items":{"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"}},"required":["provider","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"}]},"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","dos-mz","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":["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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"items":{"additionalProperties":false,"properties":{"authority":{"const":"controlled-replay","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"items":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Get Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the selected document, current address, and containing/current procedure in one provider-neutral result. The result reflects sequential provider observations, not an atomic cursor snapshot; a cursor outside any procedure returns procedure: null.","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; use xrefs, assembly, or pseudocode for those deeper views.","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"}]}'; + '{"auxiliaryProviders":[{"capabilities":[{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"inventory_artifact","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},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"inspect_artifact","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},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"extract_artifact","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"decode_interface_builder","provider":{"id":"rea-artifact-graph","name":"REA safe artifact graph provider","version":"1"},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"inspect_keyed_archive","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},"limitations":["DMG child inventory automatically uses a read-only native macOS mount; PKG remains root-hash-only.","ASAR files discovered in filesystem-backed inventories are expanded without bulk extraction; other nested containers remain recorded only."],"operation":"inspect_asset_catalog","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":true,"mutatesArtifact":false,"requiresRoot":false},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"observe_native_ui","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":true,"mayAccessNetwork":true,"mayShowUi":true,"mayWriteFilesystem":true,"mutatesArtifact":false,"requiresRoot":false},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"capture_native_ui_scenario","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"inspect_macho","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"inspect_signature","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"inspect_plist","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"list_architectures","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},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"demangle_swift","provider":{"id":"native-macos","name":"macOS native inspection utilities","version":null},"reason":null},{"available":true,"effects":{"changesPermissions":false,"launchesProcess":false,"mayAccessNetwork":false,"mayShowUi":false,"mayWriteFilesystem":false,"mutatesArtifact":false,"requiresRoot":false},"limitations":["Availability and textual formats depend on the installed macOS/Xcode toolchain."],"operation":"inspect_native_dispatch_metadata","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},"limitations":["This capability inventories PE/CLI identity only; inspect_managed_members admits metadata members, signatures, and CIL anchors.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"operation":"inspect_managed_artifact","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},"limitations":["This capability decodes PE/CLI metadata members, signatures, and file-backed method bodies; decompiled C# reconstruction and cross-build member comparison are separate operations.","It never loads the target assembly, resolves dependencies through a CLR, decompiles C#, or executes target code."],"operation":"inspect_managed_members","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},"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."],"operation":"inspect_managed_native_boundaries","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":"inspect_native_data_type","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one recovered type by exact database category path or defined typed data address. Returns observed size, alignment, packing, fields, bitfields, enum values, and child type identities; source-level authority and flexible-tail semantics remain unknown unless substantiated.","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":[{"type":"/MyStruct"}],"properties":{"address":{"description":"Value for address.","minLength":1,"type":"string"},"document":{"description":"Exact provider document or program identity.","type":"string"},"type":{"description":"Value for type.","minLength":1,"type":"string"}},"type":"object"},"kind":"official-proxy","name":"inspect_native_data_type","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"alignment_bytes":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"array_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"array_stride_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"fields":{"items":{"additionalProperties":false,"properties":{"bit_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"bit_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"flexible_tail":{"const":"unknown","type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"offset_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["observed","unsupported"],"type":"string"},"type_id":{"type":"string"}},"required":["ordinal","name","offset_bytes","size_bytes","type_id","bit_size","bit_offset","status","flexible_tail"],"type":"object"},"type":"array"},"id":{"anyOf":[{"type":"string"},{"type":"null"}]},"kind":{"enum":["struct","union","enum","pointer","array","typedef","scalar","unsupported","unavailable"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"members":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"value":{"type":"string"}},"required":["name","value"],"type":"object"},"type":"array"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"packing_enabled":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"referenced_type":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"source":{"const":"analysis-database","type":"string"},"source_archive":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["available","unavailable"],"type":"string"},"total_fields":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["status","reason","id","name","kind","source","source_archive","address","size_bytes","alignment_bytes","packing_enabled","referenced_type","array_count","array_stride_bytes","fields","members","total_fields","truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Native Data Type"},{"analysisOperation":"inspect_native_instruction","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one exact instruction address: decoded bytes, mnemonic, ordered operand tokens, flow and typed references. Memory addressing decomposition is unavailable when the provider supplies only tokens. Data, interior instruction addresses and undecodable bytes are distinct outcomes.","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.","type":"string"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"inspect_native_instruction","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"address":{"type":"string"},"architecture":{"type":"string"},"bytes":{"anyOf":[{"type":"string"},{"type":"null"}]},"flow":{"additionalProperties":false,"properties":{"computed":{"type":"boolean"},"conditional":{"type":"boolean"},"direct_destinations":{"items":{"type":"string"},"type":"array"},"kind":{"enum":["call","jump","return","fallthrough","terminal","unavailable"],"type":"string"}},"required":["kind","conditional","computed","direct_destinations"],"type":"object"},"length":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"limitations":{"items":{"type":"string"},"type":"array"},"mnemonic":{"anyOf":[{"type":"string"},{"type":"null"}]},"mode":{"type":"string"},"operands":{"items":{"additionalProperties":false,"properties":{"components":{"items":{"additionalProperties":false,"properties":{"bit_width":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"kind":{"enum":["register","immediate","address","unknown"],"type":"string"},"text":{"type":"string"},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","text","value","bit_width"],"type":"object"},"type":"array"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"memory_addressing":{"const":"unavailable","type":"string"},"provider_type":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"raw":{"type":"string"}},"required":["index","raw","provider_type","components","memory_addressing"],"type":"object"},"type":"array"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]},"raw_disassembly":{"anyOf":[{"type":"string"},{"type":"null"}]},"references":{"items":{"additionalProperties":false,"properties":{"call":{"type":"boolean"},"computed":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"target_address":{"type":"string"},"type":{"type":"string"}},"required":["target_address","type","call","jump","indirect","computed","operand_index"],"type":"object"},"type":"array"},"status":{"enum":["decoded","not-instruction-boundary","data","undecodable","outside-memory"],"type":"string"}},"required":["address","status","procedure","architecture","mode","bytes","length","mnemonic","raw_disassembly","operands","flow","references","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Native Instruction"},{"analysisOperation":"resolve_native_call_targets","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Resolve one explicit static call site using typed provider call references. Preserves ambiguous targets as candidates and unresolved computed calls as unknown; does not execute code or traverse a call graph.","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.","type":"string"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"resolve_native_call_targets","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"call_site":{"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"mechanism":{"enum":["direct","computed","indirect","unavailable"],"type":"string"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["direct","resolved-indirect","ambiguous","unresolved","not-call","unavailable"],"type":"string"},"targets":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"basis":{"const":"provider-reference","type":"string"},"procedure":{"anyOf":[{"type":"string"},{"type":"null"}]},"references":{"items":{"additionalProperties":false,"properties":{"call":{"type":"boolean"},"computed":{"type":"boolean"},"indirect":{"type":"boolean"},"jump":{"type":"boolean"},"operand_index":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"target_address":{"type":"string"},"type":{"type":"string"}},"required":["target_address","type","call","jump","indirect","computed","operand_index"],"type":"object"},"type":"array"},"status":{"enum":["direct","resolved-indirect","candidate"],"type":"string"}},"required":["address","procedure","status","basis","references"],"type":"object"},"type":"array"}},"required":["call_site","procedure","status","mechanism","targets","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Resolve Native Call Targets"},{"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"}},"type":"object"},"kind":"official-proxy","name":"address_name","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"comment","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"current_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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. This uses GUI cursor state and is not a procedure-name 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"}},"type":"object"},"kind":"official-proxy","name":"current_procedure","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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.","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":{},"type":"object"},"kind":"official-proxy","name":"current_document","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"goto_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"inline_comment","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"list_bookmarks","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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":{},"type":"object"},"kind":"official-proxy","name":"list_documents","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Documents"},{"analysisOperation":"list_names","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every analyzed memory and external symbol as address/value pairs. Provider metadata distinguishes Ghidra primary, dynamic, external, type, and source facts when available.","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"}},"type":"object"},"kind":"official-proxy","name":"list_names","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"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"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Names"},{"analysisOperation":"list_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every analyzed procedure as address/value pairs after provider analysis. Ghidra metadata distinguishes thunks and external functions; 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":[{}],"properties":{"document":{"description":"The document name","type":"string"}},"type":"object"},"kind":"official-proxy","name":"list_procedures","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"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"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"list_segments","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"type":"object"},"requiresSession":false,"title":"List Segments"},{"analysisOperation":"list_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"List every provider-defined string, or filter to one address, as address/value pairs. Ghidra also reports encoding, terminator status, and byte length.","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"}},"type":"object"},"kind":"official-proxy","name":"list_strings","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"string":{"additionalProperties":false,"properties":{"byte_length":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"encoding":{"minLength":1,"type":"string"},"termination":{"enum":["missing","present_or_not_required"],"type":"string"}},"required":["encoding","termination","byte_length"],"type":"object"},"value":{"type":"string"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"next_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"type":"object"},"kind":"official-proxy","name":"prev_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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.","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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_address","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_assembly","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callees","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence"],"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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_callers","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Procedure Callers"},{"analysisOperation":"procedure_info","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return provider metadata for one procedure identified by symbol or address: entrypoint, signature, locals, size, block count, and complete inclusive body ranges when observed. Body byte count and enclosing span remain distinct; unavailable extent is explicit.","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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_info","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"basicblock_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Procedure Info"},{"analysisOperation":"read_function_instructions","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return every raw instruction for one analyzed procedure. Instruction text is provider-specific.","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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"read_function_instructions","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"instructions":{"items":{"type":"string"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"}},"required":["procedure","instructions","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Read Function Instructions"},{"analysisOperation":"read_bytes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Read 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":9007199254740991,"minimum":1,"type":"integer"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"read_bytes","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":9007199254740991,"minimum":1,"type":"integer"},"returned_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["address","requested_bytes","returned_bytes","bytes_hex","complete"],"type":"object"}},"required":["result","evidence_id","evidence"],"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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"address_to_file_offset","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"type":"object"},"requiresSession":false,"title":"Address To File Offset"},{"analysisOperation":"procedure_references","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return every raw incoming or outgoing reference edge 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","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"},"procedure":{"description":"The procedure name or address","type":"string"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_references","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"direction":{"enum":["incoming","outgoing"],"type":"string"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},"reference_kinds_available":{"type":"boolean"},"references":{"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"unresolved_calls":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"reason":{"type":"string"}},"required":["address","reason"],"type":"object"},"type":"array"}},"required":["procedure","direction","unresolved_calls","references"],"type":"object"}},"required":["result","evidence_id","evidence"],"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"}},"required":["procedure"],"type":"object"},"kind":"official-proxy","name":"procedure_pseudo_code","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["result","evidence_id","evidence"],"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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"resolve_containing_procedure","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"oneOf":[{"additionalProperties":false,"properties":{"found":{"const":true,"type":"boolean"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"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"],"type":"object"},"requiresSession":false,"title":"Resolve Containing Procedure"},{"analysisOperation":"search_procedures","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search every analyzed procedure name using literal matching by default or regex when requested. Results are deterministic and complete.","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,"mode":"literal","pattern":"main"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"pattern":{"description":"The literal text or regex pattern to search for","minLength":1,"type":"string"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_procedures","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Search Procedures"},{"analysisOperation":"search_strings","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Search every analyzed string using literal matching by default or regex when requested. Results are deterministic and complete.","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,"mode":"literal","pattern":"authorization failed"}],"properties":{"case_sensitive":{"default":false,"description":"Whether to match case","type":"boolean"},"document":{"description":"The document name","type":"string"},"mode":{"default":"literal","description":"Operation mode that selects the requested behavior.","enum":["literal","regex"],"type":"string"},"pattern":{"description":"The literal text or regex pattern to search for","minLength":1,"type":"string"}},"required":["pattern"],"type":"object"},"kind":"official-proxy","name":"search_strings","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"value":{"type":"string"}},"required":["address","value"],"type":"object"},"type":"array"}},"required":["result","evidence_id","evidence"],"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.","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"}},"required":["address","name"],"type":"object"},"kind":"official-proxy","name":"set_address_name","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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 multiple addresses in one call and return per-address success booleans. This mutates analysis metadata; 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"}},"required":["names"],"type":"object"},"kind":"official-proxy","name":"set_addresses_names","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":{"type":"boolean"},"propertyNames":{"type":"string"},"type":"object"}},"required":["result","evidence_id","evidence"],"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 and report success. This mutates navigation metadata; bookmarks are analyst-authored navigation aids, not 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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"set_bookmark","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_comment","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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; list_documents can supply names when needed, while explicit document inputs keep calls reproducible.","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"}},"required":["document"],"type":"object"},"kind":"official-proxy","name":"set_current_document","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"string"}},"required":["result","evidence_id","evidence"],"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.","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"}},"required":["address","comment"],"type":"object"},"kind":"official-proxy","name":"set_inline_comment","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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"}},"required":["address"],"type":"object"},"kind":"official-proxy","name":"unset_bookmark","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"type":"boolean"}},"required":["result","evidence_id","evidence"],"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. Hopper may default to its current cursor; headless providers such as Ghidra require an explicit address. 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"}},"type":"object"},"kind":"official-proxy","name":"xrefs","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"items":{"type":"string"},"type":"array"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Xrefs"},{"analysisOperation":"inspect_native_dispatch_metadata","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect the bound provider\'s name inventory for Objective-C class/method symbols and Swift mangled symbols, returning at most max_records decoded names. Includes target SHA-256 when available, provider identity/version, analysis-profile digest, facet coverage, and per-record Evidence. This is symbol-level evidence, not runtime metadata: ivar layouts, protocol conformances, witness/class tables, and relative pointers are explicitly marked unsupported unless a provider supplies those decoders. The provider controls how its name inventory is acquired.","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":[{"max_records":5000}],"properties":{"max_records":{"default":5000,"description":"Maximum permitted records for this operation.","maximum":20000,"minimum":1,"type":"integer"}},"type":"object"},"kind":"enhanced","name":"inspect_native_dispatch_metadata","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"analysis_profile_digest":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"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"},"result":{"additionalProperties":false,"properties":{"coverage":{"default":[],"items":{"additionalProperties":false,"properties":{"decoded":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"examined":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"facet":{"minLength":1,"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["complete","partial","unsupported","not_requested"],"type":"string"}},"required":["facet","status","reason","examined","decoded"],"type":"object"},"type":"array"},"db_save_result":{"anyOf":[{"additionalProperties":false,"properties":{"database_path":{"anyOf":[{"type":"string"},{"type":"null"}]},"error":{"anyOf":[{"type":"string"},{"type":"null"}]},"operation":{"enum":["save","readback","open_database","close_database","export","import"],"type":"string"},"preserved_bookmarks":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"preserved_comments":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"preserved_names":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"succeeded":{"type":"boolean"}},"required":["operation","succeeded","preserved_names","preserved_comments","preserved_bookmarks","database_path","error"],"type":"object"},{"type":"null"}]},"objc_classes":{"default":[],"items":{"additionalProperties":false,"properties":{"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"type":"string"},"artifact_sha256":{"type":"string"},"description":{"type":"string"},"kind":{"const":"binary_metadata","type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"instance_size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"is_meta_class":{"default":false,"type":"boolean"},"is_root_class":{"default":false,"type":"boolean"},"ivar_count":{"default":0,"maximum":9007199254740991,"minimum":0,"type":"integer"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"metaclass_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"methods":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"},"name":{"minLength":1,"type":"string"},"properties":{"default":[],"items":{"additionalProperties":false,"properties":{"attributes":{"default":[],"items":{"additionalProperties":false,"properties":{"is_atomic":{"default":false,"type":"boolean"},"is_copy":{"default":false,"type":"boolean"},"is_strong":{"default":false,"type":"boolean"},"is_weak":{"default":false,"type":"boolean"},"name":{"minLength":1,"type":"string"},"value":{"type":"string"}},"required":["name","value","is_weak","is_atomic","is_copy","is_strong"],"type":"object"},"type":"array"},"getter":{"anyOf":[{"type":"string"},{"type":"null"}]},"is_readonly":{"default":false,"type":"boolean"},"name":{"minLength":1,"type":"string"},"setter":{"anyOf":[{"type":"string"},{"type":"null"}]},"type_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","type_encoding","attributes","is_readonly","getter","setter"],"type":"object"},"type":"array"},"protocols":{"default":[],"items":{"type":"string"},"type":"array"},"super_class":{"anyOf":[{"type":"string"},{"type":"null"}]},"superclass_address":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","super_class","is_meta_class","is_root_class","methods","properties","protocols","ivar_count","instance_size"],"type":"object"},"type":"array"},"objc_dispatch_implementations":{"default":[],"items":{"additionalProperties":false,"properties":{"class_name":{"minLength":1,"type":"string"},"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"implementation_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"method_type":{"enum":["instance","class"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["class_name","selector","method_type","implementation_address","location","decode","evidence"],"type":"object"},"type":"array"},"objc_ivars":{"default":[],"items":{"additionalProperties":false,"properties":{"alignment":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}],"default":null},"class_name":{"minLength":1,"type":"string"},"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"name":{"minLength":1,"type":"string"},"offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"default":null},"type_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["class_name","name","type_encoding","offset","size","alignment","location","decode","evidence"],"type":"object"},"type":"array"},"objc_protocol_records":{"default":[],"items":{"additionalProperties":false,"properties":{"adopted_protocols":{"items":{"type":"string"},"type":"array"},"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"methods":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"},"name":{"type":"string"},"optional_methods":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"}},"required":["name","adopted_protocols","methods","optional_methods","location","decode","evidence"],"type":"object"},"type":"array"},"objc_protocols":{"default":[],"items":{"additionalProperties":false,"properties":{"methods":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"},"name":{"minLength":1,"type":"string"},"optional_methods":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},{"type":"null"}]},"is_optional":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"method_type":{"enum":["instance","class","ivar_getter","ivar_setter"],"type":"string"},"selector":{"minLength":1,"type":"string"}},"required":["selector","method_type","address","is_required","is_optional"],"type":"object"},"type":"array"},"properties":{"default":[],"items":{"additionalProperties":false,"properties":{"attributes":{"default":[],"items":{"additionalProperties":false,"properties":{"is_atomic":{"default":false,"type":"boolean"},"is_copy":{"default":false,"type":"boolean"},"is_strong":{"default":false,"type":"boolean"},"is_weak":{"default":false,"type":"boolean"},"name":{"minLength":1,"type":"string"},"value":{"type":"string"}},"required":["name","value","is_weak","is_atomic","is_copy","is_strong"],"type":"object"},"type":"array"},"getter":{"anyOf":[{"type":"string"},{"type":"null"}]},"is_readonly":{"default":false,"type":"boolean"},"name":{"minLength":1,"type":"string"},"setter":{"anyOf":[{"type":"string"},{"type":"null"}]},"type_encoding":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["name","type_encoding","attributes","is_readonly","getter","setter"],"type":"object"},"type":"array"}},"required":["name","methods","optional_methods","properties"],"type":"object"},"type":"array"},"relative_pointers":{"default":[],"items":{"additionalProperties":false,"properties":{"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"displacement":{"maximum":9007199254740991,"minimum":-9007199254740991,"type":"integer"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"field":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"indirect":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"indirectable":{"type":"boolean"},"target":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["field","target","displacement","indirectable","indirect","decode","evidence"],"type":"object"},"type":"array"},"swift_conformances":{"default":[],"items":{"additionalProperties":false,"properties":{"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"module":{"anyOf":[{"type":"string"},{"type":"null"}]},"protocol_name":{"minLength":1,"type":"string"},"type_name":{"minLength":1,"type":"string"},"witness_table":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["type_name","protocol_name","module","witness_table","location","decode","evidence"],"type":"object"},"type":"array"},"swift_decls":{"default":[],"items":{"additionalProperties":false,"properties":{"access_level":{"default":"internal","enum":["private","fileprivate","internal","public","open"],"type":"string"},"is_convenience_init":{"default":false,"type":"boolean"},"is_final":{"default":false,"type":"boolean"},"is_override":{"default":false,"type":"boolean"},"is_required":{"default":false,"type":"boolean"},"kind":{"enum":["class","struct","enum","protocol","extension","actor","global_var","global_func"],"type":"string"},"module":{"anyOf":[{"type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"protocols":{"default":[],"items":{"type":"string"},"type":"array"},"super_class":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["kind","name","module","access_level","super_class","protocols","is_final","is_required","is_convenience_init","is_override"],"type":"object"},"type":"array"},"swift_dispatch_slots":{"default":[],"items":{"additionalProperties":false,"properties":{"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"implementation":{"anyOf":[{"type":"string"},{"type":"null"}]},"implementation_address":{"anyOf":[{"type":"string"},{"type":"null"}]},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},"owner":{"minLength":1,"type":"string"},"requirement":{"anyOf":[{"type":"string"},{"type":"null"}]},"slot_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"table_kind":{"enum":["witness_table","class_vtable"],"type":"string"},"thunk_address":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["owner","table_kind","slot_index","requirement","implementation","implementation_address","thunk_address","location","decode","evidence"],"type":"object"},"type":"array"},"swift_symbols":{"default":[],"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"decode":{"additionalProperties":false,"properties":{"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["decoded","partial","unsupported","invalid"],"type":"string"}},"required":["status","reason"],"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"mangled_name":{"minLength":1,"type":"string"}},"required":["mangled_name","address","decode","evidence"],"type":"object"},"type":"array"}},"required":["objc_classes","objc_protocols","swift_decls","objc_ivars","objc_protocol_records","objc_dispatch_implementations","swift_conformances","swift_dispatch_slots","swift_symbols","relative_pointers","coverage","db_save_result"],"type":"object"},"target_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]}},"required":["target_sha256","provider","analysis_profile_digest","result"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Native Dispatch Metadata"},{"analysisOperation":"get_objc_classes","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Discover and deduplicate Objective-C class labels, optionally filtering by literal substring.","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":"Literal text or regular expression used to filter matching results.","type":"string"}},"type":"object"},"kind":"enhanced","name":"get_objc_classes","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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.","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":{"$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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"type":"object"},"requiresSession":false,"title":"Get Objc Protocols"},{"analysisOperation":"batch_decompile","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decompile each explicit procedure symbol or address concurrently. Returns ordered per-item success or error results and aggregate counts.","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"},"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"}]},"__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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"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"],"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 until the reachable graph is exhausted. 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","direction":"forward"}],"properties":{"address":{"description":"A provider-normalized procedure address","type":"string"},"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"}]},"__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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"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"],"type":"object"},"requiresSession":false,"title":"Get Call Graph"},{"analysisOperation":"analyze_swift_types","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Categorize analyzed procedure names into Swift classes, structs, enums, protocols, extensions, and other symbols. Returns deduplicated names grouped with counts. Optionally select one category and/or apply a case-sensitive literal name filter; for example, use {category: \\"classes\\", pattern: \\"Account\\"} to find matching class 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":[{"category":"classes","pattern":"Account"}],"properties":{"category":{"description":"Limit results to one Swift symbol category.","enum":["classes","structs","enums","protocols","extensions","other"],"type":"string"},"pattern":{"description":"Case-sensitive literal filter applied to mangled symbol names.","type":"string"}},"type":"object"},"kind":"enhanced","name":"analyze_swift_types","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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 against the bound provider\'s name inventory and return a resolved or unresolved result. Unresolved names use the stable name_not_found reason; this 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":{"$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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"type":"object"},"requiresSession":false,"title":"Find Xrefs To Name"},{"analysisOperation":"binary_overview","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return native-binary metadata, every segment with its length, and exhaustive procedure/string counts. Use search_procedures, list_procedures, or analyze_function directly when you already know which procedure to inspect.","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":"binary_overview","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"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","length"],"type":"object"},"type":"array"},"string_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["document","segments","segment_count","procedure_count","string_count"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Binary Overview"},{"analysisOperation":"analyze_function","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Build a dossier for one native function identified by symbol or provider-returned address. Returns identity with complete inclusive body ranges or explicit unknown, provider-specific pseudocode and assembly, comments, calls, references, referenced strings/names, local CFG blocks, and available native API boundary observations.","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":{"procedure":{"description":"A procedure name or address","type":"string"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"analyze_function","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"assembly":{"items":{"type":"string"},"type":"array"},"basic_blocks":{"items":{"additionalProperties":false,"properties":{"end":{"type":"string"},"start":{"type":"string"},"successors":{"items":{"type":"string"},"type":"array"}},"required":["start","end","successors"],"type":"object"},"type":"array"},"callees":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},"type":"array"},"callers":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},"type":"array"},"comments":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"kind":{"enum":["comment","inline"],"type":"string"},"text":{"type":"string"}},"required":["address","kind","text"],"type":"object"},"type":"array"},"incoming_references":{"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"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","ghidra-aarch64-byte-table","ghidra-aarch64-halfword-table"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"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"},"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","confidence","evidence"],"type":"object"},"type":"array"}},"required":["dispatch_address","data_sources","mappings","limitations"],"type":"object"},"type":"array"},"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"},"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","jump_tables","pseudocode","decompiler_artifacts","limitations"],"type":"object"}]},{"type":"null"}],"default":null},"native_value_flow":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"def_use":{"items":{"additionalProperties":false,"properties":{"definition":{"minLength":1,"type":"string"},"input_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"use":{"minLength":1,"type":"string"}},"required":["definition","use","input_index"],"type":"object"},"type":"array"},"effects":{"items":{"additionalProperties":false,"properties":{"kind":{"enum":["memory_read","memory_write","conditional_branch","indirect_branch","direct_call","indirect_call"],"type":"string"},"operand_input":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"operation":{"minLength":1,"type":"string"},"value_input":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["operation","kind","operand_input","value_input"],"type":"object"},"type":"array"},"known_omitted_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"known_omitted_inputs":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"omitted_operations_lower_bound":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operations":{"items":{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"block_membership":{"default":"unavailable","enum":["member","detached","unavailable"],"type":"string"},"id":{"minLength":1,"type":"string"},"inputs":{"items":{"additionalProperties":false,"properties":{"constant_hex":{"anyOf":[{"pattern":"^[0-9a-f]+$","type":"string"},{"type":"null"}]},"kind":{"enum":["constant","address","register","unique","other"],"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","size_bytes","location","constant_hex"],"type":"object"},"type":"array"},"is_dead":{"type":"boolean"},"opcode":{"minLength":1,"type":"string"},"output":{"anyOf":[{"additionalProperties":false,"properties":{"constant_hex":{"anyOf":[{"pattern":"^[0-9a-f]+$","type":"string"},{"type":"null"}]},"kind":{"enum":["constant","address","register","unique","other"],"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","size_bytes","location","constant_hex"],"type":"object"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["id","address","sequence","opcode","is_dead","block_membership","inputs","output"],"type":"object"},"type":"array"},"parameter_uses":{"default":[],"items":{"additionalProperties":false,"properties":{"input_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"use":{"type":"string"}},"required":["ordinal","use","input_index"],"type":"object"},"type":"array"},"parameters":{"default":[],"items":{"additionalProperties":false,"properties":{"data_type":{"type":"string"},"name":{"type":"string"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["ordinal","name","data_type"],"type":"object"},"type":"array"},"provenance":{"const":"ghidra-high-pcode","type":"string"},"truncated":{"type":"boolean"}},"required":["available","provenance","operations","def_use","effects","parameters","parameter_uses","truncated","omitted_operations_lower_bound","known_omitted_inputs","known_omitted_edges","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"available":{"const":false,"type":"boolean"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"reason":{"minLength":1,"type":"string"}},"required":["available","reason","limitations"],"type":"object"}]},{"type":"null"}],"default":null},"outgoing_references":{"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]},"target_address":{"type":"string"},"target_procedure":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"type":"object"},{"type":"null"}]}},"required":["source_address","target_address","source_procedure","target_procedure","kind"],"type":"object"},"type":"array"},"procedure":{"additionalProperties":false,"properties":{"address":{"type":"string"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body","signature","locals"],"type":"object"},"pseudocode":{"type":"string"},"referenced_names":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"},"referenced_strings":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"source_address":{"type":"string"},"value":{"type":"string"}},"required":["address","value","source_address"],"type":"object"},"type":"array"}},"required":["procedure","pseudocode","assembly","comments","callers","callees","incoming_references","outgoing_references","referenced_strings","referenced_names","basic_blocks","native_api","native_value_flow","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Analyze Function"},{"analysisOperation":"inspect_native_api","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Analyze a native API boundary in one function identified by symbol or provider-returned address. Returns confidence, evidence, jump-table dispatch/data/target mappings, 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":[{"procedure":"main"}],"properties":{"procedure":{"description":"A procedure name or address","type":"string"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"inspect_native_api","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","ghidra-aarch64-byte-table","ghidra-aarch64-halfword-table"],"type":"string"}},"required":["address","provenance","entry_size_bytes","entry_count","confidence","evidence"],"type":"object"},"type":"array"},"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"},"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","confidence","evidence"],"type":"object"},"type":"array"}},"required":["dispatch_address","data_sources","mappings","limitations"],"type":"object"},"type":"array"},"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"},"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","jump_tables","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"},"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":["procedure","boundary","substeps","unsupported_branches","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Native Api"},{"analysisOperation":"trace_feature","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a literal feature query through every matching string and procedure, their xrefs, and truthful containing-procedure resolution. Returns observations, operation count, and residual unknowns 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,"query":"license"}],"properties":{"case_sensitive":{"default":false,"description":"Whether text matching distinguishes uppercase and lowercase.","type":"boolean"},"query":{"description":"Non-empty feature or text query to investigate.","minLength":1,"type":"string"}},"required":["query"],"type":"object"},"kind":"enhanced","name":"trace_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"},"body":{"default":{"available":false,"reason":"The provider did not report complete function body ranges."},"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"},"contains_entry":{"type":"boolean"},"non_contiguous":{"type":"boolean"},"provenance":{"minLength":1,"type":"string"},"ranges":{"items":{"additionalProperties":false,"properties":{"end":{"description":"Inclusive last address of this observed body range.","type":"string"},"start":{"type":"string"}},"required":["start","end"],"type":"object"},"type":"array"},"span_bytes":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"total_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["available","provenance","ranges","total_bytes","span_bytes","non_contiguous","contains_entry"],"type":"object"}]},"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","body"],"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","matches","references","truncated","residual_unknowns"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Trace Feature"},{"analysisOperation":"trace_call_path","annotations":{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false},"description":"Trace direct callers or callees from one exact procedure address until the graph is exhausted or the optional goal is reached. Returns visited nodes, direct-call edges, a shortest traversal path, provider failures, and residual unknowns; unresolved indirect calls remain unknown.","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","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"},"start":{"description":"A provider-normalized procedure address","type":"string"}},"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"}]},"__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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation","details"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"},{"additionalProperties":false,"properties":{"category":{"enum":["invalid_input","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"}},"required":["action"],"type":"object"},"retryable":{"type":"boolean"}},"required":["code","category","message","retryable","remediation"],"type":"object"}]}},"required":["address","error"],"type":"object"},"type":"array"},"goal":{"anyOf":[{"type":"string"},{"type":"null"}]},"goal_status":{"enum":["not_requested","reached","not_reached"],"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"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":{"additionalProperties":false,"properties":{"nodes_visited":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["nodes_visited"],"type":"object"},"traversal_path":{"items":{"type":"string"},"type":"array"},"truncated":{"type":"boolean"}},"required":["start","goal","direction","goal_status","nodes","edges","traversal_path","failures","traversal","truncated","residual_unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Trace Call Path"},{"analysisOperation":"trace_native_ui_action","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace one unique compiled UI action, object ID, native symbol or exact function address through authored connections, encoded or symbolized Objective-C handlers, and bounded static call references. Typed direct and resolved indirect calls, ambiguous candidates, inferred untyped provider callees, and targetless sites remain distinct. Runtime reachability is unknown; use trace_native_values for recovered value dependencies.","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":[{"action":"buildTapped:","max_depth":8,"max_edges":500,"max_nodes":250}],"properties":{"action":{"description":"A unique compiled UI action selector, interface object ID, native symbol or exact function address","minLength":1,"type":"string"},"max_depth":{"default":8,"description":"Maximum permitted depth for this operation.","maximum":32,"minimum":0,"type":"integer"},"max_edges":{"default":500,"description":"Maximum permitted edges for this operation.","maximum":5000,"minimum":1,"type":"integer"},"max_nodes":{"default":250,"description":"Maximum permitted nodes for this operation.","maximum":2000,"minimum":1,"type":"integer"}},"required":["action"],"type":"object"},"kind":"enhanced","name":"trace_native_ui_action","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"items":{"additionalProperties":false,"properties":{"examined":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"facet":{"minLength":1,"type":"string"},"omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["complete","partial","unsupported","not_requested"],"type":"string"}},"required":["facet","status","reason","examined","omitted"],"type":"object"},"type":"array"},"direction":{"enum":["forward","backward"],"type":"string"},"edges":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"enum":["observed","inferred","resolved","ambiguous"],"type":"string"},"to":{"minLength":1,"type":"string"}},"required":["id","from","to","relation","resolution","evidence","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"reason":{"minLength":1,"type":"string"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"const":"unresolved","type":"string"},"to":{"type":"null"}},"required":["id","from","to","relation","resolution","reason","evidence","limitations"],"type":"object"}]},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"attributes":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"id":{"minLength":1,"type":"string"},"kind":{"enum":["storyboard","scene","view_controller","view","control","constraint","layout_guide","resource","placeholder","external_object","outlet","action","segue","objc_class","objc_selector","swift_declaration","swift_requirement","dispatch_table","dispatch_slot","thunk","function","state_value","global_value","field","branch_condition","sink","unknown"],"type":"string"},"location":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},{"type":"null"}]},"name":{"minLength":1,"type":"string"}},"required":["id","kind","name","location","attributes","evidence"],"type":"object"},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"tool_version":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","version","tool_version"],"type":"object"},"reached_depth":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"start":{"minLength":1,"type":"string"},"target_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"type":"boolean"},"unresolved":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"enum":["observed","inferred","resolved","ambiguous"],"type":"string"},"to":{"minLength":1,"type":"string"}},"required":["id","from","to","relation","resolution","evidence","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"reason":{"minLength":1,"type":"string"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"const":"unresolved","type":"string"},"to":{"type":"null"}},"required":["id","from","to","relation","resolution","reason","evidence","limitations"],"type":"object"}]},"type":"array"}},"required":["target_sha256","provider","start","direction","nodes","edges","unresolved","reached_depth","truncated","reason","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Trace Native Ui Action"},{"analysisOperation":"trace_native_values","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace a bounded static dependency graph from one explicit native procedure. Includes high-p-code def-use, constants, operators, memory and branch operations, resolved call edges, and derived argument/parameter and return/output bindings. Missing bindings, alias semantics, persistent state and RNG roles remain unknown. Budgets bound depth, decompilations, graph size and payloads; nodes are 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":[{"limit":1000,"max_call_sites":256,"max_depth":3,"max_edges":10000,"max_functions":16,"max_nodes":5000,"offset":0,"procedure":"0x1000"}],"properties":{"limit":{"default":1000,"description":"Value for limit.","maximum":5000,"minimum":1,"type":"integer"},"max_call_sites":{"default":256,"description":"Maximum permitted call sites for this operation.","maximum":4096,"minimum":1,"type":"integer"},"max_depth":{"default":3,"description":"Maximum permitted depth for this operation.","maximum":16,"minimum":0,"type":"integer"},"max_edges":{"default":10000,"description":"Maximum permitted edges for this operation.","maximum":40000,"minimum":1,"type":"integer"},"max_functions":{"default":16,"description":"Maximum permitted functions for this operation.","maximum":64,"minimum":1,"type":"integer"},"max_nodes":{"default":5000,"description":"Maximum permitted nodes for this operation.","maximum":20000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Value for offset.","maximum":9007199254740991,"minimum":0,"type":"integer"},"procedure":{"description":"Value for procedure.","minLength":1,"type":"string"}},"required":["procedure"],"type":"object"},"kind":"enhanced","name":"trace_native_values","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"decompilations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"edges":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"type":"string"},"input_index":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"kind":{"enum":["def-use","call","parameter-use","argument-binding","return-binding"],"type":"string"},"source":{"type":"string"},"status":{"enum":["derived","direct","resolved-indirect","candidate"],"type":"string"},"target":{"type":"string"}},"required":["source","target","input_index","kind","status","evidence_id"],"type":"object"},"type":"array"},"limitations":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"nodes":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"type":"string"},"id":{"type":"string"},"kind":{"enum":["operation","parameter"],"type":"string"},"operation":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"block_membership":{"default":"unavailable","enum":["member","detached","unavailable"],"type":"string"},"id":{"minLength":1,"type":"string"},"inputs":{"items":{"additionalProperties":false,"properties":{"constant_hex":{"anyOf":[{"pattern":"^[0-9a-f]+$","type":"string"},{"type":"null"}]},"kind":{"enum":["constant","address","register","unique","other"],"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","size_bytes","location","constant_hex"],"type":"object"},"type":"array"},"is_dead":{"type":"boolean"},"opcode":{"minLength":1,"type":"string"},"output":{"anyOf":[{"additionalProperties":false,"properties":{"constant_hex":{"anyOf":[{"pattern":"^[0-9a-f]+$","type":"string"},{"type":"null"}]},"kind":{"enum":["constant","address","register","unique","other"],"type":"string"},"location":{"anyOf":[{"type":"string"},{"type":"null"}]},"size_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["kind","size_bytes","location","constant_hex"],"type":"object"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["id","address","sequence","opcode","is_dead","block_membership","inputs","output"],"type":"object"},{"type":"null"}]},"parameter":{"anyOf":[{"additionalProperties":false,"properties":{"data_type":{"type":"string"},"name":{"type":"string"},"ordinal":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["ordinal","name","data_type"],"type":"object"},{"type":"null"}]},"procedure":{"type":"string"}},"required":["id","procedure","evidence_id","kind","operation","parameter"],"type":"object"},"type":"array"},"procedures":{"items":{"additionalProperties":false,"properties":{"address":{"type":"string"},"analysis_profile_digest":{"anyOf":[{"type":"string"},{"type":"null"}]},"depth":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"evidence_id":{"type":"string"},"provider":{"type":"string"}},"required":["address","depth","evidence_id","provider","analysis_profile_digest"],"type":"object"},"type":"array"},"seed":{"type":"string"},"target_sha256":{"type":"string"},"total_edges":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"},"unknowns":{"items":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"procedure":{"type":"string"},"reason":{"type":"string"}},"required":["procedure","address","reason"],"type":"object"},"type":"array"}},"required":["seed","target_sha256","nodes","edges","procedures","unknowns","total_nodes","total_edges","decompilations","next_offset","truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Trace Native Values"},{"analysisOperation":"observe_native_ui","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Observe an already-running native app by PID and window ID, bound to the active Mach-O target. Captures a bounded accessibility tree and selected-window screenshot; OS permission denial fails without broad capture or target launch.","effects":{"accessesNetwork":false,"changesUiState":false,"idempotent":true,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"pid":123,"window_id":456}],"properties":{"accessibility":{"default":true,"description":"Value for accessibility.","type":"boolean"},"max_nodes":{"default":500,"description":"Maximum accessibility nodes per capture; increase for large windows.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"pid":{"description":"Value for pid.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"screenshot":{"default":true,"description":"Value for screenshot.","type":"boolean"},"window_id":{"description":"Value for window id.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id"],"type":"object"},"kind":"native-provider","name":"observe_native_ui","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"initial":{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"restore":{"const":"leave-as-is","type":"string"},"steps":{"items":{"additionalProperties":false,"properties":{"after":{"anyOf":[{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},{"type":"null"}]},"before":{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"type":"string"},"outcome":{"enum":["completed","failed","cancelled"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["index","kind","before","after","outcome","reason"],"type":"object"},"type":"array"},"target_sha256":{"type":"string"}},"required":["target_sha256","initial","steps","restore","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Observe Native Ui"},{"analysisOperation":"capture_native_ui_scenario","annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run selected-element press, increment/decrement scroll, AXValue text entry and bounded wait steps in one exact native app window. Returns ordered before/after captures and action/capture failures. Actions can change app data, network activity and persistent state; application state is left as-is and restoration is not attempted.","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":[{"pid":123,"steps":[{"kind":"wait","milliseconds":100}],"window_id":456}],"properties":{"accessibility":{"default":true,"description":"Value for accessibility.","type":"boolean"},"max_nodes":{"default":500,"description":"Maximum accessibility nodes per capture; increase for large windows.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"pid":{"description":"Value for pid.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"screenshot":{"default":true,"description":"Value for screenshot.","type":"boolean"},"steps":{"description":"Value for steps.","items":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"click","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":32,"type":"array"}},"required":["kind","path"],"type":"object"},{"additionalProperties":false,"properties":{"direction":{"description":"Direction in which to traverse or compare relationships.","enum":["increment","decrement"],"type":"string"},"kind":{"const":"scroll","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":32,"type":"array"}},"required":["kind","path","direction"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"key-entry","description":"Value for kind.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"maxItems":32,"type":"array"},"text":{"description":"Value for text.","type":"string"}},"required":["kind","path","text"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"wait","description":"Value for kind.","type":"string"},"milliseconds":{"description":"Wait duration in milliseconds, within the 180-second operation deadline.","maximum":180000,"minimum":0,"type":"integer"}},"required":["kind","milliseconds"],"type":"object"}]},"minItems":1,"type":"array"},"window_id":{"description":"Value for window id.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","steps"],"type":"object"},"kind":"native-provider","name":"capture_native_ui_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"initial":{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"restore":{"const":"leave-as-is","type":"string"},"steps":{"items":{"additionalProperties":false,"properties":{"after":{"anyOf":[{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},{"type":"null"}]},"before":{"additionalProperties":false,"properties":{"gaps":{"items":{"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"actions":{"items":{"type":"string"},"type":"array"},"children_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"items":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"type":"array"},"role":{"anyOf":[{"type":"string"},{"type":"null"}]},"title":{"anyOf":[{"type":"string"},{"type":"null"}]},"value":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["path","role","title","value","actions","children_count"],"type":"object"},"type":"array"},"screenshot":{"anyOf":[{"additionalProperties":false,"properties":{"base64":{"minLength":4,"type":"string"},"height":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"mime_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"width":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["mime_type","base64","sha256","width","height"],"type":"object"},{"type":"null"}]},"truncated":{"type":"boolean"},"window":{"additionalProperties":false,"properties":{"executable":{"type":"string"},"launch_time":{"type":"number"},"pid":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"title":{"type":"string"},"window_id":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"required":["pid","window_id","executable","launch_time","title"],"type":"object"}},"required":["window","nodes","truncated","screenshot","gaps"],"type":"object"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"type":"string"},"outcome":{"enum":["completed","failed","cancelled"],"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["index","kind","before","after","outcome","reason"],"type":"object"},"type":"array"},"target_sha256":{"type":"string"}},"required":["target_sha256","initial","steps","restore","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Capture Native Ui Scenario"},{"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":{"$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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"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"],"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 exact 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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"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"],"type":"object"},"requiresSession":false,"title":"Inspect Signature"},{"analysisOperation":"inspect_plist","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Parse Info.plist from the active artifact by default, or pass any local plist path. Returns 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":[{"path":"/Applications/Example.app/Contents/Info.plist"}],"properties":{"path":{"description":"Local filesystem path used by this operation.","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"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"],"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 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":{"$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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"type":"object"},"type":"array"}},"required":["architectures","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Architectures"},{"analysisOperation":"demangle_swift","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Demangle an ordered list 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 Swift symbols to demangle.","items":{"minLength":1,"type":"string"},"minItems":1,"type":"array"}},"required":["symbols"],"type":"object"},"kind":"native-provider","name":"demangle_swift","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"stdout_bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"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"],"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"],"type":"object"},"requiresSession":false,"title":"Demangle Swift"},{"analysisOperation":"inspect_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect an active archive or application package in one call. Returns the complete content-addressed artifact graph, source Evidence, observations, relationships, integrity contradictions, hypotheses, unexplored branches, limitations, and next probes inline. Read-only DMG mounting is used automatically on supported macOS hosts. Integrity mismatches fail by default; record-and-continue keeps mismatches explicitly untrusted. It does not extract files; use extract_artifact to materialize its regular contents.","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_policy":{"default":"fail","description":"Value for integrity policy.","enum":["fail","record-and-continue"],"type":"string"}},"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"minLength":1,"type":"string"}},"required":["contradiction_id","statement","occurrence_id","declared_sha256","observed_sha256","evidence_id"],"type":"object"},"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":[{"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"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"hypotheses":{"items":{"additionalProperties":false,"properties":{"basis_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"confidence":{"enum":["medium","low"],"type":"string"},"hypothesis_id":{"pattern":"^aih_[a-f0-9]{64}$","type":"string"},"limitation":{"minLength":1,"type":"string"},"statement":{"minLength":1,"type":"string"}},"required":["hypothesis_id","statement","confidence","basis_evidence_ids","limitation"],"type":"object"},"type":"array"},"inspection_id":{"pattern":"^ai_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"next_probes":{"items":{"additionalProperties":false,"properties":{"authority":{"enum":["artifact-bytes","managed-static-analysis","native-analysis-provider","ast-static-analysis"],"type":"string"},"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},"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":{"minLength":1,"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["observation_id","kind","subject","value","evidence_id"],"type":"object"},"type":"array"},"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":{"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"}},"required":["provider","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"}]},"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","dos-mz","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":["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"},"minItems":1,"type":"array"},"unexplored_branches":{"items":{"additionalProperties":false,"properties":{"branch_id":{"pattern":"^aib_[a-f0-9]{64}$","type":"string"},"detail":{"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":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale","authority"],"type":"object"},{"type":"null"}]},"reason":{"enum":["format-specific-analysis-required","unknown-format"],"type":"string"}},"required":["branch_id","reason","detail","next_probe","evidence_id"],"type":"object"},"type":"array"}},"required":["inspection_id","subject","substeps","observations","derived_relationships","hypotheses","contradictions","unexplored_branches","next_probes","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Artifact"},{"analysisOperation":"extract_artifact","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Extract all regular files from the active archive or application package into a fresh temporary directory chosen by REA. The result includes its location. Rejects traversal and symlink escapes, never overwrites, enforces archive integrity checks, 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":[{}],"properties":{},"type":"object"},"kind":"artifact-provider","name":"extract_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifacts":{"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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["artifact_id","relative_path","sha256","bytes_written","created"],"type":"object"},"type":"array"},"cleanup":{"additionalProperties":false,"properties":{"attempted":{"type":"boolean"},"residual_paths":{"items":{"minLength":1,"type":"string"},"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"},"selected_occurrence_ids":{"items":{"pattern":"^occ_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"source_manifest_id":{"pattern":"^agm_[a-f0-9]{64}$","type":"string"}},"required":["extraction_id","source_manifest_id","selected_occurrence_ids","files_sha256","output_root_alias"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"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","dos-mz","hopper","analysis-database","ipa","apk","msix","appx","plist","entitlements","directory","file","unknown"],"type":"string"},"root_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["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":{"type":"string"},"type":"array"},"effects":{"items":{"enum":["read","write","mount"],"type":"string"},"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":"array"}},"required":["manifest","extraction_manifest","output_root","artifacts","containment_verified","cleanup","provenance","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Extract Artifact"},{"analysisOperation":"decode_interface_builder","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Decode compiled storyboard and nib archives inside the active Apple app bundle, including keyed property lists and NIBArchive object tables, into a bounded object, hierarchy, and connection graph. This is static archive parsing; unrecognized archive classes and unresolved code handlers remain explicit unknowns.","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":{"max_connections":{"default":40000,"description":"Maximum permitted connections for this operation.","maximum":40000,"minimum":1,"type":"integer"},"max_documents":{"default":64,"description":"Maximum permitted documents for this operation.","maximum":64,"minimum":1,"type":"integer"},"max_objects":{"default":20000,"description":"Maximum permitted objects for this operation.","maximum":20000,"minimum":1,"type":"integer"}},"type":"object"},"kind":"artifact-provider","name":"decode_interface_builder","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"documents":{"items":{"additionalProperties":false,"properties":{"archive_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"connection_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"document_kind":{"enum":["nib","storyboard_scene"],"type":"string"},"hierarchy_complete":{"type":"boolean"},"object_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relative_path":{"minLength":1,"type":"string"}},"required":["relative_path","archive_sha256","document_kind","object_count","connection_count","hierarchy_complete"],"type":"object"},"maxItems":64,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"items":{"additionalProperties":false,"properties":{"examined":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"facet":{"minLength":1,"type":"string"},"omitted":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]},"status":{"enum":["complete","partial","unsupported","not_requested"],"type":"string"}},"required":["facet","status","reason","examined","omitted"],"type":"object"},"type":"array"},"edges":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"minItems":1,"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"enum":["observed","inferred","resolved","ambiguous"],"type":"string"},"to":{"minLength":1,"type":"string"}},"required":["id","from","to","relation","resolution","evidence","limitations"],"type":"object"},{"additionalProperties":false,"properties":{"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"from":{"minLength":1,"type":"string"},"id":{"minLength":1,"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"reason":{"minLength":1,"type":"string"},"relation":{"enum":["contains","outlet_to","target_action","segue_to","objc_dispatch","swift_witness_dispatch","swift_vtable_dispatch","thunk_to","direct_call","indirect_call","provider_call","reads","writes","flows_to","controls"],"type":"string"},"resolution":{"const":"unresolved","type":"string"},"to":{"type":"null"}},"required":["id","from","to","relation","resolution","reason","evidence","limitations"],"type":"object"}]},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"attributes":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"evidence":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null},"artifact_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":null},"description":{"minLength":1,"type":"string"},"kind":{"enum":["binary_metadata","interface_builder_resource","symbol","reference","decompiler"],"type":"string"},"location":{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"}},"required":["kind","description","location","artifact_path","artifact_sha256"],"type":"object"},"type":"array"},"id":{"minLength":1,"type":"string"},"kind":{"enum":["storyboard","scene","view_controller","view","control","constraint","layout_guide","resource","placeholder","external_object","outlet","action","segue","objc_class","objc_selector","swift_declaration","swift_requirement","dispatch_table","dispatch_slot","thunk","function","state_value","global_value","field","branch_condition","sink","unknown"],"type":"string"},"location":{"anyOf":[{"additionalProperties":false,"properties":{"address":{"anyOf":[{"type":"string"},{"type":"null"}]},"file_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["address","file_offset"],"type":"object"},{"type":"null"}]},"name":{"minLength":1,"type":"string"}},"required":["id","kind","name","location","attributes","evidence"],"type":"object"},"type":"array"},"provider":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"tool_version":{"minLength":1,"type":"string"},"version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["id","version","tool_version"],"type":"object"},"target_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"truncated":{"type":"boolean"}},"required":["target_sha256","provider","nodes","edges","coverage","truncated"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"target_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["target_sha256","documents","graph","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Decode Interface Builder"},{"analysisOperation":"inspect_keyed_archive","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect one Foundation NSKeyedArchiver plist in the active app bundle as original object-table nodes, class descriptors, named roots, and UID edges. Preserves shared and cyclic references without instantiating classes. The path is relative to the bundle; root selection and object pagination preserve original identities.","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":"Contents/Resources/Model.plist"}],"properties":{"limit":{"default":20000,"description":"Value for limit.","maximum":20000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Value for offset.","maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"default":".","description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"root":{"description":"Value for root.","type":"string"}},"type":"object"},"kind":"artifact-provider","name":"inspect_keyed_archive","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"archive_format":{"enum":["binary-plist","xml-plist"],"type":"string"},"archive_path":{"type":"string"},"archive_sha256":{"type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"objects":{"items":{"additionalProperties":false,"properties":{"class_id":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"class_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"id":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["nil","scalar","array","dictionary","class-descriptor","archived-object"],"type":"string"},"status":{"enum":["observed","unknown-class","unresolved-class","nil"],"type":"string"},"value":{"$ref":"#/$defs/__schema0"}},"required":["id","kind","class_id","class_name","status","value"],"type":"object"},"type":"array"},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"references":{"items":{"additionalProperties":false,"properties":{"path":{"items":{"anyOf":[{"type":"string"},{"maximum":9007199254740991,"minimum":0,"type":"integer"}]},"type":"array"},"raw":{"$ref":"#/$defs/__schema0"},"source":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"enum":["resolved","nil","unresolved","malformed"],"type":"string"},"target":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["source","path","target","status","raw"],"type":"object"},"type":"array"},"roots":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"target_sha256":{"type":"string"},"total_objects":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"total_references":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["target_sha256","archive_path","archive_sha256","archive_format","roots","objects","references","total_objects","total_references","offset","next_offset","truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Keyed Archive"},{"analysisOperation":"inspect_asset_catalog","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Inspect compiled Assets.car metadata in an active Apple app bundle. Returns stable paginated catalog and rendition records with raw assetutil metadata and catalog digests; rendition bytes are not extracted.","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":[{"limit":1000,"offset":0}],"properties":{"limit":{"default":1000,"description":"Value for limit.","maximum":10000,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Value for offset.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"kind":"artifact-provider","name":"inspect_asset_catalog","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"catalogs":{"items":{"additionalProperties":false,"properties":{"path":{"minLength":1,"type":"string"},"record_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["path","sha256","record_count"],"type":"object"},"type":"array"},"limit":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"next_offset":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"offset":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"records":{"items":{"additionalProperties":false,"properties":{"asset_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"catalog_path":{"minLength":1,"type":"string"},"catalog_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"enum":["catalog","rendition"],"type":"string"},"metadata":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"rendition_name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["catalog_path","catalog_sha256","index","kind","asset_name","rendition_name","metadata"],"type":"object"},"type":"array"},"resource_key_matches":{"items":{"additionalProperties":false,"properties":{"field":{"minLength":1,"type":"string"},"key":{"minLength":1,"type":"string"},"renditions":{"items":{"additionalProperties":false,"properties":{"catalog_path":{"minLength":1,"type":"string"},"catalog_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"record_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"rendition_name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["catalog_path","catalog_sha256","record_index","rendition_name"],"type":"object"},"type":"array"},"source_archive_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"source_node_id":{"minLength":1,"type":"string"},"source_path":{"minLength":1,"type":"string"},"status":{"enum":["matched","ambiguous","unmatched"],"type":"string"}},"required":["source_node_id","source_path","source_archive_sha256","field","key","status","renditions"],"type":"object"},"type":"array"},"target_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"total_records":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"truncated":{"type":"boolean"}},"required":["target_sha256","catalogs","total_records","offset","limit","records","resource_key_matches","next_offset","truncated","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Asset Catalog"},{"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 complete inline inventories when metadata is admitted and explicit partial or malformed coverage otherwise.","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":{"path":{"description":"Managed PE/CLI path to open before inspection; omit only when a managed target is already active","minLength":1,"type":"string"}},"type":"object"},"kind":"managed-provider","name":"inspect_managed_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"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"},"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"],"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":65535,"minimum":1,"type":"integer"}},"required":["machine","machine_hex","architecture","optional_header","section_count","characteristics","cli"],"type":"object"},"references":{"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"},"resources":{"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"},"target_frameworks":{"items":{"type":"string"},"type":"array"}},"required":["artifact","pe","classification","metadata","module","assembly","target_frameworks","references","resources","attributes","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Managed Artifact"},{"analysisOperation":"inspect_managed_members","annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Inspect PE/CLI metadata members, signatures, raw CIL hashes, 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 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":[{}],"properties":{},"type":"object"},"kind":"managed-provider","name":"inspect_managed_members","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"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"},"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"],"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":{"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"},"fields":{"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"},"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":{"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"},"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":{"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"],"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"},"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"}]},"types":{"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"}},"required":["artifact","module","metadata","identity_scope","types","fields","methods","member_refs","call_edges","field_accesses","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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":[{}],"properties":{},"type":"object"},"kind":"managed-provider","name":"inspect_managed_native_boundaries","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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":{"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"},"native_implementations":{"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"},"pinvoke_imports":{"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"},"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":["artifact","module","metadata","identity_scope","cli_native","module_refs","pinvoke_imports","native_implementations","summary","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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/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 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":{"$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":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_b3525a33f9aecdcfeac8372301c13cb9153b189d93ef337eee0fef9425171ce3","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/00000000.dll","sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"0000000000000000000000000000000000000000000000000000000000000000","requires_mvid":"00112233-4455-6677-8899-aabbccddeeff","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"00112233-4455-6677-8899-aabbccddeeff","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null},"right":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_8f79f99bceb5bf3d5e5af7fd678ac07b67427756eca0784cd56ffa6b9c4dbda4","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/11111111.dll","sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","requires_mvid":"ffeeddcc-bbaa-4988-9766-554433221100","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"ffeeddcc-bbaa-4988-9766-554433221100","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["left","right"],"type":"object"},"kind":"application","name":"compare_managed_members","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"}},"required":["name","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"},"right_status":{"enum":["complete","partial","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial"],"type":"string"}},"required":["status","left_status","right_status"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":2,"minItems":2,"type":"array"},"fields":{"items":{"anyOf":[{"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":{"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"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"enum":["exact","high"],"type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"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"},"status":{"enum":["unchanged","changed"],"type":"string"}},"required":["evidence_links","limitations","item_id","status","left","right","match"],"type":"object"},{"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":{"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"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"type":"null"},"status":{"enum":["removed","unknown"],"type":"string"}},"required":["evidence_links","limitations","item_id","status","left","right","match"],"type":"object"},{"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":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"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"},"status":{"enum":["added","unknown"],"type":"string"}},"required":["evidence_links","limitations","item_id","status","left","right","match"],"type":"object"},{"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":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"minItems":1,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"minItems":1,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"ambiguous","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"type":"null"},"status":{"const":"unknown","type":"string"}},"required":["evidence_links","limitations","item_id","status","left","right","match"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"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":{"anyOf":[{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"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":{"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"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"enum":["exact","high"],"type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"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"},"status":{"enum":["unchanged","changed"],"type":"string"}},"required":["evidence_links","limitations","item_id","dimensions","status","left","right","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"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":{"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"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"type":"null"},"status":{"enum":["removed","unknown"],"type":"string"}},"required":["evidence_links","limitations","item_id","dimensions","status","left","right","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"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":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_tokens":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"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"},"status":{"enum":["added","unknown"],"type":"string"}},"required":["evidence_links","limitations","item_id","dimensions","status","left","right","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["signature","cil","opcode-shape","call-shape","field-shape","exception-shape","availability"],"type":"string"},"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":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"enum":["exact-il-signature","structural-method-shape","field-signature"],"type":"string"},"candidate_left_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"minItems":1,"type":"array"},"candidate_right_tokens":{"items":{"pattern":"^0x[0-9a-f]{8}$","type":"string"},"minItems":1,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"ambiguous","type":"string"}},"required":["status","basis","confidence","candidate_left_tokens","candidate_right_tokens"],"type":"object"},"right":{"type":"null"},"status":{"const":"unknown","type":"string"}},"required":["evidence_links","limitations","item_id","dimensions","status","left","right","match"],"type":"object"}]},"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"},"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":["comparison_id","algorithm","left","right","summary","matching","methods","fields","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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":{"$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":[{"managed_boundaries":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_0b4af8f787323ba7fb52a35b1c21115b2c53d55d61ff9de4a16b006b818a2ba2","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":8192,"format":"pe","path":"/examples/ManagedInterop.exe","sha256":"6666666666666666666666666666666666666666666666666666666666666666"},"cli_native":{"il_only":true,"managed_native_header_rva":0,"managed_native_header_size":0,"native_entry_point":false,"ready_to_run_signature":false,"requires_32bit":false,"strong_name_signed":false},"coverage":{"issues":[],"state":"complete"},"identity_scope":{"requires_artifact_sha256":"6666666666666666666666666666666666666666666666666666666666666666","requires_mvid":"00112233-4455-4677-8899-aabbccddeeff","token_identity":"build-local"},"limitations":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"00112233-4455-4677-8899-aabbccddeeff","name":"ManagedInterop.exe","row_offset":0,"token":"0x00000001"},"module_refs":[{"name":"nativehelper.dll","row_offset":256,"token":"0x1a000001"}],"native_implementations":[],"pinvoke_imports":[{"best_fit":"assembly-default","call_convention":"cdecl","char_set":"not-specified","import_name":"open_native","import_scope_name":"nativehelper.dll","import_scope_token":"0x1a000001","mapping_flags":0,"mapping_flags_hex":"0x0000","member_kind":"method","member_name":"OpenNative","member_token":"0x06000001","no_mangle":true,"row_offset":288,"supports_last_error":false,"throw_on_unmappable_char":"assembly-default","token":"0x1c000001","verification":"managed-declaration-only"}],"summary":{"mixed_mode_or_native_header":false,"module_ref_count":1,"native_implementation_count":0,"pinvoke_import_count":1,"ready_to_run":false}},"operation":"inspect_managed_native_boundaries","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null},"native_observations":[{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_9ec8ff855a81995540b10a08acf864e2003b588f92dd88cd2b796e3ad288fdc9","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"architectures":{"exhaustive":true,"items":[],"limitations":[],"total":0},"build_metadata":{"exhaustive":true,"items":[],"limitations":[],"total":0},"dependencies":{"exhaustive":true,"items":[],"limitations":[],"total":0},"endian":"little","entrypoints":{"exhaustive":true,"items":[],"limitations":[],"total":0},"exports":{"exhaustive":true,"items":[{"address":"0x1000","name":"open_native","reexport":false,"source":"nm","weak":false}],"limitations":[],"total":1},"file_type":"dylib","flags":[],"format":"mach-o","imports":{"exhaustive":true,"items":[],"limitations":[],"total":0},"limitations":[],"load_commands":{"exhaustive":true,"items":[],"limitations":[],"total":0},"provenance":[],"segments":{"exhaustive":true,"items":[],"limitations":[],"total":0},"uuid":null,"word_size":64},"operation":"inspect_macho","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"native-macos","name":"REA native macOS provider","version":"1"},"raw_result":null,"subject":{"architecture":"x86_64","digest":{"sha256":"7777777777777777777777777777777777777777777777777777777777777777"},"format":"mach-o","local_path":"/examples/nativehelper.dll","name":"nativehelper.dll"}}]}],"properties":{"managed_boundaries":{"additionalProperties":false,"description":"Value for managed boundaries.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"native_observations":{"description":"Native function or export Evidence records","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"minItems":1,"type":"array"}},"required":["managed_boundaries","native_observations"],"type":"object"},"kind":"application","name":"verify_managed_native_boundaries","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"}},"required":["name","token_identity","token_to_address_mapping"],"type":"object"},"coverage":{"additionalProperties":false,"properties":{"status":{"enum":["complete-within-inputs","partial"],"type":"string"}},"required":["status"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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"},"unsupported":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total","accepted","unsupported","symbols"],"type":"object"},"pinvoke_imports":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"basis":{"enum":["exact-export-name","exact-function-name"],"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"},"prefixItems":[{"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":"array"},"confidence":{"const":"observed","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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"},"status":{"const":"verified","type":"string"}},"required":["item_id","managed","evidence_links","limitations","status","basis","confidence","matched_native","candidates"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"const":"decorated-name-candidate","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"},"prefixItems":[{"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":"array"},"confidence":{"const":"inferred","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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"},"status":{"const":"inferred","type":"string"}},"required":["item_id","managed","evidence_links","limitations","status","basis","confidence","matched_native","candidates"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"enum":["no-native-candidate","unsupported-native-evidence"],"type":"string"},"candidates":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"type":"null"},"status":{"const":"unresolved","type":"string"}},"required":["item_id","managed","evidence_links","limitations","status","basis","confidence","matched_native","candidates"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"const":"module-mismatch","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"},"prefixItems":[{"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":"array"},"confidence":{"const":"unknown","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"item_id":{"pattern":"^mnv_pinvoke_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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"},"status":{"const":"contradicted","type":"string"}},"required":["item_id","managed","evidence_links","limitations","status","basis","confidence","matched_native","candidates"],"type":"object"}]},"type":"array"},"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":["verification_id","algorithm","managed_boundary","native_observations","summary","pinvoke_imports","native_implementations","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 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":{"$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":[{"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":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_cf07661a99083e446ac5f18af3ca331cb1af7c3cd6cb7c9dc8bff880a1ed8bb9","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/22222222.dll","sha256":"2222222222222222222222222222222222222222222222222222222222222222"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"2222222222222222222222222222222222222222222222222222222222222222","requires_mvid":"11112222-3333-4444-9555-666677778888","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[{"body":{"anchors":[],"decoded_instruction_count":1,"exception_regions":[],"file_offset":512,"header_format":"tiny","il_sha256":"4444444444444444444444444444444444444444444444444444444444444444","il_size":1,"init_locals":false,"instruction_count":1,"issue":null,"local_var_sig_token":null,"max_stack":8,"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","opcode_counts":{"ret":1},"rva":8192,"status":"present","truncated_instructions":0},"declaring_type":"Example.Program","declaring_type_token":"0x02000001","flags":22,"impl_flags":0,"name":"Main","row_offset":128,"rva":8192,"signature":{"calling_convention":"default","field_type":null,"generic_parameter_count":0,"issue":null,"kind":"method","parameter_count":0,"parameter_types":[],"parse_status":"decoded","raw_length":3,"raw_sha256":"3333333333333333333333333333333333333333333333333333333333333333","return_type":"void"},"token":"0x06000001"}],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"11112222-3333-4444-9555-666677778888","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null}}],"properties":{"decompiler":{"additionalProperties":false,"description":"Value for decompiler.","properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}],"default":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.","minLength":1,"type":"string"},"options":{"default":[],"description":"Value for options.","items":{"type":"string"},"type":"array"},"version":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":null,"description":"Value for version."}},"required":["name","family"],"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":[{"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.","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"},"minItems":1,"type":"array"},"notes":{"default":[],"description":"Value for notes.","items":{"minLength":1,"type":"string"},"type":"array"},"static_members":{"additionalProperties":false,"description":"Value for static members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["static_members","decompiler","methods"],"type":"object"},"kind":"application","name":"import_managed_reconstruction","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"}],"default":null},"family":{"enum":["ilspy","dnspy","dnlib","mono-cecil","other"],"type":"string"},"name":{"minLength":1,"type":"string"},"options":{"default":[],"items":{"type":"string"},"type":"array"},"options_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"version":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"default":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":{"minLength":1,"type":"string"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"start_line":{"anyOf":[{"maximum":9007199254740991,"minimum":1,"type":"integer"},{"type":"null"}]},"text":{"minLength":1,"type":"string"},"text_length":{"maximum":9007199254740991,"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"},"minItems":1,"type":"array"},"notes":{"items":{"minLength":1,"type":"string"},"type":"array"},"phase":{"const":"reconstruction-import","type":"string"},"reconstruction_id":{"pattern":"^mre_[a-f0-9]{64}$","type":"string"},"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":9007199254740991,"minimum":0,"type":"integer"},"decompiled_il_methods":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"imported_methods":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"pseudocode_methods":{"maximum":9007199254740991,"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":["reconstruction_id","phase","executed","static_observation","decompiler","summary","methods","notes","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Import Managed Reconstruction"},{"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":{"$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":{"managed_artifact":{"additionalProperties":false,"description":"Value for managed artifact.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_members":{"additionalProperties":false,"description":"Value for managed members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_native_boundaries":{"additionalProperties":false,"description":"Value for managed native boundaries.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["managed_artifact"],"type":"object"},{"additionalProperties":false,"properties":{"managed_artifact":{"additionalProperties":false,"description":"Value for managed artifact.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_members":{"additionalProperties":false,"description":"Value for managed members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_native_boundaries":{"additionalProperties":false,"description":"Value for managed native boundaries.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["managed_members"],"type":"object"},{"additionalProperties":false,"properties":{"managed_artifact":{"additionalProperties":false,"description":"Value for managed artifact.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_members":{"additionalProperties":false,"description":"Value for managed members.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"managed_native_boundaries":{"additionalProperties":false,"description":"Value for managed native boundaries.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["managed_native_boundaries"],"type":"object"}],"examples":[{"managed_members":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_cf07661a99083e446ac5f18af3ca331cb1af7c3cd6cb7c9dc8bff880a1ed8bb9","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"artifact":{"byte_length":4096,"format":"pe","path":"/examples/22222222.dll","sha256":"2222222222222222222222222222222222222222222222222222222222222222"},"call_edges":[],"coverage":{"issues":[],"state":"complete"},"field_accesses":[],"fields":[],"identity_scope":{"requires_artifact_sha256":"2222222222222222222222222222222222222222222222222222222222222222","requires_mvid":"11112222-3333-4444-9555-666677778888","token_identity":"build-local"},"limitations":[],"member_refs":[],"metadata":{"status":"complete","table_row_counts":{},"version":"v4.0.30319"},"methods":[{"body":{"anchors":[],"decoded_instruction_count":1,"exception_regions":[],"file_offset":512,"header_format":"tiny","il_sha256":"4444444444444444444444444444444444444444444444444444444444444444","il_size":1,"init_locals":false,"instruction_count":1,"issue":null,"local_var_sig_token":null,"max_stack":8,"normalized_il_sha256":"5555555555555555555555555555555555555555555555555555555555555555","opcode_counts":{"ret":1},"rva":8192,"status":"present","truncated_instructions":0},"declaring_type":"Example.Program","declaring_type_token":"0x02000001","flags":22,"impl_flags":0,"name":"Main","row_offset":128,"rva":8192,"signature":{"calling_convention":"default","field_type":null,"generic_parameter_count":0,"issue":null,"kind":"method","parameter_count":0,"parameter_types":[],"parse_status":"decoded","raw_length":3,"raw_sha256":"3333333333333333333333333333333333333333333333333333333333333333","return_type":"void"},"token":"0x06000001"}],"module":{"enc_base_id":null,"enc_id":null,"generation":0,"mvid":"11112222-3333-4444-9555-666677778888","name":"Example.dll","row_offset":0,"token":"0x00000001"},"types":[]},"operation":"inspect_managed_members","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-dotnet-static","name":"REA managed static analysis provider","version":"1"},"raw_result":null,"subject":null}}],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"status":{"enum":["complete-within-inputs","partial"],"type":"string"}},"required":["status"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"maxItems":3,"minItems":1,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"projection_id":{"pattern":"^magp_[a-f0-9]{64}$","type":"string"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"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":["projection_id","root_artifact_sha256","source_evidence","summary","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Project Managed Application Graph"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List page targets exposed by the selected loopback Chrome DevTools Protocol endpoint. Optionally filter by exact origin. URLs preserve query values and fragments; only URL userinfo credentials are removed.","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":[{"cdp_endpoint":"http://127.0.0.1:9222"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"}},"required":["cdp_endpoint"],"type":"object"},"kind":"browser-provider","name":"list_browser_targets","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"targets":{"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"}},"required":["browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Browser Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one selected page target through CDP without evaluating JavaScript, navigating, clicking, closing, or mutating the page. If no origin filter is supplied, capture is scoped to the target\'s current origin. Returns DOM structure, accessibility, scripts, resources, attach-window network and console metadata, workers, and redacted storage inventory as 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","anyOf":[{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"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"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},{"additionalProperties":false,"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"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"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"}],"examples":[{"cdp_endpoint":"http://127.0.0.1:9222","target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"type":"object"},"kind":"browser-provider","name":"inspect_web_page","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","unavailable"],"type":"string"}},"required":["status","retained_bytes","excluded_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"],"type":"string"},"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"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}]},"status":{"enum":["not_approved","included","partial","unavailable"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}]}},"required":["format","json_shape"],"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"},"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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"}},"required":["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":["browser","target","capture_window","completeness","frames","dom","accessibility","scripts","resources","network","console","workers","metadata","storage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Web Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Capture JavaScript source from one selected CDP page and statically derive a chunk graph, route and endpoint candidates, vendor fingerprints, page-declared WebMCP metadata, and optionally fetch source maps from the selected target origin or explicitly requested origins. 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,"examples":[{"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,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"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"},"observation_ms":{"default":500,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},"kind":"browser-provider","name":"analyze_web_bundle","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text_available":{"const":true,"type":"boolean"}},"required":["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":{"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_scripts":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["complete","partial"],"type":"string"},"visited_ast_nodes":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","parsed_scripts","parse_failures","visited_ast_nodes"],"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":{"items":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"charset":{"const":"utf-8","type":"string"},"media_type":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"}},"required":["sha256","bytes","media_type","charset","text"],"type":"object"},"declared_url":{"type":"string"},"limitation":{"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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"}},"required":["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":{"const":"included","type":"string"}},"required":["script_key","declared_url","artifact","original_sources","original_module_edges","mappings","status","limitation"],"type":"object"},{"additionalProperties":false,"properties":{"artifact":{"type":"null"},"declared_url":{"type":"string"},"limitation":{"type":"string"},"mappings":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"original_module_edges":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"original_sources":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"script_key":{"type":"string"},"status":{"enum":["fetch_failed","invalid","policy_filtered"],"type":"string"}},"required":["script_key","declared_url","artifact","original_sources","original_module_edges","mappings","status","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"],"type":"string"}},"required":["status","requested","processed","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"},"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":["capture","observations","inferences","unknowns","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Analyze Web Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Arm a CDP observation window of the requested duration while the user operates the page. By default it follows the selected target\'s current origin; an explicit origin list controls which origins may be retained. Records navigation, redirect, lifecycle, and failure events.","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":[{"cdp_endpoint":"http://127.0.0.1:9222","observation_ms":10000,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"observation_ms":{"default":10000,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":1,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},"kind":"browser-provider","name":"observe_web_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"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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":["browser","target","window","timeline","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Observe Web Session"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inventory every page-registered WebMCP tool and its complete structural input-schema summary using the experimental CDP WebMCP domain. Metadata is 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":[{"cdp_endpoint":"http://127.0.0.1:9222","observation_ms":100,"target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},"kind":"browser-provider","name":"discover_webmcp_tools","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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":["browser","target","status","tools","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Discover Webmcp Tools"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Compare passive web captures by providing before and after, or compare recorded scenarios by providing before_scenario and after_scenario with an optional normalization policy. Use exactly one input group. Scenario comparison aligns exact step IDs, records deterministic literal normalization, and returns every artifact-level difference plus alignment failures inline. 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,"secret_references":[],"start_origin":"https://app.example.test"},"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,"secret_references":[],"start_origin":"https://app.example.test"},"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}]},"normalization":{"rules":[{"artifacts":["dom","accessibility"],"match":"build-123","replacement":"[BUILD_ID]","rule_id":"volatile-build-id"}]}}],"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":"Byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","unavailable"],"type":"string"}},"required":["status","retained_bytes","excluded_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":"Byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included"],"type":"string"},"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"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable"],"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":"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}],"description":"Value for json shape."}},"required":["format","json_shape"],"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"},"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.","minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"}},"required":["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":"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":"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 CDP target identifier selected from the endpoint\'s target listing.","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 CDP target identifier selected from the endpoint\'s target listing.","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":["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"},"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 CDP target identifier selected from the endpoint\'s target listing.","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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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":["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.","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.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"anyOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","description":"Value for kind.","type":"string"},"level":{"description":"Value for level.","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.","type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"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":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"request","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","type":"null"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","minLength":1,"type":"string"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"request-failed","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","type":"null"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":"Byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","type":"string"},"payload_type":{"const":"text","description":"Value for payload type.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","type":"null"},"payload_type":{"const":"binary","description":"Value for payload type.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"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":[{"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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"secret_references":{"description":"Value for secret references.","items":{"minLength":1,"type":"string"},"type":"array"},"start_origin":{"description":"Value for start origin.","minLength":1,"type":"string"}},"required":["start_origin","action_count","secret_references"],"type":"object"},"steps":{"description":"Value for steps.","items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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"},"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.","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.","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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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.","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.","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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"description":"Structured, caller-actionable error when the operation fails.","type":"null"},"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":{"const":"completed","description":"Current lifecycle or verification status.","type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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"},"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.","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.","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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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.","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.","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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"description":"Structured, caller-actionable error when the operation fails.","type":"string"},"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":["failed","cancelled"],"type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"minItems":1,"type":"array"}},"required":["browser","scenario","duration_ms","steps","events","completeness","limitations"],"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":"Byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","unavailable"],"type":"string"}},"required":["status","retained_bytes","excluded_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":"Byte count for retained.","maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included"],"type":"string"},"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"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}],"description":"Value for response."},"status":{"description":"Current lifecycle or verification status.","enum":["not_approved","included","partial","unavailable"],"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":"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"}},"required":["root_type","node_count","max_depth_observed","properties"],"type":"object"},{"type":"null"}],"description":"Value for json shape."}},"required":["format","json_shape"],"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"},"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.","minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","type":"string"}},"required":["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":"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":"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 CDP target identifier selected from the endpoint\'s target listing.","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 CDP target identifier selected from the endpoint\'s target listing.","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":["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"},"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 CDP target identifier selected from the endpoint\'s target listing.","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"}},"required":["root_type","node_count","max_depth_observed","properties"],"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":["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.","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.","minLength":1,"type":"string"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"anyOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","description":"Value for kind.","type":"string"},"level":{"description":"Value for level.","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.","type":"string"},"url":{"anyOf":[{"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"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":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"request","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","type":"null"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","type":"null"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"response","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","maximum":599,"minimum":100,"type":"integer"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"description":"Value for failure.","minLength":1,"type":"string"},"header_names":{"description":"Value for header names.","items":{"type":"string"},"type":"array"},"kind":{"const":"request-failed","description":"Value for kind.","type":"string"},"method":{"description":"Value for method.","minLength":1,"type":"string"},"resource_type":{"description":"Value for resource type.","minLength":1,"type":"string"},"sequence":{"description":"Value for sequence.","maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"description":"Current lifecycle or verification status.","type":"null"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":"Byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","type":"string"},"payload_type":{"const":"text","description":"Value for payload type.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"description":"Value for kind.","enum":["websocket-frame-sent","websocket-frame-received"],"type":"string"},"payload_bytes":{"description":"Byte count for payload.","maximum":9007199254740991,"minimum":0,"type":"integer"},"payload_text":{"description":"Value for payload text.","type":"null"},"payload_type":{"const":"binary","description":"Value for payload type.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"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":[{"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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","type":"string"},"url":{"description":"Value for url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"type":"array"},"scenario":{"additionalProperties":false,"description":"Value for scenario.","properties":{"action_count":{"description":"Value for action count.","maximum":9007199254740991,"minimum":1,"type":"integer"},"secret_references":{"description":"Value for secret references.","items":{"minLength":1,"type":"string"},"type":"array"},"start_origin":{"description":"Value for start origin.","minLength":1,"type":"string"}},"required":["start_origin","action_count","secret_references"],"type":"object"},"steps":{"description":"Value for steps.","items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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"},"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.","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.","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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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.","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.","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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"description":"Structured, caller-actionable error when the operation fails.","type":"null"},"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":{"const":"completed","description":"Current lifecycle or verification status.","type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"description":"Value for action.","minLength":1,"type":"string"},"after_url":{"description":"Value for after url.","properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"description":"Value for text.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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"},"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.","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.","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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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.","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.","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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"description":"Value for domain.","type":"string"},"http_only":{"description":"Value for http only.","type":"boolean"},"name":{"description":"Exact name used by this operation.","type":"string"},"path":{"description":"Local filesystem path used by this operation.","type":"string"},"same_site":{"description":"Value for same site.","enum":["Strict","Lax","None"],"type":"string"},"secure":{"description":"Value for secure.","type":"boolean"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"description":"Value for local storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"description":"Value for session storage.","items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","type":"string"},"value_sha256":{"description":"Exact SHA-256 digest of value.","type":"null"},"value_state":{"const":"redacted-secret","description":"Value for value state.","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","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.","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.","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":[{"type":"string"},{"type":"null"}],"description":"Value for origin."},"query_parameter_names":{"description":"Value for query parameter names.","items":{"type":"string"},"type":"array"},"redacted":{"description":"Value for redacted.","type":"boolean"},"url":{"description":"Value for url.","type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"description":"Value for completeness.","oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"description":"Value for equality eligible.","type":"boolean"},"missing_sections":{"description":"Value for missing sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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"},"minItems":1,"type":"array"},"status":{"const":"incomplete","description":"Current lifecycle or verification status.","type":"string"},"truncated_sections":{"description":"Value for truncated sections.","items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"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":{"const":"truncated","description":"Current lifecycle or verification status.","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"},"minItems":1,"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":{"description":"Structured, caller-actionable error when the operation fails.","type":"string"},"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":["failed","cancelled"],"type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"step_index":{"description":"Value for step index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"minItems":1,"type":"array"}},"required":["browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"},"normalization":{"additionalProperties":false,"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"},"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"type":"array"}},"type":"object"}},"type":"object"},"kind":"browser-provider","name":"compare_web_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"additionalProperties":false,"properties":{"alignment":{"additionalProperties":false,"properties":{"after_only":{"items":{"minLength":1,"type":"string"},"type":"array"},"aligned_steps":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"before_only":{"items":{"minLength":1,"type":"string"},"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":{"minLength":1,"type":"string"},"step_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["code","step_id","reason"],"type":"object"},"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":{"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["total"],"type":"object"},"comparison_kind":{"const":"browser_scenario","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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"},"minItems":1,"type":"array"},"match":{"description":"Exact public literal to replace; regular expressions are not used.","minLength":1,"type":"string"},"replacement":{"description":"Recorded replacement text used in normalized comparison.","type":"string"},"rule_id":{"description":"Stable rule identity; rules execute in rule_id order.","minLength":1,"type":"string"}},"required":["rule_id","artifacts","match","replacement"],"type":"object"},"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"},"steps":{"items":{"additionalProperties":false,"properties":{"after_action":{"minLength":1,"type":"string"},"after_step_index":{"maximum":9007199254740991,"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":[{"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"},"type":"array"},"before_action":{"minLength":1,"type":"string"},"before_step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"status":{"enum":["changed","unchanged","unknown"],"type":"string"},"step_id":{"minLength":1,"type":"string"}},"required":["step_id","before_step_index","after_step_index","before_action","after_action","status","artifact_diffs"],"type":"object"},"type":"array"}},"required":["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":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}],"default":{"changes":[],"reason":"Dimension was not recorded by this version 1 capture diff.","status":"unknown","total_changes":0}},"dom_structure":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"metadata":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"network":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"resources":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"scripts":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}]},"storage":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"}],"default":{"changes":[],"reason":"Dimension was not recorded by this version 1 capture diff.","status":"unknown","total_changes":0}},"webmcp":{"anyOf":[{"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"},"reason":{"type":"null"},"status":{"const":"changed","type":"string"},"total_changes":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["status","total_changes","changes","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"null"},"status":{"const":"unchanged","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","reason"],"type":"object"},{"additionalProperties":false,"properties":{"changes":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"reason":{"type":"string"},"status":{"const":"unknown","type":"string"},"total_changes":{"const":0,"type":"number"}},"required":["total_changes","changes","status","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"}},"required":["overall_status","before_target","after_target","dimensions","limitations"],"type":"object"}]}},"required":["result","evidence_id","evidence"],"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 configured page as an inline, content-addressed PNG artifact. The operation 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":[{"cdp_endpoint":"http://127.0.0.1:9222","target_id":"TARGET_ID_FROM_LIST_BROWSER_TARGETS"}],"properties":{"allowed_origins":{"description":"Value for allowed origins.","items":{"minLength":1,"type":"string"},"type":"array"},"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},"kind":"browser-provider","name":"capture_web_screenshot","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"artifact":{"additionalProperties":false,"properties":{"bytes":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["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"},"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":["browser","target","captured_at","viewport","artifact","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 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"},"before":{"bytes":70,"data_base64":"iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8/5+hHgAHggJ/PzWvWQAAAABJRU5ErkJggg==","media_type":"image/png","sha256":"153cf6c9a526a63053a37b10234c2fd85df38887c2dc0a800d90abfa6631d01c"},"channel_threshold":0}],"properties":{"after":{"description":"The later or right-hand observation to compare.","properties":{"bytes":{"description":"Value for bytes.","maximum":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"description":"Value for data base64.","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"}},"required":["sha256","bytes","media_type","data_base64"],"type":"object"},"channel_threshold":{"default":0,"description":"Value for channel threshold.","maximum":255,"minimum":0,"type":"integer"}},"required":["before","after"],"type":"object"},"kind":"browser-provider","name":"compare_web_screenshots","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"oneOf":[{"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":{"const":0,"type":"number"},"changed_ratio":{"const":0,"type":"number"},"channel_threshold":{"maximum":255,"minimum":0,"type":"integer"},"compared_pixels":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"maximum_channel_delta":{"maximum":255,"minimum":0,"type":"integer"},"mean_absolute_channel_delta":{"maximum":255,"minimum":0,"type":"number"},"status":{"const":"identical","type":"string"}},"required":["before","after","channel_threshold","limitations","status","compared_pixels","changed_pixels","changed_ratio","maximum_channel_delta","mean_absolute_channel_delta"],"type":"object"},{"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":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"changed_ratio":{"exclusiveMinimum":0,"maximum":1,"type":"number"},"channel_threshold":{"maximum":255,"minimum":0,"type":"integer"},"compared_pixels":{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"limitations":{"items":{"type":"string"},"type":"array"},"maximum_channel_delta":{"exclusiveMinimum":0,"maximum":255,"type":"integer"},"mean_absolute_channel_delta":{"exclusiveMinimum":0,"maximum":255,"type":"number"},"status":{"const":"different","type":"string"}},"required":["before","after","channel_threshold","limitations","status","compared_pixels","changed_pixels","changed_ratio","maximum_channel_delta","mean_absolute_channel_delta"],"type":"object"},{"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":{"type":"null"},"changed_ratio":{"type":"null"},"channel_threshold":{"maximum":255,"minimum":0,"type":"integer"},"compared_pixels":{"const":0,"type":"number"},"limitations":{"items":{"type":"string"},"type":"array"},"maximum_channel_delta":{"type":"null"},"mean_absolute_channel_delta":{"type":"null"},"status":{"const":"dimension_mismatch","type":"string"}},"required":["before","after","channel_threshold","limitations","status","compared_pixels","changed_pixels","changed_ratio","maximum_channel_delta","mean_absolute_channel_delta"],"type":"object"}]}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Compare Web Screenshots"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Run a controlled browser scenario when passive observation cannot exercise the application. Launch the selected executable or connect to a loopback CDP target, provide a start URL and actions, and select storage or artifacts when needed. Environment, empty storage, and a URL-only final capture are defaults; provide initial storage or additional artifacts when needed. Agents can run their own local fixture servers to control application responses. Actions run until completion or cancellation unless timeout_ms is set. Results are returned inline.","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_timeout","duration_ms":250,"step_id":"settle"}],"browser":{"executable_path":"/opt/chromium/chrome","mode":"launch"},"start_url":{"query":[],"url":"https://app.example.test/"}}],"properties":{"actions":{"description":"Required sequence of explicit browser 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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"url":{"description":"Value for url.","minLength":1,"type":"string"}},"required":["url"],"type":"object"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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.","exclusiveMinimum":0,"maximum":9007199254740991,"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","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.","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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"type":"object"}]},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"role","description":"Value for kind.","type":"string"},"name":{"description":"Exact name used by this operation.","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"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"css","description":"Value for kind.","type":"string"},"selector":{"description":"Value for selector.","minLength":1,"type":"string"}},"required":["kind","selector"],"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._-]*$","type":"string"},"timeout_ms":{"description":"Optional action deadline in milliseconds; omitted means wait until completion or request cancellation.","maximum":9007199254740991,"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":"Wait this many milliseconds; the wait ends early on cancellation.","maximum":9007199254740991,"minimum":1,"type":"integer"},"step_id":{"description":"Value for step id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"}},"required":["step_id","action","duration_ms"],"type":"object"}]},"minItems":1,"type":"array"},"browser":{"description":"Required launch/connect selection. Launch uses the selected executable and an owned temporary profile; connect uses one loopback CDP endpoint and target.","oneOf":[{"additionalProperties":false,"properties":{"executable_path":{"description":"Local filesystem path for executable.","minLength":1,"type":"string"},"headless":{"default":true,"description":"Run without a visible browser window; defaults to true and can be disabled when the host supports a display.","type":"boolean"},"mode":{"const":"launch","description":"Operation mode that selects the requested behavior.","type":"string"}},"required":["mode","executable_path"],"type":"object"},{"additionalProperties":false,"properties":{"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"mode":{"const":"connect","description":"Operation mode that selects the requested behavior.","type":"string"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["mode","cdp_endpoint","target_id"],"type":"object"}]},"capture":{"additionalProperties":false,"default":{"after_each_step":[],"at_end":["url"],"events":[]},"description":"Optional retained artifacts and event families. Defaults to only a final sanitized URL; request screenshots, DOM, accessibility, history, storage, and event capture explicitly.","properties":{"after_each_step":{"default":[],"description":"Value for after each step.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"type":"array"},"at_end":{"default":["url"],"description":"Value for at end.","items":{"enum":["screenshot","dom","accessibility","url","history","storage"],"type":"string"},"type":"array"},"events":{"default":[],"description":"Value for events.","items":{"enum":["console","page-errors","network","websockets","frames","workers","popups","downloads"],"type":"string"},"type":"array"}},"type":"object"},"environment":{"additionalProperties":false,"default":{"color_scheme":"light","locale":"en-US","reduced_motion":"reduce","service_workers":"block","timezone":"UTC","viewport":{"device_scale_factor":1,"height":720,"width":1280}},"description":"Optional deterministic browser settings. Defaults to 1280x720, en-US, UTC, light mode, reduced motion, and blocked service workers.","properties":{"color_scheme":{"default":"light","description":"Value for color scheme.","enum":["light","dark","no-preference"],"type":"string"},"locale":{"default":"en-US","description":"Value for locale.","minLength":2,"pattern":"^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$","type":"string"},"reduced_motion":{"default":"reduce","description":"Value for reduced motion.","enum":["reduce","no-preference"],"type":"string"},"service_workers":{"default":"block","description":"Value for service workers.","enum":["allow","block"],"type":"string"},"timezone":{"default":"UTC","description":"Value for timezone.","minLength":1,"pattern":"^[A-Za-z0-9_+-]+(?:\\\\/[A-Za-z0-9_+-]+)*$","type":"string"},"viewport":{"additionalProperties":false,"default":{"device_scale_factor":1,"height":720,"width":1280},"description":"Value for viewport.","properties":{"device_scale_factor":{"default":1,"description":"Value for device scale factor.","exclusiveMinimum":0,"type":"number"},"height":{"default":720,"description":"Value for height.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"width":{"default":1280,"description":"Value for width.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"type":"object"}},"type":"object"},"secrets":{"default":[],"description":"Optional environment-variable references for values used in actions, URLs, storage, or replay, and for redacting matching observed text. Secret values are never supplied inline.","items":{"additionalProperties":false,"properties":{"environment_variable":{"description":"Value for environment variable.","minLength":1,"type":"string"},"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"}},"required":["secret_id","environment_variable"],"type":"object"},"type":"array"},"start_url":{"additionalProperties":false,"description":"Required initial HTTP(S) URL. Query values must be declared separately as public literals or secret references.","properties":{"query":{"default":[],"description":"Non-empty feature or text query to investigate.","items":{"additionalProperties":false,"properties":{"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"url":{"description":"Value for url.","minLength":1,"type":"string"}},"required":["url"],"type":"object"},"storage":{"additionalProperties":false,"description":"Optional initial cookies, local storage, or session storage. Defaults to empty; every supplied value and origin must be declared and within the allowed origins.","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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"url":{"description":"Value for url.","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.","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":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","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"},"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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"origin":{"description":"Value for origin.","minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"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.","minLength":1,"type":"string"},"value":{"description":"Value for value.","oneOf":[{"additionalProperties":false,"properties":{"source":{"const":"literal","description":"Value for source.","type":"string"},"value":{"description":"Value for value.","type":"string"}},"required":["source","value"],"type":"object"},{"additionalProperties":false,"properties":{"secret_id":{"description":"Value for secret id.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"source":{"const":"secret","description":"Value for source.","type":"string"}},"required":["source","secret_id"],"type":"object"}]}},"required":["name","value"],"type":"object"},"type":"array"},"origin":{"description":"Value for origin.","minLength":1,"type":"string"}},"required":["origin","entries"],"type":"object"},"type":"array"}},"type":"object"}},"required":["browser","start_url","actions"],"type":"object"},"kind":"browser-provider","name":"capture_browser_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["mode","process_ownership","cleanup","product","version"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"},"status":{"const":"incomplete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"const":"truncated","type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"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":{"anyOf":[{"additionalProperties":false,"properties":{"kind":{"const":"console","type":"string"},"level":{"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text":{"type":"string"},"url":{"anyOf":[{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"stack":{"anyOf":[{"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":{"type":"null"},"header_names":{"items":{"type":"string"},"type":"array"},"kind":{"const":"request","type":"string"},"method":{"minLength":1,"type":"string"},"resource_type":{"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"type":"null"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"type":"null"},"header_names":{"items":{"type":"string"},"type":"array"},"kind":{"const":"response","type":"string"},"method":{"minLength":1,"type":"string"},"resource_type":{"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"maximum":599,"minimum":100,"type":"integer"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","failure"],"type":"object"},{"additionalProperties":false,"properties":{"failure":{"minLength":1,"type":"string"},"header_names":{"items":{"type":"string"},"type":"array"},"kind":{"const":"request-failed","type":"string"},"method":{"minLength":1,"type":"string"},"resource_type":{"minLength":1,"type":"string"},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"type":"null"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","method","url","resource_type","header_names","kind","status","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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"type":"string"},"payload_type":{"const":"text","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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"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":{"type":"null"},"payload_type":{"const":"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","url","payload_bytes","truncated","payload_type","payload_text"],"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":[{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"type":"string"},"url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"}},"required":["sequence","step_index","kind","suggested_filename","url"],"type":"object"}]},"type":"array"},"retained":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["retained","dropped","items"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"scenario":{"additionalProperties":false,"properties":{"action_count":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"secret_references":{"items":{"minLength":1,"type":"string"},"type":"array"},"start_origin":{"minLength":1,"type":"string"}},"required":["start_origin","action_count","secret_references"],"type":"object"},"steps":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"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":{"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":{"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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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"},"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":{"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":{"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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["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":{"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":{"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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"},"status":{"const":"incomplete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"const":"truncated","type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"}]},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"type":"null"},"event_sequence_end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"const":"completed","type":"string"},"step_id":{"minLength":1,"type":"string"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"},{"additionalProperties":false,"properties":{"action":{"minLength":1,"type":"string"},"after_url":{"additionalProperties":false,"properties":{"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"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":{"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":{"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":9007199254740991,"minimum":0,"type":"integer"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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"},"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":{"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":{"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":9007199254740991,"minimum":1,"type":"integer"},"data_base64":{"type":"string"},"media_type":{"const":"image/png","type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"}},"required":["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":{"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":{"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":{"oneOf":[{"additionalProperties":false,"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"domain":{"type":"string"},"http_only":{"type":"boolean"},"name":{"type":"string"},"path":{"type":"string"},"same_site":{"enum":["Strict","Lax","None"],"type":"string"},"secure":{"type":"boolean"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","domain","path","secure","http_only","same_site","value_state","value_sha256"],"type":"object"}]},"type":"array"},"local_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"type":"array"},"session_storage":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"value_state":{"const":"hashed","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"},{"additionalProperties":false,"properties":{"name":{"type":"string"},"value_sha256":{"type":"null"},"value_state":{"const":"redacted-secret","type":"string"}},"required":["name","value_state","value_sha256"],"type":"object"}]},"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"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":{"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":{"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":[{"type":"string"},{"type":"null"}]},"query_parameter_names":{"items":{"type":"string"},"type":"array"},"redacted":{"type":"boolean"},"url":{"type":"string"}},"required":["url","origin","query_parameter_names","redacted"],"type":"object"},"completeness":{"oneOf":[{"additionalProperties":false,"properties":{"equality_eligible":{"const":true,"type":"boolean"},"missing_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"status":{"const":"complete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"},"status":{"const":"incomplete","type":"string"},"truncated_sections":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"},{"additionalProperties":false,"properties":{"equality_eligible":{"const":false,"type":"boolean"},"missing_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"type":"array"},"status":{"const":"truncated","type":"string"},"truncated_sections":{"items":{"enum":["action","screenshot","dom","accessibility","url","history","storage","events","frames","workers","popups","websockets"],"type":"string"},"minItems":1,"type":"array"}},"required":["status","equality_eligible","missing_sections","truncated_sections"],"type":"object"}]},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"type":"string"},"event_sequence_end":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"event_sequence_start":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"status":{"enum":["failed","cancelled"],"type":"string"},"step_id":{"minLength":1,"type":"string"},"step_index":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_index","step_id","action","elapsed_ms","before_url","after_url","event_sequence_start","event_sequence_end","artifacts","completeness","status","error"],"type":"object"}]},"minItems":1,"type":"array"}},"required":["browser","scenario","duration_ms","steps","events","completeness","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Capture Browser Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List every Electron file:// page target from a selected loopback CDP endpoint. Local file paths are canonicalized after symlink resolution. Selecting an endpoint exposes every eligible target and its local path metadata.","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":[{"cdp_endpoint":"http://127.0.0.1:9223"}],"properties":{"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"}},"required":["cdp_endpoint"],"type":"object"},"kind":"electron-provider","name":"list_electron_targets","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"unsupported_url":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unsupported_url","non_page"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"targets":{"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"}},"required":["browser","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"List Electron Targets"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"Passively inspect one Electron file page by supplying its loopback CDP endpoint and target ID. The provider rechecks that the target currently exists at that endpoint and is a local file page. Returns frames, DOM structure, resource paths, and scripts without evaluating renderer JavaScript or invoking Electron APIs. The selected endpoint exposes every local file page and its metadata to this tool.","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":{"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"include_script_sources":{"const":false,"default":false,"description":"Whether to include script sources in the result.","type":"boolean"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id"],"type":"object"},{"additionalProperties":false,"properties":{"cdp_endpoint":{"description":"Literal loopback Chrome DevTools Protocol endpoint.","minLength":1,"type":"string"},"include_script_sources":{"const":true,"description":"Whether to include script sources in the result.","type":"boolean"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"target_id":{"description":"Exact CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["cdp_endpoint","target_id","include_script_sources"],"type":"object"}],"examples":[{"cdp_endpoint":"http://127.0.0.1:9223","target_id":"TARGET_ID_FROM_LIST_ELECTRON_TARGETS"}],"type":"object"},"kind":"electron-provider","name":"inspect_electron_page","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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":{"minLength":1,"type":"string"},"sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"text":{"type":"string"}},"required":["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":[{"minLength":1,"type":"string"},{"type":"null"}]},"parent_frame_id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_id":{"minLength":1,"type":"string"},"type":{"minLength":1,"type":"string"}},"required":["target_id","type","file_path","attached","opener_target_id","parent_frame_id"],"type":"object"},"type":"array"}},"required":["browser","target","capture_window","completeness","frames","dom","scripts","resources","workers","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Inspect Electron Page"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Reconstruct one local ASAR or extracted JavaScript application as an inline application graph without executing it. Returns all recovered graph nodes, edges, semantic relations, limitations, and 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":[{"format":"auto","input_path":"/Applications/Example.app/Contents/Resources/app.asar"}],"properties":{"format":{"default":"auto","description":"Declared input artifact format.","enum":["auto","asar","directory"],"type":"string"},"input_path":{"description":"Local filesystem path for input.","minLength":1,"type":"string"}},"required":["input_path"],"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"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"format":{"enum":["asar","directory"],"type":"string"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"input_path":{"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":{"minLength":1,"type":"string"},"type":"array"},"root_artifact_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"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"},"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":{"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"},"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","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"},"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":9007199254740991,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"minLength":1,"type":"string"},"type":"array"},"status":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["function_node_id","algorithm","status","components","limitations","evidence","fingerprint_id","fingerprint_sha256"],"type":"object"},"type":"array"},"graph_id":{"pattern":"^jsrg_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"minLength":1,"type":"string"},"role_key":{"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"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"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptSemanticRelationGraph","type":"string"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"detail":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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"},"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"},"type":"array"}},"required":["schema","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"},"modules":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nested_asar_containers":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parse_failures":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"parsed_javascript_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"relevant_files":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"text_bytes_read":{"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_bytes_read","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":["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"],"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_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","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":[],"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"},"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":{"cdp_endpoint":"http://127.0.0.1:9223","include_script_sources":true,"target_id":"example-target"},"predicate_type":"rea.electron-page-inspection","provider":{"id":"rea-cdp-electron","name":"REA Electron file-page CDP observation provider","version":"1"},"raw_result":null,"subject":null}],"static_layers":[{"analysis":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}}}]}],"properties":{"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"role":{"default":"application","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.","type":"string"},"kind":{"const":"file-root","description":"Value for kind.","type":"string"},"root":{"description":"Value for root.","minLength":1,"type":"string"}},"required":["kind","root"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","description":"Value for artifact prefix.","type":"string"},"kind":{"const":"url-prefix","description":"Value for kind.","type":"string"},"prefix":{"description":"Value for prefix.","minLength":1,"type":"string"}},"required":["kind","prefix"],"type":"object"}]},"type":"array"}},"required":["analysis"],"type":"object"},"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"reconciliation_id":{"pattern":"^jrr_[a-f0-9]{64}$","type":"string"},"reconciliations":{"items":{"anyOf":[{"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":9007199254740991,"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"},"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-location-unresolved","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":{"pattern":"^jrl_[a-f0-9]{64}$","type":"string"},"static_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"const":"matched","type":"string"}},"required":["reconciliation_id","entity_kind","runtime_evidence_id","runtime_node_id","basis","confidence","reason","candidate_static_count","candidate_static_nodes","static_layer_id","static_node_id","status"],"type":"object"},{"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":9007199254740991,"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"},"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-location-unresolved","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":{"type":"null"},"static_node_id":{"type":"null"},"status":{"enum":["ambiguous","unmatched","unknown"],"type":"string"}},"required":["reconciliation_id","entity_kind","runtime_evidence_id","runtime_node_id","basis","confidence","reason","candidate_static_count","candidate_static_nodes","static_layer_id","static_node_id","status"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"target_location":{"anyOf":[{"minLength":1,"type":"string"},{"additionalProperties":false,"properties":{"kind":{"const":"unresolved","type":"string"},"reason":{"const":"unverifiable-file-location","type":"string"},"reported_url":{"minLength":1,"type":"string"}},"required":["kind","reported_url","reason"],"type":"object"}]},"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"},"minItems":1,"type":"array"},"source_map_authority":{"additionalProperties":false,"properties":{"limitation":{"minLength":1,"type":"string"},"runtime_script_declarations":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"static_layer_count":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"used_for_primary_matching":{"const":false,"type":"boolean"}},"required":["used_for_primary_matching","static_layer_count","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":{"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":"","type":"string"},"kind":{"const":"file-root","type":"string"},"root":{"minLength":1,"type":"string"}},"required":["kind","root","artifact_prefix"],"type":"object"},{"additionalProperties":false,"properties":{"artifact_prefix":{"default":"","type":"string"},"kind":{"const":"url-prefix","type":"string"},"prefix":{"minLength":1,"type":"string"}},"required":["kind","prefix","artifact_prefix"],"type":"object"}]},"type":"array"}},"required":["layer_id","role","evidence_id","graph_id","root_artifact_sha256","input_path","format","runtime_mappings"],"type":"object"},"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"},"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"},"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":["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"],"type":"object"},"requiresSession":false,"title":"Reconcile Javascript Runtime"},{"analysisOperation":null,"annotations":{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false},"description":"Use this for a provider-owned Electron run when passive CDP or Inspector observation cannot exercise application behavior. REA owns startup and teardown, accepts caller-defined 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","args":[],"executable_path":"/Applications/Electron.app/Contents/MacOS/Electron"}],"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.","minLength":1,"type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["step_id","kind","selector"],"type":"object"},{"additionalProperties":false,"properties":{"duration_ms":{"description":"Value for duration ms.","maximum":9007199254740991,"minimum":0,"type":"integer"},"kind":{"const":"wait","description":"Value for kind.","type":"string"},"step_id":{"description":"Value for step id.","minLength":1,"type":"string"},"window_index":{"description":"Value for window index.","maximum":9007199254740991,"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.","minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":9007199254740991,"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.","minLength":1,"type":"string"},"window_index":{"default":0,"description":"Value for window index.","maximum":9007199254740991,"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.","minLength":1,"type":"string"},"url":{"description":"Value for url.","minLength":1,"type":"string"}},"required":["step_id","kind","delivery","url"],"type":"object"}]},"type":"array"},"application_path":{"description":"Local filesystem path for application.","minLength":1,"type":"string"},"application_root":{"description":"Local filesystem application root selected for this operation.","minLength":1,"type":"string"},"args":{"default":[],"description":"Value for args.","items":{"type":"string"},"type":"array"},"executable_path":{"description":"Local filesystem path for executable.","minLength":1,"type":"string"}},"required":["executable_path","application_path"],"type":"object"},"kind":"electron-provider","name":"capture_electron_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"actions":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"type":"null"},"kind":{"enum":["click","wait","renderer-reload","renderer-crash","deep-link"],"type":"string"},"status":{"const":"completed","type":"string"},"step_id":{"minLength":1,"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","elapsed_ms","status","error"],"type":"object"},{"additionalProperties":false,"properties":{"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"error":{"type":"string"},"kind":{"enum":["click","wait","renderer-reload","renderer-crash","deep-link"],"type":"string"},"status":{"enum":["failed","cancelled"],"type":"string"},"step_id":{"minLength":1,"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]},"window_index":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]}},"required":["step_id","kind","window_index","target","elapsed_ms","status","error"],"type":"object"}]},"type":"array"},"application":{"additionalProperties":false,"properties":{"application_path":{"minLength":1,"type":"string"},"cleanup":{"const":"terminated-owned-process","type":"string"},"electron_version":{"minLength":1,"type":"string"},"executable_path":{"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":{"type":"string"},"type":"array"},"observed_roles":{"items":{"type":"string"},"type":"array"},"pre_capture_activity":{"const":"unavailable","type":"string"},"status":{"enum":["complete","partial_attach","hook_conflict","target_exited","cleanup_failed"],"type":"string"},"unavailable_event_families":{"items":{"type":"string"},"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":{"type":"string"},"type":"array"},"artifact_path":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"correlation_id":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"default":"electron-active-hook","type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","channel","frame","argument_shapes","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["events","observed"],"type":"object"},"limitations":{"items":{"type":"string"},"type":"array"},"processes":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"pid":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"service_name":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":{"minLength":1,"type":"string"}},"required":["pid","type","name","service_name"],"type":"object"},"type":"array"}},"required":["items"],"type":"object"},"timeline":{"additionalProperties":false,"default":{"events":[],"observed":0},"properties":{"events":{"items":{"additionalProperties":false,"properties":{"argument_shapes":{"items":{"type":"string"},"type":"array"},"artifact_path":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"correlation_id":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"frame":{"anyOf":[{"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":[{"type":"string"},{"type":"null"}]},"receiver":{"anyOf":[{"type":"string"},{"type":"null"}]},"result_shape":{"anyOf":[{"type":"string"},{"type":"null"}]},"sender":{"anyOf":[{"type":"string"},{"type":"null"}]},"sequence":{"maximum":9007199254740991,"minimum":1,"type":"integer"},"source":{"type":"string"},"target":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["sequence","correlation_id","kind","event","phase","channel","direction","sender","receiver","frame","target","argument_shapes","result_shape","process_type","source","capture_method","artifact_path","artifact_sha256","error"],"type":"object"},"type":"array"},"observed":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["events","observed"],"type":"object"},"windows":{"items":{"additionalProperties":false,"properties":{"destroyed":{"type":"boolean"},"title":{"type":"string"},"url":{"type":"string"},"visible":{"anyOf":[{"type":"boolean"},{"type":"null"}]},"web_contents_id":{"type":"string"},"window_id":{"type":"string"}},"required":["window_id","web_contents_id","url","title","visible","destroyed"],"type":"object"},"type":"array"}},"required":["application","actions","windows","processes","ipc","timeline","coverage","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Capture Electron Scenario"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":true,"readOnlyHint":false},"description":"List every eligible Node/Electron V8 Inspector target from an explicit literal-loopback endpoint. Node discovery file locations that cannot be verified are preserved as unresolved reported URLs; they do not prove filesystem identity. Listing does not attach to targets.","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":[{"inspector_endpoint":"http://127.0.0.1:9229"}],"properties":{"inspector_endpoint":{"description":"Value for inspector endpoint.","minLength":1,"type":"string"}},"required":["inspector_endpoint"],"type":"object"},"kind":"runtime-provider","name":"list_javascript_runtime_targets","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"unconnectable":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unsupported_location","unconnectable"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"minLength":1,"type":"string"},"protocol_version":{"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"targets":{"items":{"additionalProperties":false,"properties":{"attached":{"type":"boolean"},"location":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"minLength":1,"type":"string"},"sanitized_url":{"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},{"additionalProperties":false,"properties":{"kind":{"const":"unresolved","type":"string"},"reason":{"const":"unverifiable-file-location","type":"string"},"reported_url":{"minLength":1,"type":"string"}},"required":["kind","reported_url","reason"],"type":"object"}]},"protocol_type":{"minLength":1,"type":"string"},"target_id":{"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location"],"type":"object"},"type":"array"}},"required":["runtime","targets","excluded","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 Node/Electron V8 Inspector target by supplying its loopback Inspector endpoint and target ID. The provider rechecks target presence and attachability; a Node discovery file location may remain unresolved. Loaded script locations are validated independently from Debugger.scriptParsed. Captures script and Runtime execution-context metadata. REA never evaluates, pauses, resumes, reads source, or instruments the target; require/import edges, EventEmitter activity, and Electron IPC remain explicit unknowns. Reconcile the result with static Application Graph Evidence using reconcile_javascript_runtime. The selected endpoint exposes every target it serves to this tool.","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":[{"inspector_endpoint":"http://127.0.0.1:9229","target_id":"TARGET_ID_FROM_LIST_JAVASCRIPT_RUNTIME_TARGETS"}],"properties":{"inspector_endpoint":{"description":"Value for inspector endpoint.","minLength":1,"type":"string"},"observation_ms":{"default":100,"description":"Value for observation ms.","maximum":9007199254740991,"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 CDP target identifier selected from the endpoint\'s target listing.","minLength":1,"type":"string"}},"required":["inspector_endpoint","target_id"],"type":"object"},"kind":"runtime-provider","name":"observe_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"minLength":1,"type":"string"},"type":"array"}},"required":["observation_ms","events_observed","events_retained","events_dropped","metadata_bytes_retained","truncated","truncation_reasons"],"type":"object"},"directly_observed":{"items":{"minLength":1,"type":"string"},"type":"array"},"execution_contexts":{"items":{"additionalProperties":false,"properties":{"context_key":{"minLength":1,"type":"string"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]},"origin":{"anyOf":[{"type":"string"},{"type":"null"}]},"state":{"enum":["created","destroyed","cleared"],"type":"string"}},"required":["context_key","state","name","origin"],"type":"object"},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"runtime":{"additionalProperties":false,"properties":{"product":{"minLength":1,"type":"string"},"protocol_version":{"minLength":1,"type":"string"},"v8_version":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["product","protocol_version","v8_version"],"type":"object"},"scripts":{"additionalProperties":false,"properties":{"excluded":{"additionalProperties":false,"properties":{"invalid_protocol_value":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"unsupported_location":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["unsupported_location","invalid_protocol_value"],"type":"object"},"items":{"items":{"additionalProperties":false,"properties":{"cdp_hash":{"anyOf":[{"type":"string"},{"type":"null"}]},"execution_context_key":{"anyOf":[{"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":{"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"minLength":1,"type":"string"},"sanitized_url":{"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"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":{"anyOf":[{"oneOf":[{"additionalProperties":false,"properties":{"authority":{"const":"scope-fallback","type":"string"},"file_path":{"minLength":1,"type":"string"},"kind":{"const":"file","type":"string"}},"required":["kind","file_path"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"url","type":"string"},"origin":{"minLength":1,"type":"string"},"sanitized_url":{"minLength":1,"type":"string"}},"required":["kind","origin","sanitized_url"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"builtin","type":"string"},"specifier":{"minLength":1,"type":"string"}},"required":["kind","specifier"],"type":"object"}]},{"additionalProperties":false,"properties":{"kind":{"const":"unresolved","type":"string"},"reason":{"const":"unverifiable-file-location","type":"string"},"reported_url":{"minLength":1,"type":"string"}},"required":["kind","reported_url","reason"],"type":"object"}]},"protocol_type":{"minLength":1,"type":"string"},"runtime_kind":{"anyOf":[{"enum":["node","electron-main","electron-preload","electron-renderer"],"type":"string"},{"const":"unknown","type":"string"}]},"runtime_kind_authority":{"enum":["caller-declared-unverified","not-declared"],"type":"string"},"target_id":{"minLength":1,"type":"string"}},"required":["target_id","protocol_type","attached","location","runtime_kind","runtime_kind_authority"],"type":"object"},"unavailable_without_instrumentation":{"items":{"minLength":1,"type":"string"},"type":"array"},"unknowns":{"items":{"minLength":1,"type":"string"},"type":"array"}},"required":["runtime","target","capture","scripts","execution_contexts","directly_observed","unavailable_without_instrumentation","unknowns","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 every reachable part of an authenticated JavaScript Application Graph supplied as inline Evidence. 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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"direction":"both","seed":{"case_sensitive":false,"kind":"module","match":"exact","value":"renderer.js"}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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.","minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"}},"required":["seed","application"],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"source_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-source","partial","no-match"],"type":"string"},"total_seed_matches":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["status","source_graph_status","total_seed_matches"],"type":"object"},"direction":{"enum":["outgoing","incoming","both"],"type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"graph":{"anyOf":[{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},{"type":"null"}]},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"native_handoffs":{"items":{"additionalProperties":false,"properties":{"artifact_path":{"anyOf":[{"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"},"type":"array"},"export_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"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"},"type":"array"},"recommended_tools":{"items":{"enum":["open_binary","binary_overview","search_procedures","analyze_function","xrefs"],"type":"string"},"type":"array"},"requested_exports":{"items":{"minLength":1,"type":"string"},"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"},"type":"array"},"paths":{"items":{"additionalProperties":false,"properties":{"authorities":{"items":{"minLength":1,"type":"string"},"type":"array"},"contains_inference":{"type":"boolean"},"edge_ids":{"items":{"pattern":"^jag_edge_[a-f0-9]{64}$","type":"string"},"type":"array"},"end_kind":{"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"},"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"},"type":"array"},"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":{"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":{"minLength":1,"type":"string"},"kind":{"minLength":1,"type":"string"},"node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}},"required":["node_id","kind","basis","field"],"type":"object"},"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":["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"],"type":"object"},"requiresSession":false,"title":"Trace Application Feature"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Trace static JavaScript data-flow, direct call/return, and closure relations from inline application Evidence. 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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"query":{"direction":"backward-provenance","seed":{"kind":"semantic-node","node_id":"jsrg_node_0000000000000000000000000000000000000000000000000000000000000000"}}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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"},"minItems":1,"type":"array"},"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"},"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"},"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.","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.","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.","minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"description":"Value for field.","minLength":1,"type":"string"},"kind":{"const":"boundary-field","description":"Value for kind.","type":"string"}},"required":["kind","field"],"type":"object"}]}},"required":["seed","direction"],"type":"object"}},"required":["application","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"coverage":{"additionalProperties":false,"properties":{"status":{"enum":["complete","partial","unavailable"],"type":"string"}},"required":["status"],"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"},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"nodes":{"items":{"additionalProperties":false,"properties":{"application_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"minLength":1,"type":"string"},"role_key":{"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"node_id":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["kind","identity","function_node_id","application_node_ids","label","properties","evidence","node_id","identifier_strategy"],"type":"object"},"type":"array"},"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"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":{"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"endpoint","type":"string"},"value":{"minLength":1,"type":"string"}},"required":["kind","value"],"type":"object"},{"additionalProperties":false,"properties":{"kind":{"const":"event","type":"string"},"name":{"minLength":1,"type":"string"}},"required":["kind","name"],"type":"object"},{"additionalProperties":false,"properties":{"field":{"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"},"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","unsupported"],"type":"string"},"summary":{"additionalProperties":false,"properties":{"relevant_unknowns":{"maximum":9007199254740991,"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","traversed_nodes","traversed_relations","traversed_functions","traversed_modules","relevant_unknowns"],"type":"object"},"unknowns":{"items":{"additionalProperties":false,"properties":{"candidate_node_ids":{"items":{"pattern":"^jsrg_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"detail":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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"},"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"},"type":"array"}},"required":["query_id","source_graph_id","seed","direction","status","seed_node_ids","nodes","relations","unknowns","expected_match_node_ids","summary","coverage","limitations","source_evidence_id","evidence_links"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 inline Evidence. 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 the complete matching 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,"examples":[{"left":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"right":{"authority":"analyst-inference","confidence":"inferred","environment":null,"evidence_id":"ev_c2754cf75e286b839ed825f247062067a6472acb1e7b6ce0f9aaceec6448d6d7","evidence_links":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"limitations":["Artifact identity is unavailable for this observation.","A static module resident in an observed bundle is not reported as executed.","Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.","Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.","Not-observed means absent from the bounded captures in scope, never globally unloaded.","Only caller-supplied, semantically verified Evidence records were reconciled.","Source-map authority remains separate from passive runtime authority."],"locations":[],"normalized_result":{"coverage":{"omitted_graph_items":0,"omitted_reconciliation_items":0,"omitted_runtime_entities":0,"omitted_static_load_states":0,"status":"complete-within-inputs","truncated":false},"evidence_links":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[{"edge_id":"jag_edge_3799eb1c2b0f224013a0edba8911a8b9edabd5fa6da2f893a6cfa24a899c9463","evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"cross-layer-reconciliation","confidence":"high","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"extractor":{"executable_sha256":null,"name":"rea-javascript-runtime-reconciliation","operation":"reconcile_javascript_runtime","version":"1"},"limitations":["Equal content digests establish byte identity, not execution causality.","Passive script parsing or target presence does not prove feature execution."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"inferred"},"identifier_strategy":{"stability":"relationship-exact","strategy":"semantic-content-sha256"},"properties":{"basis":"content-and-location","reconciliation_id":"jrr_item_ea9d751c4bf3a2234af56b80d5ac8a1f953da9a9477cd46586a62934ff4a5fb2","static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753"},"relation":"observed_as","source_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","target_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"},{"edge_id":"jag_edge_f3c06b02c5ac77056b5d2a9f8de834ea0a9123b01dc369a011e3adc4a535338b","evidence":{"artifact":{"available":false,"detail":"The relationship is runtime metadata, not standalone bytes.","reason":"not-applicable"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The relationship was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"relationship-exact","strategy":"semantic-content-sha256"},"properties":{"basis":"passive-cdp-observation"},"relation":"loads","source_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","target_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"}],"graph_id":"jag_0536a9584eb91a16f78f71e8bef4cffc3105df18098fe65a7b114add520203ca","limitations":["Cross-layer observed_as edges are inferences; digest equality proves byte identity only.","Runtime presence is bounded to passive capture windows and does not prove feature execution.","Source-map relationships retain their original static authority and are not promoted into runtime matches."],"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"}}]},{"identity":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","runtime_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","stability":"capture-only","strategy":"runtime-instance"},"kind":"runtime-script-instance","node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e","observations":[{"evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The entity was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"/Applications/Example.app/Contents/Resources/app/renderer.js","observation_id":"jag_observation_9315403b875ea70c310909daf797780ab9045ff8f4803db38a9184e4f0704f11","properties":{"cdp_hash":"example","is_module":true,"language":"JavaScript","length":29,"location":"/Applications/Example.app/Contents/Resources/app/renderer.js","source_sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"}}]},{"identity":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","runtime_key":"example-target","stability":"capture-only","strategy":"runtime-instance"},"kind":"target","node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","observations":[{"evidence":{"artifact":{"available":false,"detail":"This runtime entity has no standalone artifact bytes.","reason":"not-applicable"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The entity was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":null,"target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"Example","observation_id":"jag_observation_844a03a29af96a0bcd4625e0377b67c439af68a462c5fa83009c7c27283c5dee","properties":{"attached":false,"location":"/Applications/Example.app/Contents/Resources/app/index.html","runtime_type":"page"}}]}],"root_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265"],"schema":"JavaScriptApplicationGraph"},"limitations":["A static module resident in an observed bundle is not reported as executed.","Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.","Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.","Not-observed means absent from the bounded captures in scope, never globally unloaded.","Only caller-supplied, semantically verified Evidence records were reconciled.","Source-map authority remains separate from passive runtime authority."],"reconciliation_id":"jrr_ec50425a5a5a5cb85aa40f13f72dcba54a8ab16170d9421a0277fbdf0fa4c9eb","reconciliations":[{"basis":"none","candidate_static_count":0,"candidate_static_nodes":[],"confidence":"unknown","entity_kind":"target","reason":"no-static-content-match","reconciliation_id":"jrr_item_abd5635b06340f082ef46bff8802a361c7b30011085f1c9e7437b29b451c1e5e","runtime_evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","runtime_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","static_layer_id":null,"static_node_id":null,"status":"unmatched"},{"basis":"content-and-location","candidate_static_count":1,"candidate_static_nodes":[{"static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"}],"confidence":"high","entity_kind":"script","reason":"content-and-location-match","reconciliation_id":"jrr_item_ea9d751c4bf3a2234af56b80d5ac8a1f953da9a9477cd46586a62934ff4a5fb2","runtime_evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","runtime_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e","static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","status":"matched"}],"runtime_captures":[{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","frames":0,"kind":"electron","scripts":1,"scripts_complete_within_scope":true,"target_key":"example-target","target_location":"/Applications/Example.app/Contents/Resources/app/index.html","target_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","workers":0}],"source_map_authority":{"limitation":"Source-map declarations and original-source content retain separate static authority and are not used as primary runtime byte matches.","runtime_script_declarations":0,"static_layer_count":1,"used_for_primary_matching":false},"static_layers":[{"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","format":"directory","graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","input_path":"/Applications/Example.app/Contents/Resources/app","layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","role":"application","root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","runtime_mappings":[]}],"static_load_states":[{"kind":"javascript-asset","reason":"runtime-script-correspondence","runtime_node_ids":["jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"],"static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","status":"loaded"}],"summary":{"ambiguous":0,"matched":1,"runtime_frames":0,"runtime_scripts":1,"runtime_targets":1,"runtime_workers":0,"static_loaded":1,"static_not_observed":0,"static_resident":0,"static_unknown":0,"unknown":0,"unmatched":1}},"operation":"reconcile_javascript_runtime","parameters":{"runtime_evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"static_layers":[{"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","role":"application","runtime_mappings":[]}]},"predicate_type":"rea.javascript-runtime-reconciliation","provider":{"id":"rea-javascript-runtime-reconciliation","name":"REA JavaScript runtime reconciliation","version":"1"},"raw_result":null,"subject":null}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"type":"array"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"type":"array"}},"required":["left","right"],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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_omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"right_graph_omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_graph_status":{"enum":["complete","partial","unknown","unavailable"],"type":"string"},"status":{"enum":["complete-within-inputs","partial","truncated"],"type":"string"}},"required":["left_graph_status","right_graph_status","left_graph_omitted_count","right_graph_omitted_count","status"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"graph":{"additionalProperties":false,"properties":{"coverage":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"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"},"type":"array"},"graph_id":{"pattern":"^jag_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"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":{"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":{"minLength":1,"type":"string"},"basis":{"items":{"enum":["syntax-tree","control-flow","imports","exports","literals","api-usage"],"type":"string"},"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":{"minLength":1,"type":"string"},"namespace":{"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":{"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":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":{"anyOf":[{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"const":0,"type":"number"},"status":{"const":"complete","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"minItems":1,"type":"array"},"omitted_count":{"anyOf":[{"exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},{"type":"null"}]},"status":{"const":"partial","type":"string"},"truncated":{"const":true,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"},{"additionalProperties":false,"properties":{"limits":{"items":{"additionalProperties":false,"properties":{"name":{"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"},"type":"array"},"omitted_count":{"type":"null"},"status":{"enum":["unknown","unavailable"],"type":"string"},"truncated":{"const":false,"type":"boolean"}},"required":["status","truncated","omitted_count","limits"],"type":"object"}]},"evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"extractor":{"additionalProperties":false,"properties":{"executable_sha256":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"name":{"minLength":1,"type":"string"},"operation":{"minLength":1,"type":"string"},"version":{"minLength":1,"type":"string"}},"required":["name","version","operation","executable_sha256"],"type":"object"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"location":{"oneOf":[{"additionalProperties":false,"properties":{"available":{"const":true,"type":"boolean"},"value":{"oneOf":[{"additionalProperties":false,"properties":{"kind":{"const":"artifact-path","type":"string"},"path":{"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":{"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":{"minLength":1,"type":"string"}},"required":["kind","url"],"type":"object"},{"additionalProperties":false,"properties":{"capture_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"frame_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"kind":{"const":"runtime","type":"string"},"script_key":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"target_key":{"minLength":1,"type":"string"}},"required":["kind","capture_sha256","target_key","frame_key","script_key"],"type":"object"},{"additionalProperties":false,"properties":{"address":{"minLength":1,"type":"string"},"kind":{"const":"native-address","type":"string"},"symbol":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]}},"required":["kind","address","symbol"],"type":"object"},{"additionalProperties":false,"properties":{"export_path":{"minLength":1,"type":"string"},"kind":{"const":"package-export","type":"string"},"package_name":{"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":{"minLength":1,"type":"string"},"reason":{"enum":["not-applicable","not-observed","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":[{"minLength":1,"type":"string"},{"type":"null"}]},"observation_id":{"pattern":"^jag_observation_[a-f0-9]{64}$","type":"string"},"properties":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"minLength":1,"type":"string"},"type":"object"}},"required":["label","properties","evidence","observation_id","identifier_strategy"],"type":"object"},"minItems":1,"type":"array"}},"required":["node_id","kind","identity","observations"],"type":"object"},"minItems":1,"type":"array"},"root_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"schema":{"const":"JavaScriptApplicationGraph","type":"string"}},"required":["schema","root_node_ids","nodes","edges","coverage","limitations","graph_id"],"type":"object"},"items":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"anyOf":[{"additionalProperties":false,"properties":{"basis":{"enum":["exact-node-identity","exact-content-digest","exact-module-source-digest"],"type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"exact","type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","basis","confidence","candidate_left_node_ids","candidate_right_node_ids"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"const":"source-map-identity","type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"high","type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","basis","confidence","candidate_left_node_ids","candidate_right_node_ids"],"type":"object"},{"additionalProperties":false,"properties":{"basis":{"enum":["structural-fingerprint","semantic-key"],"type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"medium","type":"string"},"status":{"const":"matched","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":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"enum":["unchanged","changed","unknown"],"type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","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":{"type":"null"},"status":{"enum":["removed","unknown"],"type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"unmatched","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":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"enum":["added","unknown"],"type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"candidate_right_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"prefixItems":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}],"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"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":{"type":"null"},"status":{"const":"unknown","type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"},{"additionalProperties":false,"properties":{"dimensions":{"items":{"enum":["content","location","properties","relationships","availability","coverage"],"type":"string"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":2,"type":"array"},"item_id":{"pattern":"^javc_item_[a-f0-9]{64}$","type":"string"},"left_node_id":{"type":"null"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"match":{"additionalProperties":false,"properties":{"basis":{"const":"none","type":"string"},"candidate_left_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"prefixItems":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"}],"type":"array"},"candidate_right_node_ids":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"confidence":{"const":"unknown","type":"string"},"status":{"const":"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":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"const":"unknown","type":"string"}},"required":["item_id","node_kind","dimensions","evidence_links","limitations","status","left_node_id","right_node_id","match"],"type":"object"}]},"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":{"minLength":1,"type":"string"},"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"},"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":["comparison_id","left","right","summary","matching","items","graph","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 with inline authenticated JavaScript Application Graph Evidence. 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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"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","vcs":{"dirty":null,"head":null,"kind":"none"}}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"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":{"anyOf":[{"anyOf":[{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"minItems":1,"type":"array"},"content_state":{"const":"hashed","description":"Value for content state.","type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","pattern":"^[a-f0-9]{64}$","type":"string"},"size":{"description":"Value for size.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["path","classifications","limitations","kind","language","sha256","size","content_state"],"type":"object"},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"minItems":1,"type":"array"},"content_state":{"description":"Value for content state.","enum":["redacted-secret","excluded","unreadable","unknown"],"type":"string"},"kind":{"const":"file","description":"Value for kind.","type":"string"},"language":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for language."},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"sha256":{"description":"Value for sha256.","type":"null"},"size":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}],"description":"Value for size."}},"required":["path","classifications","limitations","kind","language","sha256","size","content_state"],"type":"object"}]},{"additionalProperties":false,"properties":{"classifications":{"description":"Value for classifications.","items":{"enum":["source","test","config","manifest","generated","vendor","documentation","unknown"],"type":"string"},"minItems":1,"type":"array"},"kind":{"const":"directory","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"path":{"description":"Local filesystem path used by this operation.","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"},"minItems":1,"type":"array"},"kind":{"const":"symlink","description":"Value for kind.","type":"string"},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"target":{"description":"Value for target.","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"}]},"type":"array"},"exclusions":{"description":"Value for exclusions.","items":{"additionalProperties":false,"properties":{"path":{"description":"Local filesystem path used by this operation.","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"},"type":"array"},"inventory_state":{"description":"Value for inventory state.","enum":["complete","partial","unknown"],"type":"string"},"languages":{"description":"Value for languages.","items":{"minLength":1,"type":"string"},"type":"array"},"limitations":{"description":"Value for limitations.","items":{"minLength":1,"type":"string"},"type":"array"},"manifests":{"description":"Value for manifests.","items":{"minLength":1,"type":"string"},"type":"array"},"parse_failures":{"description":"Value for parse failures.","items":{"additionalProperties":false,"properties":{"parser":{"description":"Value for parser.","minLength":1,"type":"string"},"path":{"description":"Local filesystem path used by this operation.","minLength":1,"type":"string"},"reason":{"description":"Value for reason.","minLength":1,"type":"string"}},"required":["path","parser","reason"],"type":"object"},"type":"array"},"provenance":{"additionalProperties":false,"description":"Value for provenance.","properties":{"caller":{"description":"Value for caller.","minLength":1,"pattern":"^[\\\\w .:@/+-]+$","type":"string"},"importer":{"description":"Value for importer.","minLength":1,"type":"string"},"importer_version":{"anyOf":[{"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.","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.","minLength":1,"type":"string"}},"required":["from_path","to","kind","resolution","parse_state"],"type":"object"},"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","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"}},"required":["reference","application"],"type":"object"},"kind":"application","name":"compare_source_to_bundle","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"],"type":"string"}},"required":["status","reference_inventory_state","application_graph_status","retained_source_files","retained_application_nodes","candidate_evaluations"],"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":9007199254740991,"minimum":1,"type":"integer"},"signals":{"items":{"additionalProperties":false,"properties":{"current_values":{"items":{"minLength":1,"type":"string"},"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":{"minLength":1,"type":"string"},"weight":{"maximum":100,"minimum":1,"type":"integer"}},"required":["kind","weight","source_value","current_values"],"type":"object"},"minItems":1,"type":"array"}},"required":["current_node_id","current_node_kind","score","confidence","signals"],"type":"object"},"type":"array"},"confidence":{"enum":["exact","high","medium","unknown"],"type":"string"},"current_node_ids":{"items":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"mapping_id":{"pattern":"^stbc_item_[a-f0-9]{64}$","type":"string"},"source_language":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"source_path":{"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","limitations"],"type":"object"},"type":"array"},"limitations":{"items":{"minLength":1,"type":"string"},"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"},"scoring":{"additionalProperties":false,"properties":{"algorithm":{"const":"rea-source-to-bundle-signals","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"},"type":"array"}},"required":["comparison_id","reference","application","scoring","summary","items","unmapped_current_node_ids","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Compare Source To Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare static return shapes for one exact module/export selector on each authenticated JavaScript Application Graph supplied as inline Evidence. Variants pair only by reciprocal unique literal discriminants; dynamic values, incomplete properties, and ambiguous variants remain unknown. Reports JSON Pointer changes without executing JavaScript; runtime behavior requires a separate agent-run probe.","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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"format":"directory","graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[],"graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","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"},"input_path":"/Applications/Example.app/Contents/Resources/app","inventory_graph_sha256":"3333333333333333333333333333333333333333333333333333333333333333","inventory_manifest_id":"agm_2222222222222222222222222222222222222222222222222222222222222222","limitations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","semantic_graph":{"application_graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","coverage":{"families":[{"family":"boundary","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"call-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"child-process","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"closure","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"configuration","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"data-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"event","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"object-flow","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"promise-ownership","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"request","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"resource-lifecycle","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]},{"family":"timer","omitted_relations":0,"retained_relations":0,"status":"unknown","unknown_ids":[]}],"limits":[],"omitted_nodes":0,"omitted_relations":0,"status":"unknown","truncated":false},"fingerprints":[],"graph_id":"jsrg_08c925d2bf4ef56d770e0e67901d5bdfb610744cf001a50d36c9bb6dcb195508","limitations":["Semantic relations are unavailable in this minimal example."],"nodes":[{"application_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"],"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"},"function_node_id":null,"identifier_strategy":{"stability":"artifact-version","strategy":"semantic-content-sha256"},"identity":{"artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","module_path":"renderer.js","role_key":"example-module","source_range":null},"kind":"module","label":"renderer.js","node_id":"jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a","properties":{}}],"relations":[],"root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","root_node_ids":["jsrg_node_9476602f1f74433a2bd3dadb040a25734d203b8f831b31a8d96f7efdfc5cd66a"],"schema":"JavaScriptSemanticRelationGraph","unknowns":[]},"statistics":{"findings":0,"invalid_utf8_files":0,"modules":0,"nested_asar_containers":0,"parse_failures":0,"parsed_javascript_files":1,"relevant_files":1,"text_bytes_read":29,"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":{},"predicate_type":"rea.javascript-application-analysis","provider":{"id":"rea-javascript-application","name":"REA JavaScript application analyzer","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"directory","local_path":"/Applications/Example.app/Contents/Resources/app","name":"app"}},"left_export_name":"default","left_module_path":"parser.mjs","right":{"authority":"analyst-inference","confidence":"inferred","environment":null,"evidence_id":"ev_c2754cf75e286b839ed825f247062067a6472acb1e7b6ce0f9aaceec6448d6d7","evidence_links":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"limitations":["Artifact identity is unavailable for this observation.","A static module resident in an observed bundle is not reported as executed.","Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.","Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.","Not-observed means absent from the bounded captures in scope, never globally unloaded.","Only caller-supplied, semantically verified Evidence records were reconciled.","Source-map authority remains separate from passive runtime authority."],"locations":[],"normalized_result":{"coverage":{"omitted_graph_items":0,"omitted_reconciliation_items":0,"omitted_runtime_entities":0,"omitted_static_load_states":0,"status":"complete-within-inputs","truncated":false},"evidence_links":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"graph":{"coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"edges":[{"edge_id":"jag_edge_3799eb1c2b0f224013a0edba8911a8b9edabd5fa6da2f893a6cfa24a899c9463","evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"cross-layer-reconciliation","confidence":"high","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54"],"extractor":{"executable_sha256":null,"name":"rea-javascript-runtime-reconciliation","operation":"reconcile_javascript_runtime","version":"1"},"limitations":["Equal content digests establish byte identity, not execution causality.","Passive script parsing or target presence does not prove feature execution."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"inferred"},"identifier_strategy":{"stability":"relationship-exact","strategy":"semantic-content-sha256"},"properties":{"basis":"content-and-location","reconciliation_id":"jrr_item_ea9d751c4bf3a2234af56b80d5ac8a1f953da9a9477cd46586a62934ff4a5fb2","static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753"},"relation":"observed_as","source_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","target_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"},{"edge_id":"jag_edge_f3c06b02c5ac77056b5d2a9f8de834ea0a9123b01dc369a011e3adc4a535338b","evidence":{"artifact":{"available":false,"detail":"The relationship is runtime metadata, not standalone bytes.","reason":"not-applicable"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The relationship was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"relationship-exact","strategy":"semantic-content-sha256"},"properties":{"basis":"passive-cdp-observation"},"relation":"loads","source_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","target_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"}],"graph_id":"jag_0536a9584eb91a16f78f71e8bef4cffc3105df18098fe65a7b114add520203ca","limitations":["Cross-layer observed_as edges are inferences; digest equality proves byte identity only.","Runtime presence is bounded to passive capture windows and does not prove feature execution.","Source-map relationships retain their original static authority and are not promoted into runtime matches."],"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"}}]},{"identity":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","runtime_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","stability":"capture-only","strategy":"runtime-instance"},"kind":"runtime-script-instance","node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e","observations":[{"evidence":{"artifact":{"artifact_id":"art_c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64","available":true,"sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The entity was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":"electron_script_4444444444444444444444444444444444444444444444444444444444444444","target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"/Applications/Example.app/Contents/Resources/app/renderer.js","observation_id":"jag_observation_9315403b875ea70c310909daf797780ab9045ff8f4803db38a9184e4f0704f11","properties":{"cdp_hash":"example","is_module":true,"language":"JavaScript","length":29,"location":"/Applications/Example.app/Contents/Resources/app/renderer.js","source_sha256":"c4c0d760a4c84f0e182de99f6ef89ef10831f8170e486c4d4bd934924151ba64"}}]},{"identity":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","runtime_key":"example-target","stability":"capture-only","strategy":"runtime-instance"},"kind":"target","node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","observations":[{"evidence":{"artifact":{"available":false,"detail":"This runtime entity has no standalone artifact bytes.","reason":"not-applicable"},"authority":"passive-cdp-runtime","confidence":"exact","coverage":{"limits":[],"omitted_count":0,"status":"complete","truncated":false},"evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"extractor":{"executable_sha256":null,"name":"rea-cdp-electron","operation":"inspect_electron_page","version":"1"},"limitations":["The entity was observed only within one bounded passive CDP capture."],"location":{"available":true,"value":{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","frame_key":null,"kind":"runtime","script_key":null,"target_key":"example-target"}},"state":"observed"},"identifier_strategy":{"stability":"observation-exact","strategy":"semantic-content-sha256"},"label":"Example","observation_id":"jag_observation_844a03a29af96a0bcd4625e0377b67c439af68a462c5fa83009c7c27283c5dee","properties":{"attached":false,"location":"/Applications/Example.app/Contents/Resources/app/index.html","runtime_type":"page"}}]}],"root_node_ids":["jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265"],"schema":"JavaScriptApplicationGraph"},"limitations":["A static module resident in an observed bundle is not reported as executed.","Caller-declared file and URL mappings are inference inputs and do not expand CDP origin or filesystem-root authority.","Digest equality establishes byte identity but not code reachability, module initialization, or feature execution.","Not-observed means absent from the bounded captures in scope, never globally unloaded.","Only caller-supplied, semantically verified Evidence records were reconciled.","Source-map authority remains separate from passive runtime authority."],"reconciliation_id":"jrr_ec50425a5a5a5cb85aa40f13f72dcba54a8ab16170d9421a0277fbdf0fa4c9eb","reconciliations":[{"basis":"none","candidate_static_count":0,"candidate_static_nodes":[],"confidence":"unknown","entity_kind":"target","reason":"no-static-content-match","reconciliation_id":"jrr_item_abd5635b06340f082ef46bff8802a361c7b30011085f1c9e7437b29b451c1e5e","runtime_evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","runtime_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","static_layer_id":null,"static_node_id":null,"status":"unmatched"},{"basis":"content-and-location","candidate_static_count":1,"candidate_static_nodes":[{"static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e"}],"confidence":"high","entity_kind":"script","reason":"content-and-location-match","reconciliation_id":"jrr_item_ea9d751c4bf3a2234af56b80d5ac8a1f953da9a9477cd46586a62934ff4a5fb2","runtime_evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","runtime_node_id":"jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e","static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","status":"matched"}],"runtime_captures":[{"capture_sha256":"a4dd260f01b45e3df92482755baed7a1922b4af2226edc7f896bdbc4d2bbbd9c","evidence_id":"ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e","frames":0,"kind":"electron","scripts":1,"scripts_complete_within_scope":true,"target_key":"example-target","target_location":"/Applications/Example.app/Contents/Resources/app/index.html","target_node_id":"jag_node_f360c35c86d4893fcf83ef0fdef92cebd688fba883aa39698a1c12dd5a237265","workers":0}],"source_map_authority":{"limitation":"Source-map declarations and original-source content retain separate static authority and are not used as primary runtime byte matches.","runtime_script_declarations":0,"static_layer_count":1,"used_for_primary_matching":false},"static_layers":[{"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","format":"directory","graph_id":"jag_ab15669664efc0a86bb49c9c60241913cce6980dc2293fbeef6d9c862ca01d9d","input_path":"/Applications/Example.app/Contents/Resources/app","layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","role":"application","root_artifact_sha256":"1111111111111111111111111111111111111111111111111111111111111111","runtime_mappings":[]}],"static_load_states":[{"kind":"javascript-asset","reason":"runtime-script-correspondence","runtime_node_ids":["jag_node_af8ea5d1909955f39da1d844b2cad8f2f68c34b7d575ded6d04c00fa4095a88e"],"static_layer_id":"jrl_96fcfc590e7ca88f94b602638421674d8b13ccc7d25efff15a15b03c33b34753","static_node_id":"jag_node_3c82da5492d90eb5b0bee41c1a994d88b7ba98c0b4955270d70e57a76e224c2e","status":"loaded"}],"summary":{"ambiguous":0,"matched":1,"runtime_frames":0,"runtime_scripts":1,"runtime_targets":1,"runtime_workers":0,"static_loaded":1,"static_not_observed":0,"static_resident":0,"static_unknown":0,"unknown":0,"unmatched":1}},"operation":"reconcile_javascript_runtime","parameters":{"runtime_evidence_ids":["ev_a42606ee799a093832ad3d6cfd0edd50dc9b99f78cc6d5d9130b734d48a56b4e"],"static_layers":[{"evidence_id":"ev_a4ae2c7b5c501fb6dff695b168f35a6dd157fa957410910684f3a4ce4c8b5d54","role":"application","runtime_mappings":[]}]},"predicate_type":"rea.javascript-runtime-reconciliation","provider":{"id":"rea-javascript-runtime-reconciliation","name":"REA JavaScript runtime reconciliation","version":"1"},"raw_result":null,"subject":null},"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":{"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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.","minLength":1,"type":"string"},"left_module_path":{"description":"Local filesystem path for left module.","minLength":1,"type":"string"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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.","minLength":1,"type":"string"},"right_module_path":{"description":"Local filesystem path for right module.","minLength":1,"type":"string"}},"required":["left_module_path","left_export_name","right_module_path","right_export_name","left","right"],"type":"object"},"kind":"application","name":"compare_javascript_export_shapes","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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":{"type":"string"},"value":{"anyOf":[{"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":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"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":{"minLength":1,"type":"string"},"type":"array"},"path":{"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":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]}},"required":["availability","value"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"union","type":"string"},"values":{"items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"null"}]},"minItems":1,"type":"array"}},"required":["availability","values"],"type":"object"},{"additionalProperties":false,"properties":{"availability":{"const":"unknown","type":"string"},"reason":{"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"},"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":{"anyOf":[{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"const":"selected","type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"},{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"type":"null"},"status":{"enum":["missing","ambiguous"],"type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"},{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"const":"unavailable","type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"}]},"limitations":{"items":{"minLength":1,"type":"string"},"type":"array"},"right":{"anyOf":[{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},"status":{"const":"selected","type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"},{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"type":"null"},"status":{"enum":["missing","ambiguous"],"type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"},{"additionalProperties":false,"properties":{"candidates":{"items":{"additionalProperties":false,"properties":{"export_name":{"minLength":1,"type":"string"},"matches_requested_export":{"type":"boolean"},"matches_requested_module":{"type":"boolean"},"module_path":{"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"},"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":{"minLength":1,"type":"string"},"requested_module_path":{"minLength":1,"type":"string"},"selected_node_id":{"anyOf":[{"pattern":"^jag_node_[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"status":{"const":"unavailable","type":"string"}},"required":["evidence_id","graph_id","requested_module_path","requested_export_name","candidates","omitted_candidates","status","selected_node_id"],"type":"object"}]},"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":["comparison_id","left","right","summary","changes","coverage","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Compare Javascript Export Shapes"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Generate the complete deterministic ReconstructionObligationLedger from an authenticated Evidence 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. The inline result carries the 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":[],"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"manifest":{"bindings":[],"contradictions":[]},"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","dos-mz","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"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence 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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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 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":"Value for offset.","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."},"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","dos-mz","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":["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 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 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"description":"Value for domain.","minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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.","minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"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":[{"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"},"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","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"},"type":"array"},"rationale":{"description":"Value for rationale.","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 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"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"},"minItems":1,"type":"array"},"fixture_id":{"description":"Value for fixture id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"original_cases":{"description":"Value for original cases.","items":{"additionalProperties":false,"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence 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.","minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"type":"array"},"owner":{"additionalProperties":false,"description":"Value for owner.","properties":{"module_path":{"description":"Local filesystem path for module.","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.","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.","minLength":1,"type":"string"},"parser":{"description":"Value for parser.","minLength":1,"type":"string"},"schema":{"description":"Value for schema.","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._:/-]*$","type":"string"},"command":{"description":"Value for command.","minLength":1,"type":"string"},"enumerated_obligation_ids":{"description":"Value for enumerated obligation ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"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.","minLength":1,"type":"string"}},"required":["mode","specification"],"type":"object"},"result_evidence_id":{"description":"Exact Evidence 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._:/-]*$","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":"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"},"minItems":2,"type":"array"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"}},"required":["obligation_id","evidence_ids"],"type":"object"},"type":"array"}},"required":["bindings","contradictions"],"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._:/-]*$","type":"string"},"type":"array"},"disposition":{"description":"Value for disposition.","enum":["active","blocked","out-of-scope"],"type":"string"},"family":{"description":"Value for family.","minLength":1,"type":"string"},"obligation_id":{"description":"Value for obligation id.","pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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"},"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":{"minLength":1,"type":"string"},"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._:/-]*$","type":"string"},"type":"array"},"review_evidence_ids":{"description":"Ordered Evidence identifiers for the review observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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.","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.","minLength":1,"type":"string"},"unavailable_authority":{"description":"Value for unavailable authority.","items":{"minLength":1,"type":"string"},"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"},"type":"array"}},"required":["evidence_bundle","reviewed_obligations","manifest"],"type":"object"},"kind":"application","name":"build_reconstruction_obligation_ledger","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"closure_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"coverage":{"additionalProperties":false,"properties":{"status":{"enum":["complete","partial"],"type":"string"}},"required":["status"],"type":"object"},"dependency_graph":{"items":{"additionalProperties":false,"properties":{"depends_on_obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"}},"required":["obligation_id","depends_on_obligation_id"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"ledger_id":{"pattern":"^rol_[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"minLength":1,"type":"string"},"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":{"minLength":1,"type":"string"},"state":{"enum":["candidate","observed","reviewed","unknown"],"type":"string"}},"required":["evidence_id","authority","state","location"],"type":"object"},"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"},"minItems":1,"type":"array"},"fixture_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"}},"required":["fixture_id","case_kind","authority","evidence_ids"],"type":"object"},"type":"array"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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":{"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"type":"array"},"owner":{"additionalProperties":false,"properties":{"module_path":{"minLength":1,"type":"string"},"owner_sha256":{"pattern":"^[a-f0-9]{64}$","type":"string"},"symbol":{"minLength":1,"type":"string"}},"required":["module_path","symbol","owner_sha256"],"type":"object"},"parser_type":{"anyOf":[{"additionalProperties":false,"properties":{"domain_type":{"minLength":1,"type":"string"},"parser":{"minLength":1,"type":"string"},"schema":{"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._:/-]*$","type":"string"},"command":{"minLength":1,"type":"string"},"enumerated_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"minItems":1,"type":"array"},"nondeterminism":{"additionalProperties":false,"properties":{"mode":{"enum":["total-order","partial-order","finite-traces"],"type":"string"},"specification":{"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._:/-]*$","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._:/-]*$","type":"string"},"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":{"minLength":1,"type":"string"}},"required":["code","detail"],"type":"object"},"type":"array"},"family":{"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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":{"minLength":1,"type":"string"}},"required":["kind","evidence_id","location"],"type":"object"},"type":"array"},"origin":{"enum":["generated","reviewed"],"type":"string"},"required":{"type":"boolean"},"required_case_kinds":{"items":{"enum":["positive","negative","malformed","cancellation","teardown"],"type":"string"},"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":{"minLength":1,"type":"string"},"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._:/-]*$","type":"string"},"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":{"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":{"minLength":1,"type":"string"},"unavailable_authority":{"items":{"minLength":1,"type":"string"},"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"},"type":"array"},"ownership_graph":{"items":{"additionalProperties":false,"properties":{"module_path":{"minLength":1,"type":"string"},"obligation_id":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"symbol":{"minLength":1,"type":"string"}},"required":["obligation_id","module_path","symbol"],"type":"object"},"type":"array"},"reports":{"additionalProperties":false,"properties":{"contradicted_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"type":"array"},"missing_owner_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"type":"array"},"missing_verifier_obligation_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","type":"string"},"type":"array"},"residual_unknown_ids":{"items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]*$","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"},"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","ledger_id","closure_digest","status","coverage","summary","reports","ownership_graph","dependency_graph","obligations","evidence_links","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":false,"title":"Build Reconstruction Obligation Ledger"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"Evaluate inline evidence-backed reconstruction coverage against one named boundary. 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":false,"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":[{"boundary_id":"replacement.cli","coverage":{"artifacts":[],"boundaries":[{"allowed_dispositions":[],"allowed_unknown_ids":[],"boundary_id":"replacement.cli","required_claim_ids":["claim.cli.help"],"required_package_proof_kinds":["clean-install","authority-independence"],"required_surface_ids":["cli.help"],"title":"CLI replacement"}],"claims":[],"contradictions":[],"evidence_bundle":{"artifacts":[],"captures":[],"environments":[],"providers":[],"records":[],"scenarios":[],"unknowns":[]},"owners":[],"package_proofs":[],"residual_unknown_ids":[],"surfaces":[],"verifier_contracts":[],"verifier_results":[]}}],"properties":{"boundary_id":{"description":"Exact reconstruction boundary identifier to evaluate.","minLength":1,"type":"string"},"coverage":{"additionalProperties":false,"description":"Exact reconstruction-coverage commitment to verify.","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"},"minItems":1,"type":"array"},"version":{"description":"Value for version.","minLength":1,"type":"string"}},"required":["artifact_id","artifact_sha256","version","environment_sha256","evidence_ids"],"type":"object"},"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"},"type":"array"},"allowed_unknown_ids":{"description":"Value for allowed unknown ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"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"},"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"},"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"},"minItems":1,"type":"array"},"title":{"description":"Value for title.","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"},"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.","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"},"minItems":1,"type":"array"},"surface_ids":{"description":"Value for surface ids.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"minItems":1,"type":"array"},"title":{"description":"Value for title.","minLength":1,"type":"string"}},"required":["claim_id","title","kind","surface_ids","required_dimensions","required_authority"],"type":"object"},"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"},"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"},"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"},"type":"array"}},"required":["contradiction_id","status","surface_ids","claim_ids","evidence_ids"],"type":"object"},"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","dos-mz","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"},"captures":{"description":"Value for captures.","items":{"properties":{"evidence_id":{"description":"Stable identifier of the recorded Evidence 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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["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 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":"Value for offset.","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."},"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","dos-mz","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":["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 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 identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"description":"Value for domain.","minLength":1,"type":"string"},"mutation_evidence_ids":{"description":"Ordered Evidence identifiers for the mutation observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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.","minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"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":[{"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"},"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","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"},"type":"array"},"rationale":{"description":"Value for rationale.","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 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for owner export."},"owner_path":{"description":"Local filesystem path for owner.","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.","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"},"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"},"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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"},"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"},"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"},"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"family":{"description":"Value for family.","minLength":1,"type":"string"},"location":{"description":"Value for location.","minLength":1,"type":"string"},"occurrence_id":{"anyOf":[{"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"},"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"},"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"},"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":9007199254740991,"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"},"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"},"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"},"minItems":1,"type":"array"},"covered_dimensions":{"description":"Value for covered dimensions.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"minItems":1,"type":"array"},"evidence_ids":{"description":"Value for evidence ids.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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"},"type":"array"},"repeats":{"description":"Value for repeats.","maximum":9007199254740991,"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"},"type":"array"}},"required":["evidence_bundle","artifacts","surfaces","owners","claims","verifier_contracts","verifier_results","residual_unknown_ids","contradictions","package_proofs","boundaries"],"type":"object"}},"required":["coverage","boundary_id"],"type":"object"},"kind":"application","name":"evaluate_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"},"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":{"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"},"type":"array"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"pattern":"^[A-Za-z][A-Za-z0-9._:/-]{0,199}$","type":"string"},"rationale":{"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"},"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"}},"required":["boundary_id","status","summary","reasons","recommended_probes","evidence_ids"],"type":"object"},"requiresSession":false,"title":"Evaluate 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 analysis snapshot 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"},{"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","dos-mz","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 to the caller-supplied path, then close the active target and every provider resource started for it. Existing files require 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 the complete current target, provider, capability availability, client-feature, analysis, and server-identity status without starting analysis.","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":[{}],"properties":{"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"}},"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"}]}},"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"result":{"anyOf":[{"anyOf":[{"additionalProperties":{},"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["request_id","operation","elapsed_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"],"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"}},"required":["provider","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/__schema0"},"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/__schema0"},"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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"type":"null"}},"required":["operation","effects","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","effects","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/__schema0"},"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/__schema0"},"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/__schema0"},"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"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"type":"null"}},"required":["operation","effects","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","effects","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/__schema1"},"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"},"progress":{"type":"boolean"}},"required":["progress","cancellation","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,"minItems":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,"minItems":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"],"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"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","open"],"type":"object"},{"additionalProperties":{},"properties":{"analysis_activity":{"additionalProperties":false,"properties":{"providers":{"items":{"additionalProperties":false,"properties":{"active":{"anyOf":[{"additionalProperties":false,"properties":{"caller_state":{"enum":["waiting","cancelled"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"operation":{"minLength":1,"type":"string"},"request_id":{"maximum":9007199254740991,"minimum":1,"type":"integer"}},"required":["request_id","operation","elapsed_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"],"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"}},"required":["provider","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/__schema0"},"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/__schema0"},"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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"type":"null"}},"required":["operation","effects","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","effects","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/__schema0"},"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/__schema0"},"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/__schema0"},"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"},"status":{"const":"verified","type":"string"}},"required":["status","observed_at","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"type":"null"}},"required":["operation","effects","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"},"limitations":{"items":{"type":"string"},"type":"array"},"operation":{"type":"string"},"reason":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["operation","effects","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","dos-mz","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/__schema1"},"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"},"progress":{"type":"boolean"}},"required":["progress","cancellation","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,"minItems":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,"minItems":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"],"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"}},"required":["provider","providers","capabilities","analysis_run","analysis_activity","analysis_provider_binding","analysis_provider_candidates","tool_availability","client_features","server_identity","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 bundle to the requested local path. Existing files require overwrite: true; records and manifests use canonical byte-stable ordering.","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 the JSON bundle at the supplied local path, validate every Evidence 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 caller-selected command under a PTY and return process capture Evidence with residual unknowns. A command name resolves through the inherited PATH; the working directory defaults to the caller\'s current directory; host environment variables are inherited with scenario overrides. Filesystem snapshots are opt-in through filesystem_observation_paths. The target runs with the current user\'s permissions; this is not a security sandbox.","effects":{"accessesNetwork":true,"changesUiState":false,"idempotent":false,"launchesProcess":true,"mayDiscardData":false,"mutatesSession":true,"mutatesTarget":false,"writesFilesystem":true},"inputSchema":{"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false,"examples":[{"arguments":[],"environment":{},"events":[],"executable":"/usr/bin/true","filesystem_observation_paths":[],"idle_timeout_ms":30000,"limits":{"file_bytes":10000000,"files":10000,"filesystem_depth":16,"output_bytes":1000000,"processes":1000},"normalization":{"paths":false,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"settle_ms":100,"terminal":{"columns":80,"rows":24,"scrollback":1000},"timeout_ms":30000,"working_directory":"/tmp"}],"properties":{"arguments":{"default":[],"description":"Value for arguments.","items":{"type":"string"},"type":"array"},"environment":{"additionalProperties":{"type":"string"},"default":{},"description":"Value for environment.","propertyNames":{"pattern":"^[^=\\\\0]+$","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":65535,"minimum":1,"type":"integer"},"rows":{"description":"Value for rows.","maximum":65535,"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"}]},"type":"array"},"executable":{"description":"Command name or executable path to run.","minLength":1,"type":"string"},"filesystem_observation_paths":{"default":[],"description":"Value for filesystem observation paths.","items":{"minLength":1,"type":"string"},"type":"array"},"idle_timeout_ms":{"default":30000,"description":"Value for idle timeout ms.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"limits":{"additionalProperties":false,"default":{"file_bytes":10000000,"files":10000,"filesystem_depth":16,"output_bytes":1000000,"processes":1000},"description":"Resource budgets that bound execution and retained output for this operation.","properties":{"file_bytes":{"default":10000000,"description":"Byte count for file.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"files":{"default":10000,"description":"Value for files.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"filesystem_depth":{"default":16,"description":"Value for filesystem depth.","maximum":9007199254740991,"minimum":0,"type":"integer"},"output_bytes":{"default":1000000,"description":"Byte count for output.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"processes":{"default":1000,"description":"Value for processes.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"}},"type":"object"},"normalization":{"default":{"paths":false,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"description":"Value for normalization.","properties":{"paths":{"default":false,"description":"Value for paths.","type":"boolean"},"patterns":{"default":[],"description":"Value for patterns.","items":{"properties":{"pattern":{"description":"Literal text or regular expression used to filter matching results.","type":"string"},"replacement":{"description":"Value for replacement.","type":"string"}},"required":["pattern","replacement"],"type":"object"},"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":9007199254740991,"type":"integer"}},"type":"object"},"settle_ms":{"default":100,"description":"Value for settle ms.","maximum":9007199254740991,"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":65535,"minimum":1,"type":"integer"},"rows":{"default":24,"description":"Value for rows.","maximum":65535,"minimum":1,"type":"integer"},"scrollback":{"default":1000,"description":"Value for scrollback.","maximum":9007199254740991,"minimum":0,"type":"integer"}},"type":"object"},"timeout_ms":{"default":30000,"description":"Value for timeout ms.","exclusiveMinimum":0,"maximum":9007199254740991,"type":"integer"},"working_directory":{"default":".","description":"Value for working directory.","type":"string"}},"required":["executable"],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"],"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":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"type":"array"},"files_before":{"items":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"type":"array"},"filesystem_checkpoints":{"items":{"additionalProperties":false,"properties":{"at_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"effects":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"after":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"before":{"type":"null"},"path":{"type":"string"},"status":{"const":"created","type":"string"}},"required":["path","status","before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after":{"type":"null"},"before":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"path":{"type":"string"},"status":{"const":"deleted","type":"string"}},"required":["path","status","before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"before":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"path":{"type":"string"},"status":{"enum":["modified","unchanged"],"type":"string"}},"required":["path","status","before","after"],"type":"object"}]},"type":"array"},"files":{"items":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"type":"array"},"name":{"enum":["before","after_settlement"],"type":"string"},"truncated":{"type":"boolean"}},"required":["name","at_ms","files","effects","truncated"],"type":"object"},"type":"array"},"filesystem_effects":{"items":{"oneOf":[{"additionalProperties":false,"properties":{"after":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"before":{"type":"null"},"path":{"type":"string"},"status":{"const":"created","type":"string"}},"required":["path","status","before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after":{"type":"null"},"before":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"path":{"type":"string"},"status":{"const":"deleted","type":"string"}},"required":["path","status","before","after"],"type":"object"},{"additionalProperties":false,"properties":{"after":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"before":{"oneOf":[{"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":{"type":"null"},"type":{"const":"file","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"string"},"type":{"const":"symlink","type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"},{"additionalProperties":false,"properties":{"mode":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"path":{"type":"string"},"sha256":{"type":"null"},"size":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"symlink_target":{"type":"null"},"type":{"enum":["directory","other"],"type":"string"}},"required":["path","mode","size","type","sha256","symlink_target"],"type":"object"}]},"path":{"type":"string"},"status":{"enum":["modified","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","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"},"scenario":{"additionalProperties":{"$ref":"#/$defs/__schema0"},"propertyNames":{"type":"string"},"type":"object"},"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","full_scenario_sha256","comparison_contract_sha256","executable_sha256","normalization_sha256"],"type":"object"},"normalization":{"additionalProperties":false,"properties":{"paths":{"type":"boolean"},"patterns":{"items":{"additionalProperties":false,"properties":{"pattern":{"type":"string"},"replacement":{"type":"string"}},"required":["pattern","replacement"],"type":"object"},"type":"array"},"pids":{"type":"boolean"},"ports":{"type":"boolean"},"time_bucket_ms":{"exclusiveMinimum":0,"maximum":9007199254740991,"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"},"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"},"residual_unknowns":{"items":{"additionalProperties":false,"properties":{"reason":{"type":"string"},"scope":{"enum":["terminal","interaction","exit","process","filesystem","cleanup","network","environment"],"type":"string"}},"required":["scope","reason"],"type":"object"},"type":"array"},"settlement":{"oneOf":[{"additionalProperties":false,"properties":{"cleanup_outcome":{"const":"not_required","type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"const":"quiesced","type":"string"}},"required":["state","elapsed_ms","cleanup_outcome"],"type":"object"},{"additionalProperties":false,"properties":{"cleanup_outcome":{"enum":["cleaned","failed"],"type":"string"},"elapsed_ms":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"state":{"enum":["alive_at_deadline","unverifiable"],"type":"string"}},"required":["state","elapsed_ms","cleanup_outcome"],"type":"object"}]},"truncated":{"type":"boolean"}},"required":["manifest","normalization","frames","rendered_frames","interaction_events","exit","settlement","process_samples","filesystem_checkpoints","event_journal","files_before","files_after","filesystem_effects","truncated","limitations","residual_unknowns","cleanup"],"type":"object"}},"required":["result","evidence_id","evidence"],"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 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":{"authority":"controlled-replay","confidence":"observed","environment":{"architecture":"x86_64","id":"fixture-linux","isolation":"container","platform":"linux"},"evidence_id":"ev_39dc6ca57fd8d981c0bce63a1de75dd752e0ae47ff911440949cba8f6a8f1b7c","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"cleanup":{"owned_process_group":"verified","temporary_root":"removed"},"event_journal":[],"exit":{"code":0,"reason":"exited","signal":null},"files_after":[],"files_before":[],"filesystem_checkpoints":[{"at_ms":0,"effects":[],"files":[],"name":"before","truncated":false},{"at_ms":50,"effects":[],"files":[],"name":"after_settlement","truncated":false}],"filesystem_effects":[],"frames":[],"interaction_events":[],"limitations":[],"manifest":{"architecture":"fixture","comparison_contract":{},"comparison_contract_sha256":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","completed_at":"2026-01-01T00:00:00.001Z","executable_sha256":"0000000000000000000000000000000000000000000000000000000000000000","full_scenario_sha256":"e9fb6dbb12060cb724e2c6360da0d406b8dcb13ed91769105f92efe312491fc7","normalization_sha256":"60a27b2d1ee5aa73bf2e5cb2deaed2e9cc548f961ad2e3772c981828b643cc43","platform":"fixture","provider_version":"3","pty_backend":"node-pty","rea_version":"1.1.0","scenario":{"executable_sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"started_at":"2026-01-01T00:00:00.000Z"},"normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"process_samples":[],"rendered_frames":[],"residual_unknowns":[],"settlement":{"cleanup_outcome":"not_required","elapsed_ms":50,"state":"quiesced"},"truncated":false},"operation":"capture_process_scenario","parameters":{"scenario":"reference"},"predicate_type":"rea.process-capture","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"subject":null},"right":{"authority":"controlled-replay","confidence":"observed","environment":{"architecture":"x86_64","id":"fixture-linux","isolation":"container","platform":"linux"},"evidence_id":"ev_434bd49ec7096a6a955adb869d0f38ae3cb62f1256376ca87ca7ca983e5ef538","evidence_links":[],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"cleanup":{"owned_process_group":"verified","temporary_root":"removed"},"event_journal":[],"exit":{"code":0,"reason":"exited","signal":null},"files_after":[],"files_before":[],"filesystem_checkpoints":[{"at_ms":0,"effects":[],"files":[],"name":"before","truncated":false},{"at_ms":50,"effects":[],"files":[],"name":"after_settlement","truncated":false}],"filesystem_effects":[],"frames":[],"interaction_events":[],"limitations":[],"manifest":{"architecture":"fixture","comparison_contract":{},"comparison_contract_sha256":"44136fa355b3678a1146ad16f7e8649e94fb4fc21fe77e8310c060f61caaff8a","completed_at":"2026-01-01T00:00:00.001Z","executable_sha256":"0000000000000000000000000000000000000000000000000000000000000000","full_scenario_sha256":"e9fb6dbb12060cb724e2c6360da0d406b8dcb13ed91769105f92efe312491fc7","normalization_sha256":"60a27b2d1ee5aa73bf2e5cb2deaed2e9cc548f961ad2e3772c981828b643cc43","platform":"fixture","provider_version":"3","pty_backend":"node-pty","rea_version":"1.1.0","scenario":{"executable_sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"started_at":"2026-01-01T00:00:00.000Z"},"normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"process_samples":[],"rendered_frames":[],"residual_unknowns":[],"settlement":{"cleanup_outcome":"not_required","elapsed_ms":50,"state":"quiesced"},"truncated":false},"operation":"capture_process_scenario","parameters":{"scenario":"reconstruction"},"predicate_type":"rea.process-capture","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"subject":null}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"max_capture_age_ms":{"description":"Maximum permitted capture age ms for this operation.","maximum":9007199254740991,"minimum":0,"type":"integer"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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":9007199254740991,"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":9007199254740991,"minimum":0,"type":"integer"},"min":{"description":"Value for min.","maximum":9007199254740991,"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._-]*$","type":"string"},"ignore_fields":{"description":"Value for ignore fields.","items":{"enum":["sequence","at_ms","scheduled_at_ms","dispatched_at_ms","elapsed_ms"],"type":"string"},"type":"array"},"source":{"description":"Value for source.","enum":["terminal_raw","terminal_rendered","interaction","lifecycle","process","filesystem"],"type":"string"}},"required":["id","source","exact"],"type":"object"},"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._-]*$","type":"string"},"before":{"description":"The earlier or left-hand observation to compare.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"}},"required":["before","after"],"type":"object"},"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._-]*$","type":"string"},"event":{"description":"Value for event.","pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"}},"required":["event","anchor"],"type":"object"},"type":"array"},"prefix":{"default":[],"description":"Value for prefix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"type":"array"},"suffix":{"default":[],"description":"Value for suffix.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"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._-]*$","type":"string"},"minItems":2,"type":"array"}},"required":["events"],"type":"object"},"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._-]*$","type":"string"},"trace":{"description":"Value for trace.","items":{"anyOf":[{"pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},{"additionalProperties":false,"properties":{"unordered":{"description":"Value for unordered.","items":{"pattern":"^[A-Za-z][A-Za-z0-9._-]*$","type":"string"},"minItems":2,"type":"array"}},"required":["unordered"],"type":"object"}]},"type":"array"}},"required":["id","trace"],"type":"object"},"minItems":1,"type":"array"}},"required":["kind","variants"],"type":"object"}]}},"required":["events","language"],"type":"object"}},"required":["left","right"],"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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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","process"],"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"},"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"],"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":{"anyOf":[{"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"],"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":{"const":"pass","type":"string"}},"required":["satisfied_constraints","raw_trace","status","matched_variant"],"type":"object"},{"additionalProperties":false,"properties":{"matched_variant":{"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"],"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":["fail","unknown"],"type":"string"}},"required":["satisfied_constraints","raw_trace","status","matched_variant"],"type":"object"}]},"right":{"anyOf":[{"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"],"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":{"const":"pass","type":"string"}},"required":["satisfied_constraints","raw_trace","status","matched_variant"],"type":"object"},{"additionalProperties":false,"properties":{"matched_variant":{"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"],"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":["fail","unknown"],"type":"string"}},"required":["satisfied_constraints","raw_trace","status","matched_variant"],"type":"object"}]},"verdict":{"enum":["equivalent","different","nonconforming","unknown"],"type":"string"}},"required":["verdict","left","right","diagnostic"],"type":"object"}},"required":["status","terminal","interaction","exit","filesystem","process","first_divergence","limitations"],"type":"object"}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Compare Process Captures"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare complete artifact inventories by logical occurrence path, content identity, metadata, and graph relations. Pass the inventory Evidence nested in each inspect_artifact result as left and right. Every delta cites both inputs, and gaps yield truncated or unknown, never equivalence. Returns every change inline.","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":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_196e5dd37264f7b088ab8c0be326d22cac37e798bc89c72bcabc2ef9d74eed55","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"edges":[],"limitations":[],"manifest":{"edge_count":0,"graph_sha256":"8fa9468fe1a1a23c968cc1215eac19cce2510530cb8cbdd99b0b93bcd251c586","manifest_id":"agm_aada25a1123169497307a2f381969ca213532b63d2259e999bffe2aa50fe5227","node_count":1,"occurrence_count":1,"root_artifact_id":"art_2827b82d5d864b615b237ca45cf8a10fc5c14a1b73ba5bb8b358dddefc8e9f8c","root_format":"file","root_sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"nodes":[{"architecture":null,"artifact_id":"art_2827b82d5d864b615b237ca45cf8a10fc5c14a1b73ba5bb8b358dddefc8e9f8c","content_state":"materialized","executable":false,"format":"file","kind":"resource","limitations":[],"media_type":null,"sha256":"0000000000000000000000000000000000000000000000000000000000000000","size":1}],"occurrences":[{"artifact_id":"art_2827b82d5d864b615b237ca45cf8a10fc5c14a1b73ba5bb8b358dddefc8e9f8c","compressed_size":null,"declared_size":1,"encrypted":false,"entry_kind":"file","executable":false,"hash_status":"verified","limitations":[],"logical_path":".","occurrence_id":"occ_273bef4da5057c50b27edf034ffce68d5d9c0c5795778fc3ff41e4e6b3ef5586","parent_occurrence_id":null,"source_location":null}],"provenance":[]},"operation":"inventory_artifact","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-artifact","name":"REA artifact graph","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"file","local_path":"fixture-left","name":"fixture-left"}},"right":{"authority":"shipped-artifact","confidence":"observed","environment":null,"evidence_id":"ev_8c9ecce090f574469d379fb8bb173e65eff08071fa599b37547ed32dcd102a09","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"edges":[],"limitations":[],"manifest":{"edge_count":0,"graph_sha256":"6e02ceaea80d013e00e4c0c30621df60312f00e03dc338ec47f548671f6a7ec4","manifest_id":"agm_6fa9493e8b0d8164b3ca317323aeffc6be1f81e1e7a3cf4e668310093ba8ef73","node_count":1,"occurrence_count":1,"root_artifact_id":"art_96f554e44817506903722ba66b6b001897989fe181ef986478bc023e1fedf4b1","root_format":"file","root_sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"nodes":[{"architecture":null,"artifact_id":"art_96f554e44817506903722ba66b6b001897989fe181ef986478bc023e1fedf4b1","content_state":"materialized","executable":false,"format":"file","kind":"resource","limitations":[],"media_type":null,"sha256":"1111111111111111111111111111111111111111111111111111111111111111","size":1}],"occurrences":[{"artifact_id":"art_96f554e44817506903722ba66b6b001897989fe181ef986478bc023e1fedf4b1","compressed_size":null,"declared_size":1,"encrypted":false,"entry_kind":"file","executable":false,"hash_status":"verified","limitations":[],"logical_path":".","occurrence_id":"occ_4257a159555da426a3dd9e420ba59795ef3d87d0b1fd93e5cc7d969539519364","parent_occurrence_id":null,"source_location":null}],"provenance":[]},"operation":"inventory_artifact","parameters":{},"predicate_type":"rea.analysis","provider":{"id":"rea-artifact","name":"REA artifact graph","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"file","local_path":"fixture-right","name":"fixture-right"}}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["left","right"],"type":"object"},"kind":"session","name":"compare_artifacts","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"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"},"minItems":1,"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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":{"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"},"type":"array"},"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"],"type":"object"},"requiresSession":true,"title":"Compare Artifacts"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two explicit sets of analyze_function Evidence 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":{"$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":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":[],"basic_blocks":[{"end":"0x1001","start":"0x1000","successors":[]}],"callees":[],"callers":[],"comments":[],"incoming_references":[],"outgoing_references":[],"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":"return 0;","referenced_names":[],"referenced_strings":[]},"operation":"analyze_function","parameters":{"procedure":"main"},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"mach-o","local_path":"/tmp/function-0","name":"function-0"}},"right":{"authority":"shipped-artifact","confidence":"derived","environment":null,"evidence_id":"ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":[],"basic_blocks":[{"end":"0x1001","start":"0x1000","successors":[]}],"callees":[],"callers":[],"comments":[],"incoming_references":[],"outgoing_references":[],"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":"return 1;","referenced_names":[],"referenced_strings":[]},"operation":"analyze_function","parameters":{"procedure":"main"},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"1111111111111111111111111111111111111111111111111111111111111111"},"format":"mach-o","local_path":"/tmp/function-1","name":"function-1"}}}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}},"required":["left","right"],"type":"object"},"kind":"session","name":"compare_functions","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"conclusion_kind":{"const":"derived_relationship","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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"const":"unchanged","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","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"},{"additionalProperties":false,"properties":{"conclusion_kind":{"enum":["derived_relationship","contradiction"],"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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"const":"changed","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","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"},{"additionalProperties":false,"properties":{"conclusion_kind":{"const":"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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"type":"null"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"type":"null"},"status":{"enum":["truncated","unknown"],"type":"string"},"text_delta":{"type":"null"}},"required":["dimension","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"}]},"type":"array"},"dimensions":{"items":{"anyOf":[{"additionalProperties":false,"properties":{"conclusion_kind":{"const":"derived_relationship","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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"const":"unchanged","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","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"},{"additionalProperties":false,"properties":{"conclusion_kind":{"enum":["derived_relationship","contradiction"],"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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"pattern":"^[a-f0-9]{64}$","type":"string"},"status":{"const":"changed","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","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"},{"additionalProperties":false,"properties":{"conclusion_kind":{"const":"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"},"minItems":2,"type":"array"},"left_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"left_digest":{"type":"null"},"limitations":{"items":{"type":"string"},"type":"array"},"right_count":{"anyOf":[{"maximum":9007199254740991,"minimum":0,"type":"integer"},{"type":"null"}]},"right_digest":{"type":"null"},"status":{"enum":["truncated","unknown"],"type":"string"},"text_delta":{"type":"null"}},"required":["dimension","left_count","right_count","evidence_links","limitations","status","left_digest","right_digest","text_delta","conclusion_kind"],"type":"object"}]},"maxItems":8,"minItems":8,"type":"array"},"function_match":{"anyOf":[{"additionalProperties":false,"properties":{"left_name":{"type":"string"},"method":{"const":"symbol","type":"string"},"right_name":{"type":"string"},"status":{"const":"matched","type":"string"}},"required":["status","method","left_name","right_name"],"type":"object"},{"additionalProperties":false,"properties":{"left_name":{"type":"string"},"method":{"const":"explicit","type":"string"},"right_name":{"type":"string"},"status":{"enum":["mismatched","ambiguous"],"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","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"],"type":"object"},"requiresSession":true,"title":"Compare Functions"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Compare two canonical Evidence 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 returns every change inline.","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":"/tmp/left-evidence.json","record_pairs":[],"right_bundle_path":"/tmp/right-evidence.json"}],"properties":{"left_bundle_path":{"description":"Local filesystem path for left bundle.","minLength":1,"type":"string"},"record_pairs":{"default":[],"description":"Value for record pairs.","items":{"properties":{"left_evidence_id":{"description":"Exact Evidence identifier for the left observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"right_evidence_id":{"description":"Exact Evidence identifier for the right observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"}},"required":["left_evidence_id","right_evidence_id"],"type":"object"},"type":"array"},"right_bundle_path":{"description":"Local filesystem path for right bundle.","minLength":1,"type":"string"}},"required":["left_bundle_path","right_bundle_path"],"type":"object"},"kind":"session","name":"compare_bundles","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"additionalProperties":false,"properties":{"changes":{"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"},"type":"array"},"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"],"type":"object"},"requiresSession":true,"title":"Compare Bundles"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Aggregate validated process and artifact comparison Evidence. Runtime observations remain distinct from static behavior candidates; missing or incomplete comparisons produce unresolved findings, never causal claims. Returns every finding inline.","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_cc8049f629a9318e985bee4a547c0ec6646e9d3c2cbbabf4ac9b3758bc3ede86","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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}}],"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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":"derived_relationship","dimension":"assembly","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"left_count":0,"left_digest":"12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126","limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":"12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126","status":"unchanged","text_delta":{"added_lines":0,"hunks":0,"removed_lines":0}},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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":"changed","summary":{"changed":1,"truncated":0,"unchanged":7,"unknown":0}},"operation":"compare_functions","parameters":{"left_evidence_id":"ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","right_evidence_id":"ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"},"predicate_type":"rea.function-comparison","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"subject":null}]}],"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"type":"array"}},"type":"object"},"kind":"session","name":"find_changed_behavior","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"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"},"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"},"type":"array"}},"required":["items"],"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"],"type":"object"},"requiresSession":true,"title":"Find Changed Behavior"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Build every shortest direct-callee path inline from complete analyze_function Evidence records using exact canonical addresses. Missing dossiers and provider mixing 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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","evidence_links":[],"limitations":[],"locations":[],"normalized_result":{"assembly":[],"basic_blocks":[{"end":"0x1001","start":"0x1000","successors":[]}],"callees":[],"callers":[],"comments":[],"incoming_references":[],"outgoing_references":[],"procedure":{"address":"0x1000","locals":[],"name":"main","signature":"int main(void)"},"pseudocode":"return 0;","referenced_names":[],"referenced_strings":[]},"operation":"analyze_function","parameters":{"procedure":"main"},"predicate_type":"rea.analysis","provider":{"id":"rea-workflow","name":"REA composed investigation workflow","version":"1"},"raw_result":null,"subject":{"architecture":null,"digest":{"sha256":"0000000000000000000000000000000000000000000000000000000000000000"},"format":"mach-o","local_path":"/tmp/function-0","name":"function-0"}}],"goal":{"address":"0x1000"},"start":{"address":"0x1000"}}],"properties":{"functions":{"description":"Value for functions.","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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"minItems":1,"type":"array"},"goal":{"additionalProperties":false,"description":"Value for goal.","properties":{"address":{"description":"Value for address.","pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9a-fA-F]{2})+:)?0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"},"start":{"additionalProperties":false,"description":"Value for start.","properties":{"address":{"description":"Value for address.","pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9a-fA-F]{2})+:)?0[xX][0-9a-fA-F]+$","type":"string"}},"required":["address"],"type":"object"}},"required":["functions","start","goal"],"type":"object"},"kind":"session","name":"build_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"result":{"anyOf":[{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"items":{"additionalProperties":false,"properties":{"edges":{"items":{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"source":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"target":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"}},"required":["source","target","evidence_links"],"type":"object"},"type":"array"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"nodes":{"items":{"additionalProperties":false,"properties":{"address":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"name":{"anyOf":[{"type":"string"},{"type":"null"}]}},"required":["address","name","evidence_links"],"type":"object"},"minItems":1,"type":"array"}},"required":["hops","nodes","edges","evidence_links"],"type":"object"},"minItems":1,"type":"array"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"type":"boolean"}},"required":["exhaustive"],"type":"object"},"shortest_hops":{"maximum":9007199254740991,"minimum":0,"type":"integer"},"start":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"const":"found","type":"string"}},"required":["start","goal","explored","evidence_links","limitations","status","shortest_hops","search_scope","paths"],"type":"object"},{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":true,"type":"boolean"}},"required":["exhaustive"],"type":"object"},"shortest_hops":{"type":"null"},"start":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"const":"not_found","type":"string"}},"required":["start","goal","explored","evidence_links","limitations","status","shortest_hops","search_scope","paths"],"type":"object"},{"additionalProperties":false,"properties":{"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"limitations":{"items":{"type":"string"},"type":"array"},"paths":{"items":{"not":{}},"maxItems":0,"minItems":0,"type":"array"},"search_scope":{"additionalProperties":false,"properties":{"exhaustive":{"const":false,"type":"boolean"}},"required":["exhaustive"],"type":"object"},"shortest_hops":{"type":"null"},"start":{"pattern":"^(?:(?:[A-Za-z0-9._~-]|%[0-9A-F]{2})+:)?0x(?:0|[1-9a-f][0-9a-f]*)$","type":"string"},"status":{"const":"unknown","type":"string"}},"required":["start","goal","explored","evidence_links","limitations","status","shortest_hops","search_scope","paths"],"type":"object"}]}},"required":["result","evidence_id","evidence"],"type":"object"},"requiresSession":true,"title":"Build Call Path"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Evaluate every explicit caller-declared hypothesis 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. Returns all correlations and their complete Evidence closure inline.","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":[{"mappings":[{"hypothesis":{"expected_pattern":"static_only","statement":"Static implementation changed without terminal change."},"runtime":{"comparison_evidence_id":"ev_7b90781a4b4c9006d4eee122009b3baed342e442ad2ad62498bf9e7df850355c","dimension":"terminal"},"side_alignment":"left_to_left","static":{"comparison_evidence_id":"ev_cc8049f629a9318e985bee4a547c0ec6646e9d3c2cbbabf4ac9b3758bc3ede86","selector":{"dimension":"pseudocode","kind":"function"}}}],"runtime_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_7b90781a4b4c9006d4eee122009b3baed342e442ad2ad62498bf9e7df850355c","evidence_links":["ev_39dc6ca57fd8d981c0bce63a1de75dd752e0ae47ff911440949cba8f6a8f1b7c","ev_434bd49ec7096a6a955adb869d0f38ae3cb62f1256376ca87ca7ca983e5ef538"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"exit":"unchanged","filesystem":"unchanged","first_divergence":{"status":"none"},"interaction":"unchanged","limitations":[],"process":"unchanged","status":"unchanged","terminal":"unchanged"},"operation":"compare_process_captures","parameters":{"left_evidence_id":"ev_39dc6ca57fd8d981c0bce63a1de75dd752e0ae47ff911440949cba8f6a8f1b7c","left_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10},"right_evidence_id":"ev_434bd49ec7096a6a955adb869d0f38ae3cb62f1256376ca87ca7ca983e5ef538","right_normalization":{"paths":true,"patterns":[],"pids":true,"ports":true,"time_bucket_ms":10}},"predicate_type":"rea.process-comparison","provider":{"id":"rea-process","name":"REA deterministic process harness","version":"3"},"raw_result":null,"subject":null}],"static_comparisons":[{"authority":"analyst-inference","confidence":"derived","environment":null,"evidence_id":"ev_cc8049f629a9318e985bee4a547c0ec6646e9d3c2cbbabf4ac9b3758bc3ede86","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"limitations":["Artifact identity is unavailable for this observation."],"locations":[],"normalized_result":{"changes":[{"conclusion_kind":"derived_relationship","dimension":"pseudocode","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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}}],"dimensions":[{"conclusion_kind":"derived_relationship","dimension":"identity","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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":"derived_relationship","dimension":"assembly","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"left_count":0,"left_digest":"12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126","limitations":["Assembly is opaque provider text; relocation normalization is unavailable."],"right_count":0,"right_digest":"12ae32cb1ec02d01eda3581b127c1fee3b0dc53572ed6baf239721a03d82e126","status":"unchanged","text_delta":{"added_lines":0,"hunks":0,"removed_lines":0}},{"conclusion_kind":"derived_relationship","dimension":"comments","evidence_links":["ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"],"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":"changed","summary":{"changed":1,"truncated":0,"unchanged":7,"unknown":0}},"operation":"compare_functions","parameters":{"left_evidence_id":"ev_fd7f0f3851d21e5284b47129d9c7142e2ebeb6ed1c5f91bcff18a781d0b24cb7","right_evidence_id":"ev_79f87eddd8df1d59c6f2e2cd99f21bfae2e5a22fd26c5bf0d0b9ccf9e24b0522"},"predicate_type":"rea.function-comparison","provider":{"id":"rea-function-comparison","name":"REA function comparison","version":"1"},"raw_result":null,"subject":null}]}],"properties":{"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.","minLength":1,"type":"string"}},"required":["statement","expected_pattern"],"type":"object"},"runtime":{"additionalProperties":false,"description":"Value for runtime.","properties":{"comparison_evidence_id":{"description":"Exact Evidence identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["terminal","interaction","exit","filesystem","process"],"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 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.","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"},"minItems":1,"type":"array"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"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"}},"required":["provider","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 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":"Value for offset.","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."},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"minItems":1,"type":"array"}},"required":["static_comparisons","runtime_comparisons","mappings"],"type":"object"},"kind":"session","name":"correlate_static_and_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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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"},"minItems":2,"type":"array"},"hypothesis":{"additionalProperties":false,"properties":{"expected_pattern":{"enum":["cochanged","static_only","runtime_only","both_unchanged"],"type":"string"},"statement":{"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","process"],"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":{"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"},"type":"array"}},"required":["items"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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"],"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":[{"specification":{"claims":[{"claim_id":"terminal-output","comparison_evidence_id":"ev_7b90781a4b4c9006d4eee122009b3baed342e442ad2ad62498bf9e7df850355c","dimension":"terminal","kind":"behavioral","title":"Terminal output remains equivalent"}],"name":"Terminal compatibility"}}],"properties":{"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._-]*$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence identifier for the comparison observation.","pattern":"^ev_[a-f0-9]{64}$","type":"string"},"dimension":{"description":"Value for dimension.","enum":["overall","terminal","interaction","exit","filesystem","process"],"type":"string"},"kind":{"const":"behavioral","description":"Value for kind.","type":"string"},"title":{"description":"Value for title.","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._-]*$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence 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.","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._-]*$","type":"string"},"comparison_evidence_id":{"description":"Exact Evidence 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.","minLength":1,"type":"string"}},"required":["claim_id","title","comparison_evidence_id","kind","dimension"],"type":"object"}]},"minItems":1,"type":"array"},"name":{"description":"Exact name used by this operation.","minLength":1,"type":"string"}},"required":["name","claims"],"type":"object"}},"required":["specification"],"type":"object"},"kind":"session","name":"verify_reconstruction","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":{"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"}},"required":["provider","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"},"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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"},"evidence_id":{"pattern":"^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._-]*$","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"},"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"},"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"},"minItems":1,"type":"array"},"status":{"enum":["pass","fail","unknown"],"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"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"},"type":"array"}},"required":["items"],"type":"object"},"evidence_links":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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._-]*$","type":"string"},"minItems":1,"type":"array"},"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"},"unknown_ids":{"items":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"},"type":"array"}},"required":["operation","rationale","claim_ids","unknown_ids"],"type":"object"},"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":9007199254740991,"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"],"type":"object"},"requiresSession":true,"title":"Verify Reconstruction"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true},"description":"List every current residual-unknown head in deterministic ID order, with optional exact status, severity, and domain filters. Results are complete and inline. 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":[{}],"properties":{"domain":{"description":"Value for domain.","minLength":1,"type":"string"},"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":{"items":{"items":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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"},"total":{"maximum":9007199254740991,"minimum":0,"type":"integer"}},"required":["items","total"],"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. 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":[{"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":{"contradicting_evidence_ids":{"default":[],"description":"Ordered Evidence identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"description":"Value for domain.","minLength":1,"type":"string"},"question":{"description":"Concrete unresolved question to retain for later investigation.","minLength":1,"type":"string"},"recommended_probes":{"description":"Value for recommended probes.","items":{"properties":{"operation":{"description":"Value for operation.","minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"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":[{"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 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"}},"required":["question","severity","domain","required_authority","required_confidence","required_environment","recommended_probes","relationships"],"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"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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 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":[{"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":{"contradicting_evidence_ids":{"description":"Ordered Evidence identifiers for the contradicting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"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.","minLength":1,"type":"string"},"rationale":{"description":"Value for rationale.","minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}],"description":"Value for architecture."},"id":{"anyOf":[{"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":[{"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"},"minItems":1,"type":"array"},"rationale":{"description":"Value for rationale.","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"},"type":"array"},"rationale":{"description":"Value for rationale.","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 identifiers for the supporting observations.","items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"unknown_id":{"description":"Exact residual-unknown identifier.","pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["unknown_id","expected_revision","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"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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":"Return every Evidence record and residual unknown currently retained by this session as one inline bundle for direct inspection or follow-up workflows.","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":[{}],"properties":{},"type":"object"},"kind":"session","name":"get_evidence_bundle","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":{"artifacts":{"items":{"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","dos-mz","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"},"captures":{"items":{"additionalProperties":false,"properties":{"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"predicate_type":{"minLength":1,"type":"string"}},"required":["evidence_id","predicate_type"],"type":"object"},"type":"array"},"environments":{"items":{"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":"array"},"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"},"type":"array"},"records":{"items":{"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"}},"required":["provider","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"}]},"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","dos-mz","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":["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"}]},"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","dos-mz","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":["evidence_id","subject","provider","predicate_type","operation","parameters","raw_result","normalized_result","confidence","authority","environment","limitations","locations","evidence_links"],"type":"object"}]},"type":"array"},"scenarios":{"items":{"additionalProperties":false,"properties":{"authority":{"const":"controlled-replay","type":"string"},"evidence_id":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"operation":{"minLength":1,"type":"string"}},"required":["evidence_id","operation","authority"],"type":"object"},"type":"array"},"unknowns":{"items":{"additionalProperties":false,"properties":{"contradicting_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"type":"array"},"domain":{"minLength":1,"type":"string"},"mutation_evidence_ids":{"items":{"pattern":"^ev_[a-f0-9]{64}$","type":"string"},"minItems":1,"type":"array"},"previous_revision_digest":{"anyOf":[{"pattern":"^[a-f0-9]{64}$","type":"string"},{"type":"null"}]},"question":{"minLength":1,"type":"string"},"recommended_probes":{"items":{"additionalProperties":false,"properties":{"operation":{"minLength":1,"type":"string"},"rationale":{"minLength":1,"type":"string"}},"required":["operation","rationale"],"type":"object"},"type":"array"},"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"},"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":[{"minLength":1,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"minLength":1,"type":"string"},{"type":"null"}]},"isolation":{"anyOf":[{"enum":["none","process","container","virtual-machine"],"type":"string"},{"type":"null"}]},"platform":{"anyOf":[{"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"},"minItems":1,"type":"array"},"rationale":{"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"},"type":"array"},"rationale":{"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"},"type":"array"},"unknown_id":{"pattern":"^unk_[a-f0-9]{64}$","type":"string"}},"required":["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":["artifacts","providers","environments","scenarios","captures","unknowns","records"],"type":"object"}},"required":["result"],"type":"object"},"requiresSession":true,"title":"Get Evidence Bundle"},{"analysisOperation":null,"annotations":{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":false},"description":"Return the selected document, current address, and containing/current procedure in one provider-neutral result. The result reflects sequential provider observations, not an atomic cursor snapshot; a cursor outside any procedure returns procedure: null.","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; use xrefs, assembly, or pseudocode for those deeper views.","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/main.ts b/src/main.ts index 67de29c4f..20307cb09 100644 --- a/src/main.ts +++ b/src/main.ts @@ -93,7 +93,6 @@ export const run = async ( javascriptRuntimeObservation: new V8InspectorProvider(), }; }), - runtimeState, }); if (!transport.ok) return 1; const unregisterReload = registerConfigReload({ diff --git a/src/main/transport.ts b/src/main/transport.ts index 5af7d802f..3bc5d1e5b 100644 --- a/src/main/transport.ts +++ b/src/main/transport.ts @@ -7,7 +7,6 @@ import { type CreateServerOptions, } from "../server/createServer.js"; import type { RuntimeDependencies } from "./types.js"; -import type { RuntimeState } from "./state.js"; import { MCP_CONNECTION_LOST, MCP_CONNECTION_START_FAILED, @@ -27,7 +26,6 @@ interface ServerContext { readonly logger: Logger; readonly serverLogger: Logger; readonly loadOptionalProviders: () => Promise; - readonly runtimeState: RuntimeState; } export const startMcpTransport = async ( @@ -57,12 +55,6 @@ export const startMcpTransport = async ( (dependencies.createServer ?? createServer)(session, session, { logger: serverContext.logger, ...optionalProviders, - javascriptReplayConfiguration: () => - serverContext.runtimeState.currentConfig - .javascriptReplayConfiguration, - managedRuntimeConfiguration: () => - serverContext.runtimeState.currentConfig - .managedRuntimeConfiguration, }), { onerror: () => { diff --git a/src/replay/JavaScriptReplayWorker.ts b/src/replay/JavaScriptReplayWorker.ts deleted file mode 100644 index d2699bded..000000000 --- a/src/replay/JavaScriptReplayWorker.ts +++ /dev/null @@ -1,560 +0,0 @@ -import { - Script, - SourceTextModule, - SyntheticModule, - createContext, - type Module, -} from "node:vm"; -import { types } from "node:util"; - -import type { - WorkerModule, - WorkerOutcome, - WorkerRequest, - WorkerSide, -} from "./JavaScriptReplayWorkerTypes.js"; -import { createSeededRandom } from "./seededRandom.js"; - -const isRecord = (value: unknown): value is Record => - typeof value === "object" && value !== null && !Array.isArray(value); - -const record = (value: unknown, label: string): Record => { - if (!isRecord(value)) throw new TypeError(`Invalid replay worker ${label}`); - return value; -}; - -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"), - }; -}; - -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 (!Array.isArray(request.cases)) - throw new TypeError("Invalid replay worker cases"); - const determinism = record(request.determinism, "determinism"); - const limits = record(request.limits, "limits"); - return { - 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"; -} - -const main = async (): Promise => { - const chunks: Buffer[] = []; - for await (const chunk of process.stdin) chunks.push(Buffer.from(chunk)); - const rawRequest: unknown = JSON.parse( - Buffer.concat(chunks).toString("utf8"), - ); - const request = parseWorkerRequest(rawRequest); - const left: WorkerOutcome[] = []; - const right: WorkerOutcome[] = []; - for (let index = 0; index < request.cases.length; index += 1) { - const replayCase = request.cases[index]; - if (replayCase === undefined) continue; - left.push(await runCase(request.left, replayCase, request, index)); - if (request.right !== undefined) - right.push(await runCase(request.right, replayCase, request, index)); - } - process.stdout.write( - JSON.stringify({ - left, - ...(request.right === undefined ? {} : { right }), - }), - ); -}; - -const runCase = async ( - side: WorkerSide, - replayCase: WorkerRequest["cases"][number], - request: WorkerRequest, - index: number, -): Promise => { - try { - const loaded = await loadEntry(side, request, index); - if (typeof loaded !== "function") - throw new TypeError(`Replay export is not callable: ${side.entryExport}`); - const returned = await Reflect.apply(loaded, undefined, [ - ...replayCase.arguments, - ]); - try { - return { - case_id: replayCase.caseId, - outcome: "return", - value: projectValue( - returned, - request.limits.resultDepth, - request.limits.resultNodes, - ), - input_sha256: replayCase.inputSha256, - output_sha256: null, - truncated: false, - }; - } catch (error: unknown) { - return exceptionOutcome( - replayCase, - "serialization_error", - error, - request.limits.exceptionBytes, - ); - } - } catch (error: unknown) { - return exceptionOutcome( - replayCase, - error instanceof ReplayDeniedError ? "denied" : "exception", - error, - request.limits.exceptionBytes, - ); - } -}; - -const loadEntry = async ( - side: WorkerSide, - request: WorkerRequest, - caseIndex: number, -): Promise => { - const modules = new Map(side.modules.map((module) => [module.alias, module])); - const context = deterministicContext(request, caseIndex); - const esmCache = new Map(); - const commonJsCache = new Map>(); - - const loadCommonJs = (alias: string): Record => { - const cached = commonJsCache.get(alias); - if (cached !== undefined) return cached; - const descriptor = requiredModule(modules, alias); - if (descriptor.format !== "commonjs-factory") - throw new TypeError( - `Synchronous require cannot load ESM module: ${alias}`, - ); - const module: { exports: Record } = { exports: {} }; - commonJsCache.set(alias, module.exports); - const requireModule = (specifier: string): Record => { - const dependency = descriptor.dependencies[specifier]; - if (dependency === undefined) - throw new ReplayDeniedError(`Undeclared require: ${specifier}`); - return loadCommonJs(dependency); - }; - installRspackHelpers(requireModule); - const source = normalizeFactorySource(descriptor.source); - const factory: unknown = new Script(`(${source})`, { - filename: `/modules/${alias}.js`, - }).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; - }; - - const loadEsm = (alias: string): Module => { - const cached = esmCache.get(alias); - if (cached !== undefined) return cached; - const descriptor = requiredModule(modules, alias); - let module: Module; - if (descriptor.format === "commonjs-factory") { - const exports = loadCommonJs(alias); - const names = [...new Set(["default", ...Object.keys(exports)])]; - module = new SyntheticModule( - names, - function () { - this.setExport("default", exports); - for (const name of Object.keys(exports)) - if (name !== "default") this.setExport(name, exports[name]); - }, - { context, identifier: `rea:${alias}` }, - ); - } else { - module = new SourceTextModule(descriptor.source, { - context, - identifier: `rea:${alias}`, - initializeImportMeta: (meta) => { - meta.url = `rea:${alias}`; - }, - importModuleDynamically: () => { - throw new ReplayDeniedError( - "Dynamic import is unavailable in controlled replay", - ); - }, - }); - } - esmCache.set(alias, module); - return module; - }; - - const entry = requiredModule(modules, side.entryAlias); - if (entry.format === "commonjs-factory") { - const exported = loadCommonJs(side.entryAlias); - return side.entryExport === "default" - ? (exported.default ?? exported) - : exported[side.entryExport]; - } - const entryModule = loadEsm(side.entryAlias); - await entryModule.link((specifier, referencingModule) => { - const descriptor = requiredModule( - modules, - referencingModule.identifier.slice("rea:".length), - ); - const dependency = descriptor.dependencies[specifier]; - if (dependency === undefined) - throw new ReplayDeniedError(`Undeclared import: ${specifier}`); - return loadEsm(dependency); - }); - await entryModule.evaluate(); - const namespace = entryModule.namespace; - return Reflect.get(namespace, side.entryExport); -}; - -const deterministicContext = (request: WorkerRequest, caseIndex: number) => { - const random = createSeededRandom(request.determinism.randomSeed + caseIndex); - const epoch = Date.parse(request.determinism.clockIso); - class ReplayDate extends Date { - constructor(...arguments_: unknown[]) { - super(epoch); - if (arguments_.length > 0) { - const date: unknown = Reflect.construct(Date, arguments_, new.target); - if (!types.isDate(date)) throw new TypeError("Invalid Date instance"); - return date; - } - } - static override now(): number { - return epoch; - } - } - // Observable identity must match the real builtin, or a bundle that feature- - // detects (`Date.name`, `Date.length`, `Object.getPrototypeOf(Math)`) takes a - // different branch in replay than in production. - Object.defineProperties(ReplayDate, { - name: { value: "Date", configurable: true }, - length: { value: Date.length, configurable: true }, - }); - const replayDate = new Proxy(ReplayDate, { - apply: () => new ReplayDate().toString(), - }); - // Intercept only `random`; everything else, including the prototype chain and - // property descriptors, is forwarded to the real Math. - const replayMath = new Proxy(Math, { - get: (target, property, receiver) => - property === "random" ? random : Reflect.get(target, property, receiver), - }); - return createContext( - { - Date: replayDate, - Math: replayMath, - }, - { - name: "rea-controlled-replay", - codeGeneration: { strings: false, wasm: false }, - }, - ); -}; - -const installRspackHelpers = ( - require_: (specifier: string) => Record, -): void => { - const defineExports = ( - exports: Record, - definitions: Record unknown>, - ) => { - for (const [name, getter] of Object.entries(definitions)) - if (!Object.prototype.hasOwnProperty.call(exports, name)) - Object.defineProperty(exports, name, { enumerable: true, get: getter }); - }; - const markModule = (exports: Record) => { - Object.defineProperty(exports, "__esModule", { value: true }); - Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); - }; - const normalizeModule = (module: Record) => { - const getter = () => (module.__esModule === true ? module.default : module); - Object.defineProperty(getter, "a", { get: getter }); - return getter; - }; - const passModule = (module: Record) => module; - Object.defineProperties(require_, { - d: { value: defineExports }, - r: { value: markModule }, - n: { value: normalizeModule }, - nmd: { value: passModule }, - }); -}; - -const requiredModule = ( - modules: ReadonlyMap, - alias: string, -): WorkerModule => { - const module = modules.get(alias); - if (module === undefined) - throw new TypeError(`Undeclared module alias: ${alias}`); - return module; -}; - -const normalizeFactorySource = (source: string): string => - /^\s*\d+\s*\(/u.test(source) - ? source.replace(/^\s*\d+\s*\(/u, "function(") - : source; - -interface ProjectionContext { - readonly maximumDepth: number; - readonly maximumNodes: number; - nodes: number; -} - -const projectValue = ( - value: unknown, - maximumDepth: number, - maximumNodes: number, -): unknown => - projectValueRecursive(value, 0, new Set(), { - maximumDepth, - maximumNodes, - nodes: 0, - }); - -const projectValueRecursive = ( - candidate: unknown, - depth: number, - ancestors: Set, - context: ProjectionContext, -): unknown => { - context.nodes += 1; - if (context.nodes > context.maximumNodes || depth > context.maximumDepth) - throw new RangeError("Replay result projection limit exceeded"); - const leaf = projectLeaf(candidate); - if (leaf !== undefined) return leaf; - if (typeof candidate !== "object" || candidate === null) - throw new TypeError(`Unsupported replay result type: ${typeof candidate}`); - if (types.isProxy(candidate)) - throw new TypeError("Proxy replay results are unavailable"); - if (ancestors.has(candidate)) throw new TypeError("Cyclic replay result"); - ancestors.add(candidate); - try { - assertSupportedPrototype(candidate); - return projectComplexValue(candidate, depth, ancestors, context); - } finally { - ancestors.delete(candidate); - } -}; - -const projectLeaf = (candidate: unknown): unknown => { - if ( - candidate === null || - typeof candidate === "string" || - typeof candidate === "boolean" - ) - return candidate; - if (typeof candidate === "number") { - if (!Number.isFinite(candidate)) - throw new TypeError("Non-finite replay result number"); - return candidate; - } - return undefined; -}; - -const assertSupportedPrototype = (candidate: object): void => { - if (Array.isArray(candidate)) return; - const prototype: object | null = Object.getPrototypeOf(candidate); - if (prototype !== null && Object.getPrototypeOf(prototype) !== null) - throw new TypeError("Unsupported replay result prototype"); -}; - -const projectComplexValue = ( - candidate: object, - depth: number, - ancestors: Set, - context: ProjectionContext, -): unknown[] | Record => { - const descriptors = Object.getOwnPropertyDescriptors(candidate); - // A symbol-keyed property cannot be represented in JSON, and dropping it - // quietly would make the digest differ from a program that never had it. - // Report it as unsupported instead, alongside accessors and prototypes. - if (Object.getOwnPropertySymbols(candidate).length > 0) - throw new TypeError("Symbol-keyed replay results are unavailable"); - const output: unknown[] | Record = Array.isArray(candidate) - ? [] - : {}; - for (const [key, descriptor] of Object.entries(descriptors)) { - if (key === "length" && Array.isArray(candidate)) continue; - if (!("value" in descriptor)) - throw new TypeError("Replay result accessors are unavailable"); - if (Array.isArray(output)) { - if (!/^\d+$/u.test(key)) - throw new TypeError("Replay arrays may only contain indexed values"); - output[Number(key)] = projectValueRecursive( - descriptor.value, - depth + 1, - ancestors, - context, - ); - } else { - const value = projectValueRecursive( - descriptor.value, - depth + 1, - ancestors, - context, - ); - // Plain assignment to `__proto__` mutates the output's prototype instead - // of adding an own property, so the key would vanish from the digest. - if (key === "__proto__") { - Object.defineProperty(output, key, { - value, - enumerable: true, - writable: true, - configurable: true, - }); - } else { - output[key] = value; - } - } - } - if (Array.isArray(candidate) && Array.isArray(output)) { - for (let index = 0; index < candidate.length; index += 1) { - if (Object.hasOwn(descriptors, String(index))) continue; - output[index] = projectValueRecursive( - null, - depth + 1, - ancestors, - context, - ); - } - } - return output; -}; - -const exceptionOutcome = ( - replayCase: WorkerRequest["cases"][number], - outcome: "exception" | "serialization_error" | "denied", - error: unknown, - maximumBytes: number, -): WorkerOutcome => { - const details = exceptionDetails(error); - const name = bounded(details.name, maximumBytes); - const message = bounded(details.message, maximumBytes); - const stack = - details.stack === null ? null : bounded(details.stack, maximumBytes); - return { - case_id: replayCase.caseId, - outcome, - exception: { name, message, stack }, - input_sha256: replayCase.inputSha256, - output_sha256: null, - truncated: false, - }; -}; - -const exceptionDetails = ( - error: unknown, -): { - readonly name: string; - readonly message: string; - readonly stack: string | null; -} => { - if (typeof error !== "object" || error === null) - return { name: "Error", message: "Unknown replay exception", stack: null }; - if (types.isProxy(error)) - return { name: "Error", message: "Proxy replay exception", stack: null }; - const own = Object.getOwnPropertyDescriptors(error); - const prototype: object | null = Object.getPrototypeOf(error); - const inherited = - prototype === null ? {} : Object.getOwnPropertyDescriptors(prototype); - const stringValue = ( - descriptor: PropertyDescriptor | undefined, - ): string | null => - descriptor !== undefined && - "value" in descriptor && - typeof descriptor.value === "string" - ? descriptor.value - : null; - return { - name: stringValue(own.name) ?? stringValue(inherited.name) ?? "Error", - message: stringValue(own.message) ?? "Unknown replay exception", - stack: stringValue(own.stack), - }; -}; - -const bounded = (value: string, maximumBytes: number): string => { - const bytes = Buffer.from(value); - if (bytes.byteLength <= maximumBytes) return value; - const decoder = new TextDecoder("utf-8", { fatal: true }); - for (let end = maximumBytes; end >= Math.max(0, maximumBytes - 3); end -= 1) { - try { - return decoder.decode(bytes.subarray(0, end)); - } catch { - /* try the preceding UTF-8 boundary */ - } - } - return ""; -}; - -void main().catch((error: unknown) => { - const message = - error instanceof Error ? error.message : "Replay worker failed"; - process.stderr.write(message); - process.exitCode = 70; -}); diff --git a/src/replay/JavaScriptReplayWorkerTypes.ts b/src/replay/JavaScriptReplayWorkerTypes.ts deleted file mode 100644 index b94982106..000000000 --- a/src/replay/JavaScriptReplayWorkerTypes.ts +++ /dev/null @@ -1,49 +0,0 @@ -/** 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 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 deleted file mode 100644 index c60d92f90..000000000 --- a/src/replay/LinuxJavaScriptReplayRunner.ts +++ /dev/null @@ -1,313 +0,0 @@ -import { temporaryFilterHandle } from "./ReplaySeccompFile.js"; -import { spawn } from "node:child_process"; -import { randomBytes } from "node:crypto"; -import { readFile } from "node:fs/promises"; - -import { - digestBytes, - type JavaScriptReplayConfiguration, - type JavaScriptReplayRunner, - type PreparedReplayPlan, -} from "../application/JavaScriptReplayPlanning.js"; -import type { ReplayExecutionResult } from "../domain/javascriptReplay.js"; -import { linuxX64ReplaySeccompDigest } from "./LinuxSeccompPolicy.js"; -import { resolveLinuxRuntimeClosure } from "./LinuxRuntimeClosure.js"; -import { - assertRuntimeCommitment, - systemdArguments, - type RuntimeFile, -} from "./LinuxJavaScriptReplaySandbox.js"; -import { - boundedCollector, - killUnit, - observeCleanup, - observeUnitResult, - type CollectedProcess, -} from "./ReplayProcessLifecycle.js"; -import { - commitOutcomes, - compareOutcomes, - terminationResult, - workerRequest, -} from "./ReplayOutcome.js"; -import { - parseReplayWorkerResponse, - type WorkerProtocolResponse, -} from "./ReplayWorkerProtocol.js"; - -const isAborted = (signal: AbortSignal | undefined): boolean => - signal?.aborted === true; - -/** Run one prepared experiment under the exact Linux ADR-0002 boundary. */ -export class LinuxJavaScriptReplayRunner implements JavaScriptReplayRunner { - async execute( - prepared: PreparedReplayPlan, - configuration: JavaScriptReplayConfiguration, - signal?: AbortSignal, - ): Promise { - if (isAborted(signal)) - return terminationResult({ - prepared, - stderr: "", - termination: "cancelled", - cleanup: { state: "complete", residual_resources: [] }, - }); - const unit = `rea-replay-${randomBytes(8).toString("hex")}.service`; - const closure = await validateReplayCommitments(prepared, configuration); - const encoded = buildWorkerPayload(prepared); - const filter = await temporaryFilterHandle(); - try { - const replayProcess = launchReplayProcess({ - prepared, - configuration, - encoded, - closure, - filterPath: filter.path, - unit, - signal, - }); - try { - const collected = await replayProcess.completion; - if (replayProcess.terminationRequest !== undefined) - await replayProcess.terminationRequest; - const unitResult = await observeUnitResult( - configuration.systemctlPath, - unit, - ); - const cleanup = await observeCleanup(configuration.systemctlPath, unit); - return resolveReplayResult({ - prepared, - collected, - unitResult, - cleanup, - termination: replayProcess.termination, - }); - } finally { - signal?.removeEventListener("abort", replayProcess.terminate); - if (replayProcess.timeout !== undefined) - clearTimeout(replayProcess.timeout); - if ( - replayProcess.child !== undefined && - replayProcess.child.exitCode === null - ) { - replayProcess.requestTermination(); - await replayProcess.terminationRequest; - } - } - } finally { - await filter.close(); - } - } -} - -const validateReplayCommitments = async ( - prepared: PreparedReplayPlan, - configuration: JavaScriptReplayConfiguration, -): Promise => { - const closure = await resolveLinuxRuntimeClosure(configuration.nodePath); - assertRuntimeCommitment(prepared, closure); - const workerPath = prepared.publicPlan.runtime.worker.path; - if ( - digestBytes(await readFile(workerPath)) !== - prepared.publicPlan.runtime.worker.sha256 - ) - throw new TypeError("Replay worker changed after plan creation"); - if ( - linuxX64ReplaySeccompDigest() !== prepared.publicPlan.sandbox.seccomp_sha256 - ) - throw new TypeError("Replay seccomp policy changed after plan creation"); - return closure; -}; - -const buildWorkerPayload = (prepared: PreparedReplayPlan): Buffer => { - const request = workerRequest(prepared); - const encoded = Buffer.from(JSON.stringify(request)); - if (encoded.byteLength > prepared.publicPlan.limits.protocol_bytes) - throw new RangeError( - "Replay worker protocol input exceeds the committed limit", - ); - return encoded; -}; - -interface LaunchReplayProcessOptions { - readonly prepared: PreparedReplayPlan; - readonly configuration: JavaScriptReplayConfiguration; - readonly encoded: Buffer; - readonly closure: readonly RuntimeFile[]; - readonly filterPath: string; - readonly unit: string; - readonly signal: AbortSignal | undefined; -} - -interface ReplayProcess { - readonly child: ReturnType; - readonly completion: Promise; - readonly timeout: NodeJS.Timeout; - readonly terminate: () => void; - readonly requestTermination: () => void; - readonly terminationRequest: Promise | undefined; - readonly termination: "cancelled" | "timeout" | undefined; -} - -const launchReplayProcess = ( - options: LaunchReplayProcessOptions, -): ReplayProcess => { - const { - prepared, - configuration, - encoded, - closure, - filterPath, - unit, - signal, - } = options; - const arguments_ = systemdArguments({ - unit, - configuration, - prepared, - workerPath: prepared.publicPlan.runtime.worker.path, - closure, - filterPath, - }); - let child: ReturnType | undefined; - let timeout: NodeJS.Timeout | undefined; - let termination: "cancelled" | "timeout" | undefined; - let terminationRequest: Promise | undefined; - const requestTermination = (): void => { - terminationRequest ??= killUnit(configuration.systemctlPath, unit); - child?.kill("SIGKILL"); - }; - const terminate = (): void => { - termination ??= "cancelled"; - requestTermination(); - }; - const completion = new Promise((resolve, reject) => { - child = spawn(configuration.systemdRunPath, arguments_, { - stdio: ["pipe", "pipe", "pipe"], - env: replayProcessEnvironment(), - }); - const output = boundedCollector(prepared.publicPlan.limits.output_bytes); - const diagnostics = boundedCollector( - prepared.publicPlan.limits.stderr_bytes, - ); - child.stdout?.on("data", output.append); - child.stderr?.on("data", diagnostics.append); - child.once("error", reject); - child.once("close", (code, signalName) => - resolve({ - code, - signal: signalName, - stdout: output.value(), - stderr: diagnostics.value(), - outputExceeded: output.exceeded(), - }), - ); - child.stdin?.end(encoded); - }); - signal?.addEventListener("abort", terminate, { once: true }); - if (isAborted(signal)) terminate(); - timeout = setTimeout(() => { - termination ??= "timeout"; - requestTermination(); - }, prepared.publicPlan.limits.wall_time_ms); - timeout.unref(); - if (child === undefined || timeout === undefined) - throw new TypeError("Replay process was not launched"); - return { - child, - completion, - timeout, - terminate, - requestTermination, - get terminationRequest() { - return terminationRequest; - }, - get termination() { - return termination; - }, - }; -}; - -const replayProcessEnvironment = (): NodeJS.ProcessEnv => ({ - PATH: "/usr/bin:/bin", - LANG: "C", - LC_ALL: "C", - TZ: "UTC", - ...(process.env.XDG_RUNTIME_DIR === undefined - ? {} - : { XDG_RUNTIME_DIR: process.env.XDG_RUNTIME_DIR }), - ...(process.env.DBUS_SESSION_BUS_ADDRESS === undefined - ? {} - : { DBUS_SESSION_BUS_ADDRESS: process.env.DBUS_SESSION_BUS_ADDRESS }), -}); - -interface ResolveReplayResultOptions { - readonly prepared: PreparedReplayPlan; - readonly collected: CollectedProcess; - readonly unitResult: string; - readonly cleanup: ReplayExecutionResult["cleanup"]; - readonly termination: "cancelled" | "timeout" | undefined; -} - -const resolveReplayResult = ( - options: ResolveReplayResultOptions, -): ReplayExecutionResult => { - const { prepared, collected, unitResult, cleanup, termination } = options; - if (termination !== undefined) - return terminationResult({ - prepared, - stderr: collected.stderr, - termination, - cleanup, - }); - if (collected.outputExceeded) - return terminationResult({ - prepared, - stderr: collected.stderr, - termination: "protocol_error", - cleanup, - limitation: "Worker stdout exceeded the committed bound", - }); - if (collected.code !== 0) - return terminationResult({ - prepared, - stderr: collected.stderr, - termination: - collected.code === 137 || unitResult === "oom-kill" ? "oom" : "crash", - cleanup, - }); - let response: WorkerProtocolResponse; - try { - const rawResponse: unknown = JSON.parse(collected.stdout); - response = parseReplayWorkerResponse( - rawResponse, - prepared.publicPlan.cases, - prepared.publicPlan.right === undefined ? "single" : "differential", - ); - } catch { - return terminationResult({ - prepared, - stderr: collected.stderr, - termination: "protocol_error", - cleanup, - }); - } - const outcomes = commitOutcomes(response.left); - const right = - response.right === undefined ? undefined : commitOutcomes(response.right); - return { - plan_digest: prepared.publicPlan.plan_digest, - outcomes: [...outcomes, ...(right ?? [])], - ...(right === undefined - ? {} - : { comparison: compareOutcomes(outcomes, right) }), - stderr: collected.stderr, - termination: "completed", - cleanup, - limitations: [ - "Controlled replay observes the isolated extracted modules, not the original application runtime.", - "Network and host filesystem access were unavailable; unsupported dependencies may change behavior.", - ], - reproducer: null, - }; -}; diff --git a/src/replay/LinuxJavaScriptReplaySandbox.ts b/src/replay/LinuxJavaScriptReplaySandbox.ts deleted file mode 100644 index 42f311309..000000000 --- a/src/replay/LinuxJavaScriptReplaySandbox.ts +++ /dev/null @@ -1,152 +0,0 @@ -import { dirname } from "node:path"; - -import { - digestJson, - type JavaScriptReplayConfiguration, - type PreparedReplayPlan, -} from "../application/JavaScriptReplayPlanning.js"; -import { resolveLinuxRuntimeClosure } from "./LinuxRuntimeClosure.js"; - -export type RuntimeFile = Awaited< - ReturnType ->[number]; - -export interface SandboxArgumentsOptions { - readonly unit: string; - readonly configuration: JavaScriptReplayConfiguration; - readonly prepared: PreparedReplayPlan; - readonly workerPath: string; - readonly closure: readonly RuntimeFile[]; - readonly filterPath: string; -} - -export const assertRuntimeCommitment = ( - prepared: PreparedReplayPlan, - closure: readonly RuntimeFile[], -): void => { - const observed = closure.map((item) => ({ - source_path: item.sourcePath, - destination_path: item.destinationPath, - sha256: item.sha256, - })); - if ( - digestJson(observed) !== - digestJson(prepared.publicPlan.runtime.read_only_files) - ) - throw new TypeError("Replay runtime closure changed after plan creation"); -}; - -export const systemdArguments = ( - options: SandboxArgumentsOptions, -): string[] => { - const { unit, configuration, prepared, workerPath, closure, filterPath } = - options; - const limits = prepared.publicPlan.limits; - const descriptorPaths = [ - filterPath, - ...closure.map(({ sourcePath }) => sourcePath), - workerPath, - ]; - const workerFd = descriptorPaths.length + 2; - const wrapper = descriptorPaths - .map((_, index) => `exec ${String(index + 3)}<"$1"; shift`) - .concat('exec "$@"') - .join("\n"); - return [ - "--user", - "--pipe", - "--wait", - "--service-type=exec", - "--quiet", - `--unit=${unit}`, - `--property=MemoryMax=${String(limits.memory_bytes)}`, - "--property=MemorySwapMax=0", - `--property=TasksMax=${String(limits.tasks)}`, - `--property=CPUQuota=${String(limits.cpu_quota_percent)}%`, - "--property=KillMode=control-group", - "--property=SendSIGKILL=yes", - "--", - configuration.shellPath, - "-c", - wrapper, - "rea-replay-wrapper", - ...descriptorPaths, - configuration.bubblewrapPath, - "--unshare-all", - "--unshare-user", - "--disable-userns", - "--new-session", - "--die-with-parent", - "--cap-drop", - "ALL", - "--clearenv", - "--setenv", - "HOME", - "/work", - "--setenv", - "TMPDIR", - "/tmp", - "--setenv", - "TZ", - "UTC", - "--setenv", - "LANG", - "C", - "--setenv", - "LC_ALL", - "C", - "--tmpfs", - "/", - "--dir", - "/runtime", - "--dir", - "/work", - "--size", - String(limits.tmpfs_bytes), - "--tmpfs", - "/tmp", - ...bindArguments(closure), - "--ro-bind-fd", - String(workerFd), - "/runtime/worker.js", - "--proc", - "/proc", - "--dev", - "/dev", - "--remount-ro", - "/", - "--chdir", - "/work", - "--seccomp", - "3", - "--", - "/runtime/node", - `--max-old-space-size=${String( - Math.max(8, Math.floor(limits.memory_bytes / 1024 / 1024 / 2)), - )}`, - "--experimental-vm-modules", - "--permission", - "--allow-fs-read=/runtime/worker.js", - "/runtime/worker.js", - ]; -}; - -const bindArguments = (closure: readonly RuntimeFile[]): string[] => { - const arguments_: string[] = []; - const directories = new Set(); - for (const [index, item] of closure.entries()) { - const destination = item.destinationPath; - let parent = dirname(destination); - const chain: string[] = []; - while (parent !== "/" && !directories.has(parent)) { - chain.push(parent); - parent = dirname(parent); - } - for (const directory of chain.reverse()) { - directories.add(directory); - arguments_.push("--dir", directory); - } - arguments_.push("--ro-bind-fd", String(index + 4), destination); - } - return arguments_; -}; diff --git a/src/replay/LinuxRuntimeClosure.ts b/src/replay/LinuxRuntimeClosure.ts deleted file mode 100644 index b2370b210..000000000 --- a/src/replay/LinuxRuntimeClosure.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { spawn } from "node:child_process"; -import { createHash } from "node:crypto"; -import { readFile, realpath } from "node:fs/promises"; - -import type { ReplayRuntimeFileIdentity } from "../application/JavaScriptReplayPlanning.js"; - -/** Resolve and content-address the exact ELF closure mounted into a replay. */ -export const resolveLinuxRuntimeClosure = async ( - nodePath: string, -): Promise => { - const canonicalNode = await realpath(nodePath); - const collected = await collectLdd(canonicalNode); - if (collected.code !== 0) - throw new TypeError( - "Node runtime dependency closure could not be resolved", - ); - const paths = [...collected.stdout.matchAll(/(?:=>\s+)?(\/[^\s()]+)/gu)] - .map((match) => match[1]) - .filter((value): value is string => value !== undefined); - const libraries = await Promise.all( - [...new Set(paths)].map(async (path) => { - const sourcePath = await realpath(path); - return identity(sourcePath, path); - }), - ); - return [await identity(canonicalNode, "/runtime/node"), ...libraries]; -}; - -const identity = async ( - sourcePath: string, - destinationPath: string, -): Promise => ({ - sourcePath, - destinationPath, - sha256: createHash("sha256") - .update(await readFile(sourcePath)) - .digest("hex"), -}); - -const collectLdd = async ( - path: string, -): Promise<{ readonly code: number | null; readonly stdout: string }> => - new Promise((resolve, reject) => { - const child = spawn("/usr/bin/ldd", [path], { - stdio: ["ignore", "pipe", "ignore"], - }); - const timeout = setTimeout(() => child.kill("SIGKILL"), 5_000); - timeout.unref(); - let stdout = ""; - child.stdout.on("data", (chunk: Buffer) => { - stdout += chunk.toString("utf8"); - }); - child.once("error", (error) => { - clearTimeout(timeout); - reject(error); - }); - child.once("close", (code) => { - clearTimeout(timeout); - resolve({ code, stdout }); - }); - }); diff --git a/src/replay/LinuxSeccompPolicy.ts b/src/replay/LinuxSeccompPolicy.ts deleted file mode 100644 index 3597fc565..000000000 --- a/src/replay/LinuxSeccompPolicy.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { createHash } from "node:crypto"; - -const BPF_LD_W_ABS = 0x20; -const BPF_JMP_JEQ_K = 0x15; -const BPF_RET_K = 0x06; -const SECCOMP_RET_KILL_PROCESS = 0x8000_0000; -const SECCOMP_RET_ERRNO = 0x0005_0000 | 1; -const SECCOMP_RET_ALLOW = 0x7fff_0000; -const AUDIT_ARCH_X86_64 = 0xc000_003e; -const IOCTL = 16; -const TIOCSTI = 0x5412; - -const DENIED_X86_64_SYSCALLS = [ - 101, 103, 155, 161, 163, 165, 166, 167, 168, 169, 172, 173, 175, 176, 179, - 212, 246, 248, 249, 250, 272, 298, 303, 304, 308, 310, 311, 312, 313, 320, - 321, 323, 425, 426, 427, 428, 429, 430, 431, 432, 433, 442, -] as const; - -interface Instruction { - readonly code: number; - readonly jt: number; - readonly jf: number; - readonly k: number; -} - -/** Build the architecture-checked deny filter committed by ADR-0002. */ -export const buildLinuxX64ReplaySeccomp = (): Uint8Array => { - const instructions: Instruction[] = [ - { code: BPF_LD_W_ABS, jt: 0, jf: 0, k: 4 }, - { code: BPF_JMP_JEQ_K, jt: 1, jf: 0, k: AUDIT_ARCH_X86_64 }, - { code: BPF_RET_K, jt: 0, jf: 0, k: SECCOMP_RET_KILL_PROCESS }, - { code: BPF_LD_W_ABS, jt: 0, jf: 0, k: 0 }, - ]; - for (const syscall of DENIED_X86_64_SYSCALLS) { - instructions.push({ code: BPF_JMP_JEQ_K, jt: 0, jf: 1, k: syscall }); - instructions.push({ code: BPF_RET_K, jt: 0, jf: 0, k: SECCOMP_RET_ERRNO }); - } - instructions.push( - { code: BPF_JMP_JEQ_K, jt: 0, jf: 3, k: IOCTL }, - { code: BPF_LD_W_ABS, jt: 0, jf: 0, k: 24 }, - { code: BPF_JMP_JEQ_K, jt: 0, jf: 1, k: TIOCSTI }, - { code: BPF_RET_K, jt: 0, jf: 0, k: SECCOMP_RET_ERRNO }, - { code: BPF_RET_K, jt: 0, jf: 0, k: SECCOMP_RET_ALLOW }, - ); - const encoded = new Uint8Array(instructions.length * 8); - const view = new DataView(encoded.buffer); - instructions.forEach((instruction, index) => { - const offset = index * 8; - view.setUint16(offset, instruction.code, true); - view.setUint8(offset + 2, instruction.jt); - view.setUint8(offset + 3, instruction.jf); - view.setUint32(offset + 4, instruction.k, true); - }); - return encoded; -}; - -export const linuxX64ReplaySeccompDigest = (): string => - createHash("sha256").update(buildLinuxX64ReplaySeccomp()).digest("hex"); diff --git a/src/replay/ReplayOutcome.ts b/src/replay/ReplayOutcome.ts deleted file mode 100644 index a41f11d1a..000000000 --- a/src/replay/ReplayOutcome.ts +++ /dev/null @@ -1,141 +0,0 @@ -import { - digestJson, - type PreparedReplayPlan, -} from "../application/JavaScriptReplayPlanning.js"; -import type { ReplayExecutionResult } from "../domain/javascriptReplay.js"; -import { jsonValueSchema } from "../domain/jsonValue.js"; -import type { WorkerProtocolOutcome } from "./ReplayWorkerProtocol.js"; - -export const workerRequest = (prepared: PreparedReplayPlan) => ({ - left: workerSide(prepared.publicPlan.left, prepared.leftSources), - ...(prepared.publicPlan.right === undefined || - prepared.rightSources === undefined - ? {} - : { right: workerSide(prepared.publicPlan.right, prepared.rightSources) }), - cases: prepared.publicPlan.cases.map((item) => ({ - caseId: item.case_id, - arguments: item.arguments, - inputSha256: item.sha256, - })), - determinism: { - clockIso: prepared.publicPlan.determinism.clock_iso, - randomSeed: prepared.publicPlan.determinism.random_seed, - }, - limits: { - resultDepth: prepared.publicPlan.limits.result_depth, - resultNodes: prepared.publicPlan.limits.result_nodes, - exceptionBytes: prepared.publicPlan.limits.output_bytes, - }, -}); - -const workerSide = ( - side: PreparedReplayPlan["publicPlan"]["left"], - sources: Readonly>, -) => ({ - modules: side.modules.map((module) => ({ - alias: module.alias, - format: module.format, - dependencies: module.dependencies, - source: sources[module.alias] ?? "", - })), - entryAlias: side.entry_alias, - entryExport: side.entry_export, -}); - -export const commitOutcomes = ( - outcomes: readonly WorkerProtocolOutcome[], -): ReplayExecutionResult["outcomes"] => - outcomes.map((outcome) => { - 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, - exception: outcome.exception, - input_sha256: outcome.input_sha256, - output_sha256: digestJson(outcome.exception), - truncated: false, - }; - }); - -export const compareOutcomes = ( - left: ReplayExecutionResult["outcomes"], - right: ReplayExecutionResult["outcomes"], -): NonNullable => - left.map((item, index) => ({ - case_id: item.case_id, - status: - right[index] === undefined - ? "unknown" - : item.outcome === right[index].outcome && - item.output_sha256 === right[index].output_sha256 - ? "equal" - : "changed", - left_index: index, - right_index: index, - })); - -export interface TerminationResultOptions { - readonly prepared: PreparedReplayPlan; - readonly stderr: string; - readonly termination: - | "timeout" - | "oom" - | "crash" - | "cancelled" - | "protocol_error"; - readonly cleanup: ReplayExecutionResult["cleanup"]; - readonly limitation?: string; -} - -export const terminationResult = ( - options: TerminationResultOptions, -): ReplayExecutionResult => { - const { prepared, stderr, termination, cleanup, limitation } = options; - 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 { - plan_digest: prepared.publicPlan.plan_digest, - outcomes: [...outcomes, ...(differential ? outcomes : [])], - ...(differential - ? { - comparison: outcomes.map((item, index) => ({ - case_id: item.case_id, - status: "unknown" as const, - left_index: index, - right_index: index, - })), - } - : {}), - stderr, - termination, - cleanup, - limitations: [ - limitation ?? - `Replay terminated with ${termination}; the requested functional result remains unknown.`, - ], - reproducer: null, - }; -}; diff --git a/src/replay/ReplayProcessLifecycle.ts b/src/replay/ReplayProcessLifecycle.ts deleted file mode 100644 index 60d00925e..000000000 --- a/src/replay/ReplayProcessLifecycle.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { spawn } from "node:child_process"; - -import type { ReplayExecutionResult } from "../domain/javascriptReplay.js"; - -export interface CollectedProcess { - readonly code: number | null; - readonly signal: NodeJS.Signals | null; - readonly stdout: string; - readonly stderr: string; - readonly outputExceeded: boolean; -} - -export const boundedCollector = (maximum: number) => { - const chunks: Buffer[] = []; - let bytes = 0; - let overflow = false; - return { - append: (chunk: Buffer) => { - const retained = chunk.subarray(0, Math.max(0, maximum - bytes)); - if (retained.byteLength > 0) chunks.push(retained); - bytes += retained.byteLength; - if (retained.byteLength < chunk.byteLength) overflow = true; - }, - value: () => Buffer.concat(chunks).toString("utf8"), - exceeded: () => overflow, - }; -}; - -const collect = async (executable: string, arguments_: readonly string[]) => - new Promise<{ code: number | null; stdout: string; stderr: string }>( - (resolve, reject) => { - const child = spawn(executable, [...arguments_], { - stdio: ["ignore", "pipe", "pipe"], - }); - const stdout = unboundedCollector(); - const stderr = unboundedCollector(); - const timeout = setTimeout(() => child.kill("SIGKILL"), 5_000); - timeout.unref(); - child.stdout?.on("data", stdout.append); - child.stderr?.on("data", stderr.append); - child.once("error", (error) => { - clearTimeout(timeout); - reject(error); - }); - child.once("close", (code) => { - clearTimeout(timeout); - resolve({ code, stdout: stdout.value(), stderr: stderr.value() }); - }); - }, - ); - -export const killUnit = async ( - systemctl: string, - unit: string, -): Promise => { - try { - await collect(systemctl, [ - "--user", - "kill", - "--kill-whom=all", - "--signal=SIGKILL", - unit, - ]); - } catch { - /* cleanup continues */ - } -}; - -export const observeCleanup = async ( - systemctl: string, - unit: string, -): Promise => { - try { - const state = await collect(systemctl, [ - "--user", - "show", - "--property=ActiveState", - "--value", - unit, - ]); - const activeState = state.stdout.trim(); - if ( - state.code !== 0 || - activeState === "inactive" || - activeState === "failed" || - activeState.length === 0 - ) { - await collect(systemctl, ["--user", "reset-failed", unit]); - return { state: "complete", residual_resources: [] }; - } - return { state: "incomplete", residual_resources: [unit] }; - } catch { - return { state: "incomplete", residual_resources: [unit] }; - } -}; - -export const observeUnitResult = async ( - systemctl: string, - unit: string, -): Promise => { - try { - const result = await collect(systemctl, [ - "--user", - "show", - "--property=Result", - "--value", - unit, - ]); - return result.stdout.trim(); - } catch { - return "unknown"; - } -}; - -const unboundedCollector = () => { - const chunks: Buffer[] = []; - return { - append: (chunk: Buffer) => chunks.push(chunk), - value: () => Buffer.concat(chunks).toString("utf8"), - }; -}; diff --git a/src/replay/ReplaySeccompFile.ts b/src/replay/ReplaySeccompFile.ts deleted file mode 100644 index b89e34c84..000000000 --- a/src/replay/ReplaySeccompFile.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { mkdtemp, open, rm, writeFile } from "node:fs/promises"; -import { tmpdir } from "node:os"; -import { join } from "node:path"; - -import { buildLinuxX64ReplaySeccomp } from "./LinuxSeccompPolicy.js"; - -/** Own a private seccomp file and descriptor until probe or execution cleanup. */ -export const temporaryFilterHandle = async () => { - const directory = await mkdtemp(join(tmpdir(), "rea-replay-filter-")); - const path = join(directory, "seccomp.bpf"); - try { - await writeFile(path, buildLinuxX64ReplaySeccomp(), { mode: 0o600 }); - const handle = await open(path, "r"); - return { - path, - handle, - close: async () => { - try { - await handle.close(); - } finally { - await rm(directory, { recursive: true, force: true }); - } - }, - }; - } catch (cause: unknown) { - await rm(directory, { recursive: true, force: true }); - throw cause; - } -}; diff --git a/src/replay/ReplayWorkerProtocol.test.ts b/src/replay/ReplayWorkerProtocol.test.ts deleted file mode 100644 index 52c18d6c5..000000000 --- a/src/replay/ReplayWorkerProtocol.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { parseReplayWorkerResponse } from "./ReplayWorkerProtocol.js"; - -const digest = "1".repeat(64); -const cases = [{ case_id: "case-1", sha256: digest }]; -const outcome = { - case_id: "case-1", - outcome: "return" as const, - value: { parsed: true }, - input_sha256: digest, - output_sha256: null, - truncated: false as const, -}; - -describe("replay worker protocol", () => { - it("accepts only the exact committed case sequence", () => { - expect( - parseReplayWorkerResponse({ left: [outcome] }, cases, "single"), - ).toMatchObject({ left: [outcome] }); - expect(() => - parseReplayWorkerResponse( - { left: [{ ...outcome, case_id: "forged" }] }, - cases, - "single", - ), - ).toThrow("case identity changed"); - expect(() => - parseReplayWorkerResponse( - { - left: [{ ...outcome, input_sha256: "2".repeat(64) }], - }, - cases, - "single", - ), - ).toThrow("case identity changed"); - }); - - it("requires the exact differential shape and strict outcomes", () => { - expect(() => - parseReplayWorkerResponse({ left: [outcome] }, cases, "differential"), - ).toThrow(); - expect(() => - parseReplayWorkerResponse( - { - left: [{ ...outcome, unexpected: true }], - }, - cases, - "single", - ), - ).toThrow(); - expect(() => - parseReplayWorkerResponse( - { - left: [{ ...outcome, outcome: "exception", value: undefined }], - }, - cases, - "single", - ), - ).toThrow(); - }); -}); diff --git a/src/replay/ReplayWorkerProtocol.ts b/src/replay/ReplayWorkerProtocol.ts deleted file mode 100644 index a65f24213..000000000 --- a/src/replay/ReplayWorkerProtocol.ts +++ /dev/null @@ -1,90 +0,0 @@ -import { z } from "zod"; - -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 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({ - left: z.array(workerOutcomeSchema), - }) - .strict(); - -const differentialWorkerResponseSchema = z - .object({ - left: z.array(workerOutcomeSchema), - right: z.array(workerOutcomeSchema), - }) - .strict(); - -export type WorkerProtocolOutcome = z.infer; -export type WorkerProtocolResponse = - | (z.infer & { readonly right?: never }) - | z.infer; - -export type ReplayWorkerResponseMode = "single" | "differential"; - -interface ExpectedCase { - readonly case_id: string; - readonly sha256: string; -} - -/** Strictly authenticate case ordering and commitments in worker output. */ -export const parseReplayWorkerResponse = ( - rawResponse: unknown, - cases: readonly ExpectedCase[], - mode: ReplayWorkerResponseMode, -): WorkerProtocolResponse => { - const response = - mode === "single" - ? singleWorkerResponseSchema.parse(rawResponse) - : differentialWorkerResponseSchema.parse(rawResponse); - validateOutcomeSequence(response.left, cases); - if (mode === "differential") - validateOutcomeSequence( - differentialWorkerResponseSchema.parse(response).right, - cases, - ); - return response; -}; - -const validateOutcomeSequence = ( - outcomes: readonly WorkerProtocolOutcome[], - cases: readonly ExpectedCase[], -): void => { - if (outcomes.length !== cases.length) - throw new TypeError("Replay worker response case count changed"); - outcomes.forEach((outcome, index) => { - const expected = cases[index]; - if ( - expected === undefined || - outcome.case_id !== expected.case_id || - outcome.input_sha256 !== expected.sha256 - ) - throw new TypeError("Replay worker response case identity changed"); - }); -}; diff --git a/src/replay/SystemJavaScriptReplayHost.ts b/src/replay/SystemJavaScriptReplayHost.ts deleted file mode 100644 index f2b65caab..000000000 --- a/src/replay/SystemJavaScriptReplayHost.ts +++ /dev/null @@ -1,220 +0,0 @@ -import { temporaryFilterHandle } from "./ReplaySeccompFile.js"; -import { constants } from "node:fs"; -import { open, readFile, realpath, stat } from "node:fs/promises"; -import { fileURLToPath } from "node:url"; -import { spawn, type StdioOptions } from "node:child_process"; - -import type { - JavaScriptReplayHost, - JavaScriptReplayConfiguration, - ReplayExecutableIdentity, - ReplaySourceBytes, -} from "../application/JavaScriptReplayPlanning.js"; -import { digestBytes } from "../application/JavaScriptReplayPlanning.js"; -import { linuxX64ReplaySeccompDigest } from "./LinuxSeccompPolicy.js"; -import { resolveLinuxRuntimeClosure } from "./LinuxRuntimeClosure.js"; - -import { readBoundedFileBytes } from "../process/BoundedFileBytes.js"; -import { isSupportedControlledReplayHost } from "../application/ControlledReplayHostSupport.js"; - -const bubblewrapProbeArguments = (command: readonly string[]): string[] => [ - "--unshare-all", - "--unshare-user", - "--disable-userns", - "--new-session", - "--die-with-parent", - "--cap-drop", - "ALL", - "--ro-bind", - "/usr", - "/usr", - "--ro-bind", - "/lib", - "/lib", - "--ro-bind-try", - "/lib64", - "/lib64", - "--proc", - "/proc", - "--dev", - "/dev", - "--seccomp", - "3", - "--", - ...command, -]; - -/** Production planning host for descriptor-backed reads and fail-closed probes. */ -export class SystemJavaScriptReplayHost implements JavaScriptReplayHost { - async readSource( - path: string, - maximumBytes: number, - ): Promise { - const canonicalPath = await realpath(path); - const handle = await open( - canonicalPath, - constants.O_RDONLY | constants.O_NOFOLLOW, - ); - try { - const metadata = await handle.stat(); - if (!metadata.isFile() || metadata.size > maximumBytes) - throw new RangeError( - `Replay source exceeds its declared limit: ${canonicalPath}`, - ); - const bytes = await readBoundedFileBytes(handle, maximumBytes); - if (bytes === undefined) - throw new RangeError( - `Replay source exceeds its declared limit: ${canonicalPath}`, - ); - return { canonicalPath, bytes }; - } finally { - await handle.close(); - } - } - - async identifyExecutable( - path: string, - versionArguments: readonly string[], - ): Promise { - const canonicalPath = await realpath(path); - const metadata = await stat(canonicalPath); - if (!metadata.isFile()) - throw new TypeError(`Replay executable is not a file: ${canonicalPath}`); - const [bytes, version] = await Promise.all([ - readFile(canonicalPath), - capture(canonicalPath, versionArguments), - ]); - return { - path: canonicalPath, - version: version.trim(), - sha256: digestBytes(bytes), - }; - } - - identifyWorker(): Promise { - return this.identifyExecutable( - fileURLToPath(new URL("./JavaScriptReplayWorker.js", import.meta.url)), - [], - ); - } - - identifyRuntimeClosure(nodePath: string) { - return resolveLinuxRuntimeClosure(nodePath); - } - - seccompDigest(): string { - return linuxX64ReplaySeccompDigest(); - } - - async probe(configuration: JavaScriptReplayConfiguration): Promise { - if (!isSupportedControlledReplayHost(process.platform, process.arch)) - throw new TypeError("Controlled replay requires Linux x86_64 in v1"); - const bwrapMetadata = await stat(configuration.bubblewrapPath); - if ((bwrapMetadata.mode & 0o4000) !== 0) - throw new TypeError("Setuid Bubblewrap is not admitted by replay policy"); - if ( - (await readFile("/sys/fs/cgroup/cgroup.controllers", "utf8")).trim() - .length === 0 - ) - throw new TypeError("Controlled replay requires delegated cgroup v2"); - const filter = await temporaryFilterHandle(); - try { - await run( - configuration.bubblewrapPath, - bubblewrapProbeArguments(["/usr/bin/true"]), - ["ignore", "pipe", "pipe", filter.handle.fd], - ); - await runExpectFailure( - configuration.bubblewrapPath, - bubblewrapProbeArguments([ - "/usr/bin/unshare", - "--mount", - "/usr/bin/true", - ]), - ["ignore", "pipe", "pipe", filter.handle.fd], - ); - await run(configuration.systemdRunPath, [ - "--user", - "--pipe", - "--wait", - "--service-type=exec", - "--quiet", - "--property=MemoryMax=16777216", - "--property=MemorySwapMax=0", - "--property=TasksMax=2", - "--", - "/usr/bin/true", - ]); - } finally { - await filter.close(); - } - } -} - -const capture = async ( - executable: string, - arguments_: readonly string[], -): Promise => { - if (arguments_.length === 0) return "content-addressed-worker-v1"; - const result = await collect(executable, arguments_); - if (result.code !== 0) - throw new TypeError(`Replay executable probe failed: ${executable}`); - return result.stdout.length > 0 ? result.stdout : result.stderr; -}; - -const run = async ( - executable: string, - arguments_: readonly string[], - stdio?: StdioOptions, -): Promise => { - const result = await collect(executable, arguments_, stdio); - if (result.code !== 0) - throw new TypeError( - `Replay feature probe failed (${String(result.code)}): ${executable}: ${result.stderr.trim()}`, - ); -}; - -const runExpectFailure = async ( - executable: string, - arguments_: readonly string[], - stdio: StdioOptions, -): Promise => { - const result = await collect(executable, arguments_, stdio); - if (result.code === 0) - throw new TypeError( - `Replay denial probe unexpectedly succeeded: ${executable}`, - ); -}; - -const collect = async ( - executable: string, - arguments_: readonly string[], - stdio: StdioOptions = ["ignore", "pipe", "pipe"], -): Promise<{ - readonly code: number | null; - readonly stdout: string; - readonly stderr: string; -}> => - new Promise((resolve, reject) => { - const child = spawn(executable, [...arguments_], { stdio }); - const timeout = setTimeout(() => child.kill("SIGKILL"), 5_000); - timeout.unref(); - let stdout = ""; - let stderr = ""; - if (child.stdout !== null) - child.stdout.on("data", (chunk: Buffer) => { - stdout += chunk.toString("utf8"); - }); - if (child.stderr !== null) - child.stderr.on("data", (chunk: Buffer) => { - stderr += chunk.toString("utf8"); - }); - child.once("error", (error) => { - clearTimeout(timeout); - reject(error); - }); - child.once("close", (code) => { - clearTimeout(timeout); - resolve({ code, stdout, stderr }); - }); - }); diff --git a/src/replay/seededRandom.test.ts b/src/replay/seededRandom.test.ts deleted file mode 100644 index 36a705d6e..000000000 --- a/src/replay/seededRandom.test.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { describe, expect, it } from "vitest"; - -import { - createSeededRandom, - createSeededRandomUint, - normalizeXorshift32Seed, - NON_DEGENERATE_XORSHIFT32_SEED, -} from "./seededRandom.js"; - -describe("seeded replay randomness", () => { - it("does not collapse to a constant when seeded with zero", () => { - const random = createSeededRandom(0); - const values = [random(), random(), random()]; - expect(new Set(values).size).toBe(3); - expect(values.every((value) => value === 0)).toBe(false); - expect(values.every((value) => value >= 0 && value < 1)).toBe(true); - }); - - it("substitutes a fixed non-zero state for a zero seed", () => { - expect(normalizeXorshift32Seed(0)).toBe(NON_DEGENERATE_XORSHIFT32_SEED); - expect(normalizeXorshift32Seed(7)).toBe(7); - // Deterministic: the same seed must always give the same stream. - expect(Array.from({ length: 3 }, createSeededRandom(0))).toEqual( - Array.from({ length: 3 }, createSeededRandom(0)), - ); - }); - - it("produces the same stream regardless of which generator is used", () => { - const floats = createSeededRandom(11); - const uints = createSeededRandomUint(11); - expect([floats(), floats(), floats()]).toEqual([ - uints() / 0x1_0000_0000, - uints() / 0x1_0000_0000, - uints() / 0x1_0000_0000, - ]); - }); - - it("keeps distinct seeds on distinct streams", () => { - const first = Array.from({ length: 4 }, createSeededRandom(1)); - const second = Array.from({ length: 4 }, createSeededRandom(2)); - expect(first).not.toEqual(second); - }); -}); diff --git a/src/replay/seededRandom.ts b/src/replay/seededRandom.ts deleted file mode 100644 index f74d3b977..000000000 --- a/src/replay/seededRandom.ts +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Deterministic pseudo-random generation for controlled replay. - * - * The generator lives here so the replay worker and the case planner cannot - * drift: they previously each inlined the same xorshift32 loop, and a fix to - * one (such as the zero-seed collapse below) would silently not apply to the - * other. - */ - -/** One xorshift32 step. Returns the next unsigned 32-bit state. */ -export const nextXorshift32 = (state: number): number => { - let next = state >>> 0; - next ^= next << 13; - next ^= next >>> 17; - next ^= next << 5; - return next >>> 0; -}; - -/** - * xorshift32 has a fixed point at zero: seeding it with 0 yields 0 forever, so - * every "random" value collapses to the same constant and two runs look - * identical for the wrong reason. Substitute a fixed non-zero state instead. - */ -export const NON_DEGENERATE_XORSHIFT32_SEED = 0x9e37_79b9; - -export const normalizeXorshift32Seed = (seed: number): number => { - const state = seed >>> 0; - return state === 0 ? NON_DEGENERATE_XORSHIFT32_SEED : state; -}; - -/** A seeded generator returning floats in [0, 1). */ -export type SeededRandom = () => number; - -/** A seeded generator returning unsigned 32-bit integers. */ -export type SeededRandomUint = () => number; - -/** Build a float generator in [0, 1) whose values depend only on `seed`. */ -export const createSeededRandom = (seed: number): SeededRandom => { - let state = normalizeXorshift32Seed(seed); - return () => { - state = nextXorshift32(state); - return state / 0x1_0000_0000; - }; -}; - -/** Build an unsigned 32-bit generator whose values depend only on `seed`. */ -export const createSeededRandomUint = (seed: number): SeededRandomUint => { - let state = normalizeXorshift32Seed(seed); - return () => { - state = nextXorshift32(state); - return state; - }; -}; diff --git a/src/server/createServer.ts b/src/server/createServer.ts index 1669b33ca..bfbc83548 100644 --- a/src/server/createServer.ts +++ b/src/server/createServer.ts @@ -6,18 +6,9 @@ import type { BrowserObservationPort } from "../application/BrowserObservationPo import type { BrowserScenarioCapturePort } from "../application/BrowserScenarioCapturePort.js"; import type { ElectronActiveObservationPort } from "../application/ElectronActiveObservationPort.js"; import type { ElectronObservationPort } from "../application/ElectronObservationPort.js"; -import type { - JavaScriptReplayConfiguration, - JavaScriptReplayHost, - JavaScriptReplayRunner, -} from "../application/JavaScriptReplayPlanning.js"; -import type { ManagedRuntimeConfiguration } from "../application/ManagedRuntimeCorrelationService.js"; import type { JavaScriptRuntimeObservationPort } from "../application/JavaScriptRuntimeObservationPort.js"; import { PRODUCT_IDENTITY } from "../identity.js"; -import { defaultJavaScriptReplayConfiguration } from "../config/runtimeConfiguration.js"; import { silentLogger, type Logger } from "../logger.js"; -import { LinuxJavaScriptReplayRunner } from "../replay/LinuxJavaScriptReplayRunner.js"; -import { SystemJavaScriptReplayHost } from "../replay/SystemJavaScriptReplayHost.js"; import { registerApplicationTools } from "./registerApplicationTools.js"; import { registerArtifactTools } from "./registerArtifactTools.js"; import { registerBrowserScenarioTool } from "./registerBrowserScenarioTool.js"; @@ -47,10 +38,6 @@ export interface CreateServerOptions { readonly electronObservation?: ElectronObservationPort; readonly electronActiveObservation?: ElectronActiveObservationPort; readonly javascriptRuntimeObservation?: JavaScriptRuntimeObservationPort; - readonly javascriptReplayConfiguration?: () => JavaScriptReplayConfiguration; - readonly javascriptReplayHost?: JavaScriptReplayHost; - readonly javascriptReplayRunner?: JavaScriptReplayRunner; - readonly managedRuntimeConfiguration?: () => ManagedRuntimeConfiguration; readonly availabilityPolicy?: () => SessionAvailability; } @@ -170,7 +157,6 @@ const registerBinaryAnalysisTools = ({ server, analysis, session, - options, logger, activeTarget, recordEvidence, @@ -208,11 +194,6 @@ const registerBinaryAnalysisTools = ({ recordEvidence, recordEvidenceWithUnknown, session, - runtime: { - configuration: - options.managedRuntimeConfiguration ?? - (() => ({ executablePath: undefined })), - }, }); }; @@ -245,13 +226,5 @@ const registerObservationTools = ({ logger, recordEvidence, recordEvidenceWithUnknown, - replay: { - configuration: - options.javascriptReplayConfiguration ?? - defaultJavaScriptReplayConfiguration, - host: options.javascriptReplayHost ?? new SystemJavaScriptReplayHost(), - runner: - options.javascriptReplayRunner ?? new LinuxJavaScriptReplayRunner(), - }, }); }; diff --git a/src/server/registerApplicationTools.ts b/src/server/registerApplicationTools.ts index 75e2b9935..d5535b634 100644 --- a/src/server/registerApplicationTools.ts +++ b/src/server/registerApplicationTools.ts @@ -5,8 +5,6 @@ import { registerTraceJavaScriptSemanticsTool } from "./registerApplicationTools import { registerCompareApplicationVersionsTool } from "./registerApplicationTools/compareVersions.js"; import { registerCompareSourceToBundleTool } from "./registerApplicationTools/compareSourceToBundle.js"; import { registerCompareJavaScriptExportShapesTool } from "./registerApplicationTools/compareExportShapes.js"; -import { registerControlledReplayTool } from "./registerApplicationTools/controlledReplay.js"; -import { registerCharacterizationTools } from "./registerApplicationTools/characterization.js"; import { registerCoverageTools } from "./registerApplicationTools/coverage.js"; import { registerReconstructionObligationLedgerTool } from "./registerApplicationTools/obligationLedger.js"; import type { ApplicationToolRegistration } from "./registerApplicationTools/types.js"; @@ -23,8 +21,6 @@ export const registerApplicationTools = ( registerCompareApplicationVersionsTool(server, options); registerCompareSourceToBundleTool(server, options); registerCompareJavaScriptExportShapesTool(server, options); - registerControlledReplayTool(server, options); - registerCharacterizationTools(server, options); registerReconstructionObligationLedgerTool(server, options); registerCoverageTools(server, options); }; diff --git a/src/server/registerApplicationTools/characterization.ts b/src/server/registerApplicationTools/characterization.ts deleted file mode 100644 index f11ec3d3b..000000000 --- a/src/server/registerApplicationTools/characterization.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { recordSessionEvidenceSources } from "../sessionEvidence.js"; -import type { McpServer } from "@modelcontextprotocol/server"; - -import { - executeNodeCharacterization, - prepareNodeCharacterization, -} from "../../application/NodeRuntimeCharacterizationService.js"; -import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { parseEvidence } from "../../domain/evidence.js"; -import { - nodeCharacterizationExecutionOutputSchema, - nodeCharacterizationPreparationOutputSchema, -} from "../../domain/nodeRuntimeCharacterization.js"; -import { mcpProgressReporter } from "../mcpProgress.js"; -import { logToolExecution } from "../toolLogging.js"; -import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { toCallToolResult } from "../toolResult.js"; - -import type { ApplicationToolRegistration } from "./types.js"; - -const prepareContract = applicationToolContract( - "prepare_node_characterization", -); -const executeContract = applicationToolContract( - "execute_node_characterization", -); - -/** Register node runtime characterization prepare and execute tools. */ -export const registerCharacterizationTools = ( - server: McpServer, - options: ApplicationToolRegistration, -): void => { - server.registerTool( - prepareContract.name, - toolRegistrationOptions(prepareContract), - async (input, context) => { - const result = await logToolExecution( - options.logger, - prepareContract.name, - () => - prepareNodeCharacterization(options.replay, input, { - signal: context.mcpReq.signal, - progress: mcpProgressReporter(context), - }), - ); - if (!result.ok) return toCallToolResult(result, prepareContract); - const output = nodeCharacterizationPreparationOutputSchema.parse( - result.value, - ); - const recorded = options.recordEvidence?.( - parseEvidence(output.transformation_evidence), - ); - if (recorded !== undefined && !recorded.ok) - return toCallToolResult(recorded, prepareContract); - return toCallToolResult(result, prepareContract); - }, - ); - server.registerTool( - executeContract.name, - toolRegistrationOptions(executeContract), - async (input, context) => { - const result = await logToolExecution( - options.logger, - executeContract.name, - () => - executeNodeCharacterization(options.replay, input, { - signal: context.mcpReq.signal, - progress: mcpProgressReporter(context), - }), - ); - if (!result.ok) return toCallToolResult(result, executeContract); - const output = nodeCharacterizationExecutionOutputSchema.parse( - result.value, - ); - const sources = [ - output.transformation_evidence, - ...output.replay.source_evidence, - output.replay.evidence, - output.evidence, - ].map((item) => parseEvidence(item)); - const recorded = recordSessionEvidenceSources( - options.recordEvidence, - sources, - ); - if (!recorded.ok) return toCallToolResult(recorded, executeContract); - return toCallToolResult(result, executeContract); - }, - ); -}; diff --git a/src/server/registerApplicationTools/controlledReplay.ts b/src/server/registerApplicationTools/controlledReplay.ts deleted file mode 100644 index c5f18b23e..000000000 --- a/src/server/registerApplicationTools/controlledReplay.ts +++ /dev/null @@ -1,53 +0,0 @@ -import { recordSessionEvidenceSources } from "../sessionEvidence.js"; -import type { McpServer } from "@modelcontextprotocol/server"; - -import { runControlledReplayValidated } from "../../application/JavaScriptReplayService.js"; -import { applicationToolContract } from "../../contracts/applicationToolContracts.js"; -import { parseEvidence } from "../../domain/evidence.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 type { ApplicationToolRegistration } from "./types.js"; - -const replayContract = applicationToolContract("run_controlled_replay"); - -/** Register the controlled JavaScript replay tool. */ -export const registerControlledReplayTool = ( - server: McpServer, - options: ApplicationToolRegistration, -): void => { - server.registerTool( - replayContract.name, - toolRegistrationOptions(replayContract), - async (input, context) => { - const result = await logToolExecution( - options.logger, - replayContract.name, - () => - 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.phase === "execute") { - const sourcesRecorded = recordSessionEvidenceSources( - options.recordEvidence, - output.source_evidence.map((item) => parseEvidence(item)), - ); - if (!sourcesRecorded.ok) - return toCallToolResult(sourcesRecorded, replayContract); - const recorded = options.recordEvidence?.( - parseEvidence(output.evidence), - ); - if (recorded !== undefined && !recorded.ok) - return toCallToolResult(recorded, replayContract); - } - return toCallToolResult(result, replayContract); - }, - ); -}; diff --git a/src/server/registerApplicationTools/helpers.ts b/src/server/registerApplicationTools/helpers.ts index 13cd2aef6..d65f5b966 100644 --- a/src/server/registerApplicationTools/helpers.ts +++ b/src/server/registerApplicationTools/helpers.ts @@ -55,18 +55,10 @@ const unknownRegistration = ( { operation: "reconcile_javascript_runtime", rationale: - "Add approved passive runtime Evidence without promoting it to static fact.", + "Add passive runtime Evidence without promoting it to static fact.", }, ] - : kind === "source-to-bundle-comparison" - ? [] - : [ - { - operation: "run_controlled_replay", - rationale: - "Validate exact approved module behavior separately when runtime semantics are required.", - }, - ]), + : []), ], relationships: [], }); diff --git a/src/server/registerApplicationTools/types.ts b/src/server/registerApplicationTools/types.ts index bb463da66..e418048d3 100644 --- a/src/server/registerApplicationTools/types.ts +++ b/src/server/registerApplicationTools/types.ts @@ -1,5 +1,4 @@ import type { BinarySessionPort } from "../../application/BinarySession.js"; -import type { JavaScriptReplayDependencies } from "../../application/JavaScriptReplayService.js"; import type { Logger } from "../../logger.js"; /** Shared services for registering JavaScript application graph workflows. */ @@ -9,5 +8,4 @@ export interface ApplicationToolRegistration { readonly recordEvidenceWithUnknown: | BinarySessionPort["recordEvidenceWithUnknown"] | undefined; - readonly replay: JavaScriptReplayDependencies; } diff --git a/src/server/registerArtifactComparisonTool.ts b/src/server/registerArtifactComparisonTool.ts index 418e4365c..402c401e1 100644 --- a/src/server/registerArtifactComparisonTool.ts +++ b/src/server/registerArtifactComparisonTool.ts @@ -1,7 +1,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { toolContract } from "../contracts/toolContracts.js"; import { compareArtifacts } from "../domain/artifactComparison.js"; import { createEvidence, parseEvidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; @@ -16,7 +16,7 @@ import { toCallToolResult } from "./toolResult.js"; export const registerArtifactComparisonTool = ( server: McpServer, session: BinarySessionPort, - contract: (typeof SESSION_TOOL_CONTRACTS)[7], + contract: ReturnType>, ): void => { server.registerTool( contract.name, diff --git a/src/server/registerBundleComparisonTool.ts b/src/server/registerBundleComparisonTool.ts index 316764ad0..1c2f40754 100644 --- a/src/server/registerBundleComparisonTool.ts +++ b/src/server/registerBundleComparisonTool.ts @@ -2,7 +2,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; import { readEvidenceBundle } from "../application/EvidenceBundleFiles.js"; -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { toolContract } from "../contracts/toolContracts.js"; import { compareBundles } from "../domain/bundleComparison.js"; import { createEvidence } from "../domain/evidence.js"; import { jsonValueSchema } from "../domain/jsonValue.js"; @@ -16,7 +16,7 @@ import { toCallToolResult } from "./toolResult.js"; export const registerBundleComparisonTool = ( server: McpServer, session: BinarySessionPort, - contract: (typeof SESSION_TOOL_CONTRACTS)[9], + contract: ReturnType>, ): void => { server.registerTool( contract.name, diff --git a/src/server/registerCloseLifecycleTool.ts b/src/server/registerCloseLifecycleTool.ts index 31c407631..49c16a02c 100644 --- a/src/server/registerCloseLifecycleTool.ts +++ b/src/server/registerCloseLifecycleTool.ts @@ -15,7 +15,7 @@ export const registerCloseLifecycleTool = ({ server, session, logger, - contracts: [, closeContract], + closeContract, }: LifecycleToolRegistration): void => { server.registerTool( closeContract.name, diff --git a/src/server/registerEnhancedTools.ts b/src/server/registerEnhancedTools.ts index 1d19b0d99..f43e8f4dc 100644 --- a/src/server/registerEnhancedTools.ts +++ b/src/server/registerEnhancedTools.ts @@ -14,10 +14,7 @@ import { REA_WORKFLOW_PROVIDER, workflowAnalysisProfile, } from "../application/InvestigationProviders.js"; -import { - ENHANCED_TOOL_CONTRACTS, - type ToolContract, -} from "../contracts/toolContracts.js"; +import { toolContract, 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"; @@ -47,23 +44,22 @@ export const registerEnhancedTools = ( analysis: AnalysisOperationPort, options: EnhancedToolRegistration, ): void => { - const [ - nativeDispatchMetadata, - objcClasses, - objcProtocols, - batchDecompile, - callGraph, - swiftTypes, - xrefsToName, - binaryOverview, - analyzeFunction, - inspectNativeApi, - traceFeature, - codeForString, - traceCallPath, - traceNativeUiAction, - traceNativeValues, - ] = ENHANCED_TOOL_CONTRACTS; + const nativeDispatchMetadata = toolContract( + "inspect_native_dispatch_metadata", + ); + const objcClasses = toolContract("get_objc_classes"); + const objcProtocols = toolContract("get_objc_protocols"); + const batchDecompile = toolContract("batch_decompile"); + const callGraph = toolContract("get_call_graph"); + const swiftTypes = toolContract("analyze_swift_types"); + const xrefsToName = toolContract("find_xrefs_to_name"); + const binaryOverview = toolContract("binary_overview"); + const analyzeFunction = toolContract("analyze_function"); + const inspectNativeApi = toolContract("inspect_native_api"); + const traceFeature = toolContract("trace_feature"); + const traceCallPath = toolContract("trace_call_path"); + const traceNativeUiAction = toolContract("trace_native_ui_action"); + const traceNativeValues = toolContract("trace_native_values"); server.registerTool( traceNativeValues.name, toolRegistrationOptions(traceNativeValues), @@ -172,15 +168,6 @@ export const registerEnhancedTools = ( 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), @@ -298,12 +285,9 @@ const recordWorkflowUnknowns = ({ | ReturnType | { readonly ok: true; readonly value: null } => { if ( - ![ - "trace_feature", - "find_code_for_string", - "trace_call_path", - "inspect_native_api", - ].includes(name) || + !["trace_feature", "trace_call_path", "inspect_native_api"].includes( + name, + ) || recordUnknown === undefined || typeof result !== "object" || result === null || diff --git a/src/server/registerFunctionComparisonTool.ts b/src/server/registerFunctionComparisonTool.ts index f5149ce56..c43e8ab32 100644 --- a/src/server/registerFunctionComparisonTool.ts +++ b/src/server/registerFunctionComparisonTool.ts @@ -1,7 +1,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { toolContract } from "../contracts/toolContracts.js"; import { createEvidence, parseEvidence, @@ -23,7 +23,7 @@ import { toCallToolResult } from "./toolResult.js"; export const registerFunctionComparisonTool = ( server: McpServer, session: BinarySessionPort, - contract: (typeof SESSION_TOOL_CONTRACTS)[8], + contract: ReturnType>, ): void => { server.registerTool( contract.name, diff --git a/src/server/registerInvestigationTools.ts b/src/server/registerInvestigationTools.ts index 522f82328..659527e3c 100644 --- a/src/server/registerInvestigationTools.ts +++ b/src/server/registerInvestigationTools.ts @@ -1,7 +1,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { toolContract } from "../contracts/toolContracts.js"; import { buildCallPath } from "../domain/callPath.js"; import { findChangedBehavior } from "../domain/changedBehavior.js"; import { createEvidence } from "../domain/evidence.js"; @@ -29,23 +29,29 @@ import { toCallToolResult } from "./toolResult.js"; export const registerInvestigationTools = ( server: McpServer, session: BinarySessionPort, - contracts: readonly [ - (typeof SESSION_TOOL_CONTRACTS)[10], - (typeof SESSION_TOOL_CONTRACTS)[11], - (typeof SESSION_TOOL_CONTRACTS)[12], - (typeof SESSION_TOOL_CONTRACTS)[13], - ], ): void => { - registerChangedBehavior(server, session, contracts[0]); - registerCallPath(server, session, contracts[1]); - registerStaticRuntime(server, session, contracts[2]); - registerReconstruction(server, session, contracts[3]); + registerChangedBehavior( + server, + session, + toolContract("find_changed_behavior"), + ); + registerCallPath(server, session, toolContract("build_call_path")); + registerStaticRuntime( + server, + session, + toolContract("correlate_static_and_runtime"), + ); + registerReconstruction( + server, + session, + toolContract("verify_reconstruction"), + ); }; const registerChangedBehavior = ( server: McpServer, session: BinarySessionPort, - contract: (typeof SESSION_TOOL_CONTRACTS)[10], + contract: ReturnType>, ): void => { server.registerTool( contract.name, @@ -103,7 +109,7 @@ const registerChangedBehavior = ( const registerCallPath = ( server: McpServer, session: BinarySessionPort, - contract: (typeof SESSION_TOOL_CONTRACTS)[11], + contract: ReturnType>, ): void => { server.registerTool( contract.name, @@ -160,7 +166,7 @@ const registerCallPath = ( const registerStaticRuntime = ( server: McpServer, session: BinarySessionPort, - contract: (typeof SESSION_TOOL_CONTRACTS)[12], + contract: ReturnType>, ): void => { server.registerTool( contract.name, @@ -221,7 +227,7 @@ const registerStaticRuntime = ( const registerReconstruction = ( server: McpServer, session: BinarySessionPort, - contract: (typeof SESSION_TOOL_CONTRACTS)[13], + contract: ReturnType>, ): void => { server.registerTool( contract.name, diff --git a/src/server/registerManagedWorkflowTools.ts b/src/server/registerManagedWorkflowTools.ts index 0945fb0ce..081a3d5c1 100644 --- a/src/server/registerManagedWorkflowTools.ts +++ b/src/server/registerManagedWorkflowTools.ts @@ -3,7 +3,6 @@ import type { McpServer } from "@modelcontextprotocol/server"; import { registerCompareManagedMembers } from "./registerManagedWorkflowTools/compareManagedMembers.js"; import { registerVerifyManagedNativeBoundaries } from "./registerManagedWorkflowTools/verifyManagedNativeBoundaries.js"; import { registerImportManagedReconstruction } from "./registerManagedWorkflowTools/importManagedReconstruction.js"; -import { registerPlanManagedRuntimeCorrelation } from "./registerManagedWorkflowTools/planManagedRuntimeCorrelation.js"; import { registerProjectManagedApplicationGraph } from "./registerManagedWorkflowTools/projectManagedApplicationGraph.js"; import type { ManagedWorkflowToolRegistration } from "./registerManagedWorkflowTools/types.js"; @@ -17,6 +16,5 @@ export const registerManagedWorkflowTools = ( registerCompareManagedMembers(server, options); registerVerifyManagedNativeBoundaries(server, options); registerImportManagedReconstruction(server, options); - registerPlanManagedRuntimeCorrelation(server, options); registerProjectManagedApplicationGraph(server, options); }; diff --git a/src/server/registerManagedWorkflowTools/contract.ts b/src/server/registerManagedWorkflowTools/contract.ts index b36ffcd80..413c7cab4 100644 --- a/src/server/registerManagedWorkflowTools/contract.ts +++ b/src/server/registerManagedWorkflowTools/contract.ts @@ -10,12 +10,9 @@ export function managedWorkflowContract( 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]; +): (typeof MANAGED_WORKFLOW_TOOL_CONTRACTS)[3]; export function managedWorkflowContract( name: (typeof MANAGED_WORKFLOW_TOOL_CONTRACTS)[number]["name"], ) { diff --git a/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts b/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts deleted file mode 100644 index ba35c097a..000000000 --- a/src/server/registerManagedWorkflowTools/planManagedRuntimeCorrelation.ts +++ /dev/null @@ -1,51 +0,0 @@ -import type { McpServer } from "@modelcontextprotocol/server"; - -import { planManagedRuntimeCorrelationEvidenceValidated } from "../../application/ManagedRuntimeCorrelationService.js"; -import { logToolExecution } from "../toolLogging.js"; -import { toolRegistrationOptions } from "../toolRegistrationOptions.js"; -import { toCallToolResult } from "../toolResult.js"; -import { managedWorkflowContract } from "./contract.js"; -import { resolveManagedEvidence } from "./evidence.js"; -import type { ManagedWorkflowToolRegistration } from "./types.js"; - -const runtimeContract = managedWorkflowContract( - "plan_managed_runtime_correlation", -); - -/** Register the managed runtime correlation planning workflow tool. */ -export const registerPlanManagedRuntimeCorrelation = ( - server: McpServer, - options: ManagedWorkflowToolRegistration, -): void => { - server.registerTool( - runtimeContract.name, - toolRegistrationOptions(runtimeContract), - async (input) => { - const resolved = resolveManagedEvidence(input.static_members); - if (!resolved.ok) return toCallToolResult(resolved, runtimeContract); - const staticMembers = resolved.value[0]; - if (staticMembers === undefined) - throw new TypeError("Managed runtime Evidence resolution failed"); - const parsed = { ...input, static_members: staticMembers }; - const result = await logToolExecution( - options.logger, - runtimeContract.name, - () => - Promise.resolve( - planManagedRuntimeCorrelationEvidenceValidated( - options.runtime, - parsed, - ), - ), - ); - if (!result.ok) return toCallToolResult(result, runtimeContract); - const recordedSource = options.recordEvidence?.(parsed.static_members); - if (recordedSource !== undefined && !recordedSource.ok) - return toCallToolResult(recordedSource, runtimeContract); - const recorded = options.recordEvidence?.(result.value); - if (recorded !== undefined && !recorded.ok) - return toCallToolResult(recorded, runtimeContract); - return toCallToolResult(result, runtimeContract); - }, - ); -}; diff --git a/src/server/registerManagedWorkflowTools/types.ts b/src/server/registerManagedWorkflowTools/types.ts index 083d1b6c0..c8a0809b2 100644 --- a/src/server/registerManagedWorkflowTools/types.ts +++ b/src/server/registerManagedWorkflowTools/types.ts @@ -1,5 +1,4 @@ import type { BinarySessionPort } from "../../application/BinarySession.js"; -import type { ManagedRuntimeCorrelationDependencies } from "../../application/ManagedRuntimeCorrelationService.js"; import type { Logger } from "../../logger.js"; /** Shared services for registering managed-code workflow tools. */ @@ -9,6 +8,5 @@ export interface ManagedWorkflowToolRegistration { readonly recordEvidenceWithUnknown: | BinarySessionPort["recordEvidenceWithUnknown"] | undefined; - readonly runtime: ManagedRuntimeCorrelationDependencies; readonly session: BinarySessionPort; } diff --git a/src/server/registerProcessComparisonTool.ts b/src/server/registerProcessComparisonTool.ts index c70fae55d..306b46da1 100644 --- a/src/server/registerProcessComparisonTool.ts +++ b/src/server/registerProcessComparisonTool.ts @@ -1,7 +1,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { toolContract } from "../contracts/toolContracts.js"; import { EvidenceIntegrityError } from "../domain/errors.js"; import { createEvidence, @@ -37,7 +37,7 @@ const sourceLocations = ( export const registerProcessComparisonTool = ( server: McpServer, session: BinarySessionPort, - contract: (typeof SESSION_TOOL_CONTRACTS)[6], + contract: ReturnType>, now: () => number = Date.now, ): void => { server.registerTool( @@ -153,9 +153,7 @@ const comparisonUnknownInput = ( ["interaction", comparison.interaction], ["exit", comparison.exit], ["filesystem", comparison.filesystem], - ["protocol", comparison.protocol], ["process", comparison.process], - ["shim", comparison.shim], ] .filter(([, status]) => status !== "unchanged") .map(([scope]) => scope) diff --git a/src/server/registerReplayMachineTool.ts b/src/server/registerReplayMachineTool.ts deleted file mode 100644 index 058936753..000000000 --- a/src/server/registerReplayMachineTool.ts +++ /dev/null @@ -1,28 +0,0 @@ -import type { McpServer } from "@modelcontextprotocol/server"; - -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; -import { runReplayMachine } from "../domain/replayMachineRun.js"; -import { ok } from "../domain/result.js"; -import type { Logger } from "../logger.js"; -import { logToolExecution } from "./toolLogging.js"; -import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; -import { toCallToolResult } from "./toolResult.js"; - -const contract = SESSION_TOOL_CONTRACTS[18]; - -/** Register direct execution-free finite replay-machine evaluation. */ -export const registerReplayMachineTool = ( - server: McpServer, - logger: Logger, -): void => { - server.registerTool( - contract.name, - toolRegistrationOptions(contract), - async (input) => { - const result = await logToolExecution(logger, contract.name, () => - Promise.resolve(ok(runReplayMachine(input))), - ); - return toCallToolResult(result, contract); - }, - ); -}; diff --git a/src/server/registerSessionRecordTools.ts b/src/server/registerSessionRecordTools.ts index 81cb2bfa9..12bab5028 100644 --- a/src/server/registerSessionRecordTools.ts +++ b/src/server/registerSessionRecordTools.ts @@ -5,7 +5,7 @@ import { readEvidenceBundle, writeEvidenceBundle, } from "../application/EvidenceBundleFiles.js"; -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { toolContract } from "../contracts/toolContracts.js"; import type { EvidenceBundle } from "../domain/evidenceBundle.js"; import { ok } from "../domain/result.js"; import { toolRegistrationOptions } from "./toolRegistrationOptions.js"; @@ -14,9 +14,15 @@ import { toCallToolResult } from "./toolResult.js"; interface EvidenceToolRegistration { readonly server: McpServer; readonly session: BinarySessionPort; - readonly exportContract: (typeof SESSION_TOOL_CONTRACTS)[3]; - readonly importContract: (typeof SESSION_TOOL_CONTRACTS)[4]; - readonly snapshotContract: (typeof SESSION_TOOL_CONTRACTS)[19]; + readonly exportContract: ReturnType< + typeof toolContract<"export_evidence_bundle"> + >; + readonly importContract: ReturnType< + typeof toolContract<"import_evidence_bundle"> + >; + readonly snapshotContract: ReturnType< + typeof toolContract<"get_evidence_bundle"> + >; } /** Register evidence bundle import and export tools. */ @@ -113,16 +119,14 @@ const unknownRevisionKey = ( interface UnknownToolRegistration { readonly server: McpServer; readonly session: BinarySessionPort; - readonly contracts: typeof SESSION_TOOL_CONTRACTS; } /** Register residual-unknown query and mutation tools. */ const registerListUnknownsTool = ({ server, session, - contracts, }: UnknownToolRegistration): void => { - const listContract = contracts[14]; + const listContract = toolContract("list_unknowns"); server.registerTool( listContract.name, toolRegistrationOptions(listContract), @@ -149,9 +153,8 @@ const registerListUnknownsTool = ({ const registerRecordUnknownTool = ({ server, session, - contracts, }: UnknownToolRegistration): void => { - const recordContract = contracts[15]; + const recordContract = toolContract("record_unknown"); server.registerTool( recordContract.name, toolRegistrationOptions(recordContract), @@ -165,9 +168,8 @@ const registerRecordUnknownTool = ({ const registerUpdateUnknownTool = ({ server, session, - contracts, }: UnknownToolRegistration): void => { - const updateContract = contracts[16]; + const updateContract = toolContract("update_unknown"); server.registerTool( updateContract.name, toolRegistrationOptions(updateContract), @@ -181,9 +183,8 @@ const registerUpdateUnknownTool = ({ const registerVerifyUnknownTool = ({ server, session, - contracts, }: UnknownToolRegistration): void => { - const verifyContract = contracts[17]; + const verifyContract = toolContract("verify_unknown_resolution"); server.registerTool( verifyContract.name, toolRegistrationOptions(verifyContract), diff --git a/src/server/registerSessionStatusTool.ts b/src/server/registerSessionStatusTool.ts index d10846e4e..bfcd975de 100644 --- a/src/server/registerSessionStatusTool.ts +++ b/src/server/registerSessionStatusTool.ts @@ -2,7 +2,7 @@ import type { McpServer } from "@modelcontextprotocol/server"; import type { BinarySessionPort } from "../application/BinarySession.js"; import { buildCapabilityInventory } from "../application/CapabilityInventory.js"; -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { toolContract } from "../contracts/toolContracts.js"; import type { ClientFeatureAvailability } from "../contracts/toolOutputSchemaPrimitives.js"; import { jsonObjectSchema } from "../domain/jsonValue.js"; import { createServerIdentity } from "../serverIdentity.js"; @@ -17,7 +17,7 @@ type ToolAvailability = ReturnType[number]; export interface SessionStatusToolOptions { readonly server: McpServer; readonly session: BinarySessionPort; - readonly contract: (typeof SESSION_TOOL_CONTRACTS)[2]; + readonly contract: ReturnType>; readonly startedAt: string; readonly availabilityPolicy: () => SessionAvailability; } diff --git a/src/server/registerSessionTools.ts b/src/server/registerSessionTools.ts index 2168e2e8c..3c8ef1138 100644 --- a/src/server/registerSessionTools.ts +++ b/src/server/registerSessionTools.ts @@ -9,14 +9,11 @@ import { readAnalysisSnapshot } from "../application/AnalysisSnapshotFiles.js"; import type { BinarySessionPort } from "../application/BinarySession.js"; import { createProcessCaptureEvidence } from "../application/ProcessEvidence.js"; import { captureProcessScenario } from "../application/ProcessHarness.js"; -import { SESSION_TOOL_CONTRACTS } from "../contracts/toolContracts.js"; +import { toolContract } 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 { - ProcessCapture, - ProcessScenario, -} from "../domain/processCapture.js"; +import type { ProcessCapture } from "../domain/processCapture.js"; import { ok, type Result } from "../domain/result.js"; import type { Logger } from "../logger.js"; import { mcpProgressReporter } from "./mcpProgress.js"; @@ -26,7 +23,6 @@ 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, @@ -42,7 +38,6 @@ import { toCallToolResult } from "./toolResult.js"; const recordProcessResidualUnknowns = ( session: BinarySessionPort, - scenario: ProcessScenario, evidence: Evidence, residuals: ProcessCapture["residual_unknowns"], ): Result => { @@ -81,7 +76,9 @@ interface ProcessToolRegistration { readonly server: McpServer; readonly session: BinarySessionPort; readonly logger: Logger; - readonly captureContract: (typeof SESSION_TOOL_CONTRACTS)[5]; + readonly captureContract: ReturnType< + typeof toolContract<"capture_process_scenario"> + >; } const registerProcessTools = ({ @@ -120,7 +117,6 @@ const registerProcessTools = ({ if (!recorded.ok) return toCallToolResult(recorded, captureContract); const unknowns = recordProcessResidualUnknowns( session, - scenario, evidence, captured.value.residual_unknowns, ); @@ -134,11 +130,9 @@ export interface LifecycleToolRegistration { readonly server: McpServer; readonly session: BinarySessionPort; readonly logger: Logger; - readonly contracts: readonly [ - (typeof SESSION_TOOL_CONTRACTS)[0], - (typeof SESSION_TOOL_CONTRACTS)[1], - (typeof SESSION_TOOL_CONTRACTS)[2], - ]; + readonly openContract: ReturnType>; + readonly closeContract: ReturnType>; + readonly statusContract: ReturnType>; readonly startedAt: string; readonly availabilityPolicy: () => SessionAvailability; } @@ -146,14 +140,14 @@ export interface LifecycleToolRegistration { const registerLifecycleTools = ( registration: LifecycleToolRegistration, ): void => { - const { server, session, contracts, startedAt, availabilityPolicy } = + const { server, session, statusContract, startedAt, availabilityPolicy } = registration; registerOpenLifecycleTool(registration); registerCloseLifecycleTool(registration); registerSessionStatusTool({ server, session, - contract: contracts[2], + contract: statusContract, startedAt, availabilityPolicy, }); @@ -163,7 +157,7 @@ const registerOpenLifecycleTool = ({ server, session, logger, - contracts: [openContract], + openContract, }: LifecycleToolRegistration): void => { server.registerTool( openContract.name, @@ -212,25 +206,12 @@ export interface SessionToolOptions { readonly availabilityPolicy?: () => SessionAvailability; } -const registerRecordAndReplayTools = ( - server: McpServer, - session: BinarySessionPort, - logger: Logger, -): void => { - registerUnknownTools({ - server, - session, - contracts: SESSION_TOOL_CONTRACTS, - }); - registerReplayMachineTool(server, logger); -}; - const registerContextTools = ( server: McpServer, session: BinarySessionPort, ): void => { - const navigationContract = SESSION_TOOL_CONTRACTS[20]; - const addressContract = SESSION_TOOL_CONTRACTS[21]; + const navigationContract = toolContract("get_navigation_context"); + const addressContract = toolContract("inspect_address_context"); server.registerTool( navigationContract.name, toolRegistrationOptions(navigationContract), @@ -259,28 +240,24 @@ export const registerSessionTools = ( logger: Logger, options: SessionToolOptions = {}, ): void => { - const [ - openContract, - closeContract, - statusContract, - exportContract, - importContract, - captureContract, - compareContract, - compareArtifactsContract, - compareFunctionsContract, - compareBundlesContract, - changedBehaviorContract, - callPathContract, - staticRuntimeContract, - reconstructionContract, - ] = SESSION_TOOL_CONTRACTS; - const snapshotContract = SESSION_TOOL_CONTRACTS[19]; + const openContract = toolContract("open_binary"); + const closeContract = toolContract("close_binary"); + const statusContract = toolContract("binary_session"); + const exportContract = toolContract("export_evidence_bundle"); + const importContract = toolContract("import_evidence_bundle"); + const captureContract = toolContract("capture_process_scenario"); + const compareContract = toolContract("compare_process_captures"); + const compareArtifactsContract = toolContract("compare_artifacts"); + const compareFunctionsContract = toolContract("compare_functions"); + const compareBundlesContract = toolContract("compare_bundles"); + const snapshotContract = toolContract("get_evidence_bundle"); registerLifecycleTools({ server, session, logger, - contracts: [openContract, closeContract, statusContract], + openContract, + closeContract, + statusContract, startedAt: options.startedAt ?? new Date().toISOString(), availabilityPolicy: sessionAvailabilityPolicy( options.availabilityPolicy, @@ -304,13 +281,7 @@ export const registerSessionTools = ( registerArtifactComparisonTool(server, session, compareArtifactsContract); registerFunctionComparisonTool(server, session, compareFunctionsContract); registerBundleComparisonTool(server, session, compareBundlesContract); - const investigationContracts = [ - changedBehaviorContract, - callPathContract, - staticRuntimeContract, - reconstructionContract, - ] as const; - registerInvestigationTools(server, session, investigationContracts); - registerRecordAndReplayTools(server, session, logger); + registerInvestigationTools(server, session); + registerUnknownTools({ server, session }); registerContextTools(server, session); }; diff --git a/src/server/sessionAvailabilityPolicy.ts b/src/server/sessionAvailabilityPolicy.ts index a3779f894..0c0f3718c 100644 --- a/src/server/sessionAvailabilityPolicy.ts +++ b/src/server/sessionAvailabilityPolicy.ts @@ -1,6 +1,5 @@ import type { AvailabilityPolicy } from "../application/CapabilityInventory.js"; -import { arch, platform } from "node:process"; -import { isSupportedControlledReplayHost } from "../application/ControlledReplayHostSupport.js"; +import { platform } from "node:process"; export type SessionAvailability = AvailabilityPolicy; @@ -23,7 +22,6 @@ export const sessionAvailabilityPolicy = ( configured ?? (() => ({ processCaptureEnabled: platform !== "win32", - controlledReplayEnabled: isSupportedControlledReplayHost(platform, arch), browserObservationEnabled: defaults.optionalFeatures?.browserObservationEnabled ?? false, browserScenarioEnabled: diff --git a/tests/acceptance/applications/applicationReplayMcp.test.ts b/tests/acceptance/applications/applicationReplayMcp.test.ts deleted file mode 100644 index 5b6f5b0d1..000000000 --- a/tests/acceptance/applications/applicationReplayMcp.test.ts +++ /dev/null @@ -1,240 +0,0 @@ -import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; -import { createHash } from "node:crypto"; -import { readFile, realpath } from "node:fs/promises"; -import { resolve } from "node:path"; -import { describe, expect, it } from "vitest"; - -import { createTestBinarySession } from "../../fixtures/binarySession.js"; -import type { BinarySession } from "../../../src/application/BinarySession.js"; -import type { JavaScriptReplayConfiguration } from "../../../src/application/JavaScriptReplayPlanning.js"; -import { controlledReplayOutputSchema } from "../../../src/domain/javascriptReplay.js"; -import { nodeCharacterizationPreparationOutputSchema } from "../../../src/domain/nodeRuntimeCharacterization.js"; -import { createServer } from "../../../src/server/createServer.js"; -import { observed } from "../../fixtures/analysisExecution.js"; - -function createReplayConfiguration(): JavaScriptReplayConfiguration { - return { - nodePath: process.execPath, - bubblewrapPath: process.execPath, - systemdRunPath: process.execPath, - systemctlPath: process.execPath, - shellPath: process.execPath, - }; -} - -function createReplayScenario(root: string) { - const configuration = createReplayConfiguration(); - const session = createTestBinarySession(() => ({ - execute: () => Promise.resolve(observed(null)), - close: () => Promise.resolve(), - })); - const server = createServer(session, session, { - availabilityPolicy: () => ({ - processCaptureEnabled: true, - controlledReplayEnabled: true, - }), - javascriptReplayConfiguration: () => configuration, - javascriptReplayHost: { - readSource: async (path) => ({ - canonicalPath: await realpath(path), - bytes: await readFile(path), - }), - identifyExecutable: async (path) => ({ - path, - version: "fixture", - sha256: "1".repeat(64), - }), - identifyWorker: async () => ({ - path: "/fixture/worker.js", - version: "fixture-worker-1", - sha256: "2".repeat(64), - }), - identifyRuntimeClosure: async (path) => [ - { - sourcePath: path, - destinationPath: "/runtime/node", - sha256: "1".repeat(64), - }, - ], - seccompDigest: () => "3".repeat(64), - probe: async () => undefined, - }, - javascriptReplayRunner: { - execute: async (prepared) => ({ - plan_digest: prepared.publicPlan.plan_digest, - outcomes: [ - { - case_id: "heading", - outcome: "return", - value: { type: "heading", text: "Title" }, - input_sha256: - prepared.publicPlan.cases[0]?.sha256 ?? "0".repeat(64), - output_sha256: "2".repeat(64), - truncated: false, - }, - ], - stderr: "", - termination: "completed", - cleanup: { state: "complete", residual_resources: [] }, - limitations: ["fixture runner"], - reproducer: null, - }), - }, - }); - const client = new Client({ name: "replay-parity-test", version: "1" }); - return { client, server, session }; -} - -function createReplayInput(root: string) { - return { - mode: "plan", - left: { - modules: [ - { - alias: "parser", - path: resolve(root, "parser.mjs"), - format: "esm", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "parser", - entry_export: "default", - }, - cases: [{ case_id: "heading", arguments: ["# Title"] }], - }; -} - -async function executeReplayScenario( - client: Client, - session: BinarySession, - root: string, -) { - const input = createReplayInput(root); - const planned = await client.callTool({ - name: "run_controlled_replay", - arguments: input, - }); - expect(planned.isError).not.toBe(true); - const digest = controlledReplayOutputSchema.parse(planned.structuredContent) - .plan?.plan_digest; - expect(digest).toMatch(/^[a-f0-9]{64}$/u); - const executed = await client.callTool({ - name: "run_controlled_replay", - arguments: { - ...input, - mode: "execute", - plan_digest: digest, - }, - }); - expect(executed.isError).not.toBe(true); - expect(executed.structuredContent).toMatchObject({ - phase: "execute", - evidence: { - authority: "controlled-replay", - provider: { id: "rea-javascript-replay" }, - }, - }); - expect(session.exportEvidenceBundle().records).toEqual( - expect.arrayContaining([ - expect.objectContaining({ authority: "controlled-replay" }), - ]), - ); -} - -async function createCharacterizationInput(root: string) { - const factoryPath = resolve(root, "sanitizer.factory.txt"); - const factoryBytes = await readFile(factoryPath); - const factorySha256 = createHash("sha256").update(factoryBytes).digest("hex"); - return { - selected_alias: "bundle", - expected_effect: "pure", - instrumentation: { - artifact_path: factoryPath, - artifact_sha256: factorySha256, - selection: { - byte_start: 0, - byte_end: factoryBytes.byteLength, - selected_sha256: factorySha256, - export_name: "selected", - }, - }, - replay: { - mode: "plan", - left: { - modules: [ - { - alias: "bundle", - path: factoryPath, - format: "commonjs-factory", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "bundle", - entry_export: "selected", - }, - cases: [{ case_id: "heading", arguments: ["# Title"] }], - }, - }; -} - -async function executeCharacterizationScenario( - client: Client, - session: BinarySession, - root: string, -) { - const input = await createCharacterizationInput(root); - const plan = await client.callTool({ - name: "prepare_node_characterization", - arguments: input, - }); - expect(plan.isError).not.toBe(true); - const preparedPlan = nodeCharacterizationPreparationOutputSchema.parse( - plan.structuredContent, - ).plan; - const characterized = await client.callTool({ - name: "execute_node_characterization", - arguments: { - plan_sha256: preparedPlan.plan_sha256, - preparation: input, - }, - }); - expect(characterized.isError).not.toBe(true); - expect(characterized.structuredContent).toMatchObject({ - phase: "execution", - evidence: { - authority: "controlled-replay", - provider: { id: "rea-node-characterization" }, - }, - }); - expect(session.exportEvidenceBundle().records).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - predicate_type: "rea.javascript-export-transformation", - }), - expect.objectContaining({ - predicate_type: "rea.runtime-characterization", - }), - ]), - ); -} - -describe("application workflow MCP parity", () => { - it("plans and executes the same controlled replay contract", async () => { - const root = resolve("tests/fixtures/replay"); - const { client, server, session } = createReplayScenario(root); - const [clientTransport, serverTransport] = - InMemoryTransport.createLinkedPair(); - try { - await server.connect(serverTransport); - await client.connect(clientTransport); - await executeReplayScenario(client, session, root); - await executeCharacterizationScenario(client, session, root); - } finally { - await client.close(); - await server.close(); - await session.close(); - } - }); -}); diff --git a/tests/acceptance/applications/applicationWorkflowCli.test.ts b/tests/acceptance/applications/applicationWorkflowCli.test.ts index 2ee319e4d..887835d0b 100644 --- a/tests/acceptance/applications/applicationWorkflowCli.test.ts +++ b/tests/acceptance/applications/applicationWorkflowCli.test.ts @@ -13,7 +13,6 @@ import { SOURCE_TO_BUNDLE_COMPARISON_EXAMPLE, } from "../../../src/contracts/javascriptApplicationWorkflowExamples.js"; import { analyzeJavaScriptApplication } from "../../../src/application/JavaScriptApplicationService.js"; -import { REPLAY_MACHINE_RUN_EXAMPLE } from "../../../src/contracts/replayMachineExample.js"; import { javascriptApplicationAnalysisResultSchema } from "../../../src/domain/javascriptApplicationAnalysis.js"; const execute = promisify(execFile); @@ -269,7 +268,7 @@ describe("application workflow CLI export Evidence", () => { }, 20_000); }); -describe("application workflow CLI validation and replay", () => { +describe("application workflow CLI validation", () => { it("returns safe actionable JSON validation details", async () => { const malformed = await runCli([ "trace-application-feature", @@ -298,64 +297,6 @@ describe("application workflow CLI validation and replay", () => { }, }); }, 20_000); - - it("runs a replay machine from inline and file-backed JSON", async () => { - const input = REPLAY_MACHINE_RUN_EXAMPLE; - const inline = await runCli([ - "run-replay-machine", - JSON.stringify(input), - "--json", - ]); - expect(inline).toMatchObject({ - final_state: "complete", - decisions: [{ outcome: "matched" }], - transition_journal: [ - { captured_aliases: [{ name: "token", sensitive: true }] }, - ], - }); - expect(JSON.stringify(inline)).not.toContain("opaque"); - - const root = await createTestTempDirectory("rea-replay-machine-cli-"); - temporary.push(root); - const inputPath = join(root, "run.json"); - await writeFile(inputPath, JSON.stringify(input)); - const fileBacked = await runCli([ - "run-replay-machine", - inputPath, - "--json", - ]); - expect(fileBacked).toEqual(inline); - - const invalid = await runCli([ - "run-replay-machine", - JSON.stringify({ - machine: input.machine, - events: [ - { - protocol: "http", - connection: "not_applicable", - at_ms: 0, - method: null, - path: "/callback", - headers: {}, - body: "private-cli-body", - }, - ], - }), - "--json", - ]); - expect(invalid).toMatchObject({ - code: "invalid_request", - details: { - issues: expect.arrayContaining([ - expect.objectContaining({ - path: ["events", 0, "method"], - }), - ]), - }, - }); - expect(JSON.stringify(invalid)).not.toContain("private-cli-body"); - }, 20_000); }); const runCli = async ( diff --git a/tests/acceptance/applications/applicationWorkflowVerifier.test.ts b/tests/acceptance/applications/applicationWorkflowVerifier.test.ts index f2badbfe8..5399b1d94 100644 --- a/tests/acceptance/applications/applicationWorkflowVerifier.test.ts +++ b/tests/acceptance/applications/applicationWorkflowVerifier.test.ts @@ -104,10 +104,6 @@ describe("local application workflow verifier", () => { right: { availability: "literal", value: 1 }, }, ], - runtime_validation: { - recommended_tool: "run_controlled_replay", - automatically_started: false, - }, }); }, 20_000); }); diff --git a/tests/boundary/cli/browserCli.test.ts b/tests/boundary/cli/browserCli.test.ts index 64c410550..6aab7fe3e 100644 --- a/tests/boundary/cli/browserCli.test.ts +++ b/tests/boundary/cli/browserCli.test.ts @@ -302,7 +302,6 @@ const completeScenarioCapture = () => { }, scenario: { start_origin: "https://app.example.test", - allowed_origins: ["https://app.example.test"], action_count: 1, secret_references: [], }, diff --git a/tests/boundary/cli/productCatalog.test.ts b/tests/boundary/cli/productCatalog.test.ts index 53ee6435c..1c1c700f4 100644 --- a/tests/boundary/cli/productCatalog.test.ts +++ b/tests/boundary/cli/productCatalog.test.ts @@ -126,9 +126,6 @@ describe("canonical product catalog", () => { "compare_javascript_export_shapes", "compare_source_to_bundle", "evaluate_reconstruction_coverage", - "execute_node_characterization", - "prepare_node_characterization", - "run_controlled_replay", "trace_application_feature", "trace_javascript_semantics", ]); @@ -138,7 +135,6 @@ describe("canonical product catalog", () => { ).toEqual([ "compare_managed_members", "import_managed_reconstruction", - "plan_managed_runtime_correlation", "project_managed_application_graph", "verify_managed_native_boundaries", ]); diff --git a/tests/boundary/cli/projectedErrorStatus.test.ts b/tests/boundary/cli/projectedErrorStatus.test.ts index 20330de02..b93a7aa6c 100644 --- a/tests/boundary/cli/projectedErrorStatus.test.ts +++ b/tests/boundary/cli/projectedErrorStatus.test.ts @@ -3,22 +3,6 @@ import { describe, expect } from "vitest"; import { cliTest } from "../../support/cli/cliFixture.js"; describe("projected CLI failures", () => { - cliTest( - "exits unsuccessfully for invalid replay configuration", - async ({ cli }) => { - const result = await cli.run({ - arguments: ["run-controlled-replay", "{}", "--json"], - environment: { REA_JAVASCRIPT_REPLAY_NODE_PATH: "relative/node" }, - }); - expect(result.json).toMatchObject({ - code: "configuration_invalid", - category: "execution_failure", - retryable: false, - }); - expect(result.exitCode).toBe(1); - }, - ); - cliTest( "exits unsuccessfully for invalid managed reconstruction input", async ({ cli }) => { diff --git a/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts b/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts index 76ddddcf9..15ac7eda7 100644 --- a/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts +++ b/tests/boundary/filesystem/javascriptExportShapeComparison.test.ts @@ -64,11 +64,9 @@ describe("JavaScript export return-shape comparison", () => { unpaired_left_variants: 0, unpaired_right_variants: 0, }); - expect(first.runtime_validation).toEqual({ - recommended_tool: "run_controlled_replay", - automatically_started: false, - required_for: "runtime-semantics", - }); + expect(first.limitations).toContain( + "This static comparison cannot establish runtime semantics; run behavioral probes directly against the relevant application versions when that evidence is required.", + ); }); it("keeps additions unknown when spread coverage is incomplete", async () => { diff --git a/tests/boundary/filesystem/managedRuntimeCorrelation.test.ts b/tests/boundary/filesystem/managedRuntimeCorrelation.test.ts deleted file mode 100644 index 28217f408..000000000 --- a/tests/boundary/filesystem/managedRuntimeCorrelation.test.ts +++ /dev/null @@ -1,178 +0,0 @@ -import { join } from "node:path"; - -import { describe, expect, it } from "vitest"; - -import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; - -import { planManagedRuntimeCorrelationEvidence } from "../../../src/application/ManagedRuntimeCorrelationService.js"; -import { MANAGED_STATIC_PROVIDER } from "../../../src/application/InvestigationProviders.js"; -import { createEvidence } from "../../../src/domain/evidence.js"; -import { - managedRuntimeCorrelationInputSchema, - managedRuntimeCorrelationResultSchema, -} from "../../../src/domain/managedRuntimeCorrelation.js"; -import { inspectManagedMembersBytes } from "../../../src/dotnet/ManagedMemberInspector.js"; -import { - buildManagedPeFixture, - managedPeFixtureTarget, -} from "../../../src/dotnet/ManagedPe.fixture.js"; - -describe("managed runtime correlation planning", () => { - it("records an exact-build non-executing plan without REA permission grants", async () => { - const directory = await createTestTempDirectory("rea-managed-runtime-"); - const artifactPath = join(directory, "fixture.dll"); - const executablePath = process.execPath; - const fixture = inspect(buildManagedPeFixture(), artifactPath); - let configurationReads = 0; - const result = await planManagedRuntimeCorrelationEvidence( - { - configuration: () => { - configurationReads += 1; - return { executablePath }; - }, - }, - { - ...inputFor(fixture.evidence, fixture.method), - bounds: { - timeout_ms: 5_000, - max_threads: 32, - max_output_bytes: 65_536, - allow_network: true, - allow_ui: true, - }, - }, - ); - - expect(configurationReads).toBe(1); - expect(result.ok).toBe(true); - if (!result.ok) return; - expect(result.value.operation).toBe("plan_managed_runtime_correlation"); - expect(result.value.confidence).toBe("derived"); - expect(result.value.authority).toBe("analyst-inference"); - const plan = managedRuntimeCorrelationResultSchema.parse( - result.value.normalized_result, - ); - expect( - managedRuntimeCorrelationInputSchema.safeParse({ - ...inputFor(fixture.evidence, fixture.method), - bounds: { - timeout_ms: 60_001, - max_threads: 257, - max_output_bytes: 1_048_577, - allow_network: true, - allow_ui: true, - }, - }).success, - ).toBe(true); - expect( - managedRuntimeCorrelationResultSchema.safeParse({ - ...plan, - limitations: Array.from({ length: 1_001 }, () => "x".repeat(4_097)), - }).success, - ).toBe(true); - expect(plan).toMatchObject({ - executed: false, - method_lock: { - token: "0x06000001", - exact_build_required: true, - }, - requested_runtime: { - effect: "instrumentation", - executable_path: executablePath, - network: "host", - confinement: "not-established", - }, - effect_taxonomy: { - instruments_code: true, - invokes_target_code: false, - }, - unsupported_until_executor_exists: true, - }); - }); - - it("rejects a method lock that no longer matches static Evidence", async () => { - const directory = await createTestTempDirectory("rea-managed-runtime-"); - const artifactPath = join(directory, "fixture.dll"); - const executablePath = process.execPath; - const fixture = inspect(buildManagedPeFixture(), artifactPath); - const result = await planManagedRuntimeCorrelationEvidence( - { configuration: () => ({ executablePath }) }, - { - ...inputFor(fixture.evidence, fixture.method), - method: { - ...inputFor(fixture.evidence, fixture.method).method, - normalized_il_sha256: "0".repeat(64), - }, - }, - ); - - expect(result.ok).toBe(false); - if (result.ok) return; - expect(result.error._tag).toBe("AnalysisInputError"); - }); - - it("plans without probing or requiring an installed runtime executable", async () => { - const fixture = inspect( - buildManagedPeFixture(), - "/tmp/managed-runtime.dll", - ); - const result = await planManagedRuntimeCorrelationEvidence( - { configuration: () => ({ executablePath: undefined }) }, - inputFor(fixture.evidence, fixture.method), - ); - - expect(result.ok).toBe(true); - if (!result.ok) return; - const plan = managedRuntimeCorrelationResultSchema.parse( - result.value.normalized_result, - ); - expect(plan.executed).toBe(false); - expect(plan.requested_runtime.executable_path).toBe("dotnet"); - expect(plan.limitations.join(" ")).toContain( - "prerequisites are unverified", - ); - }); -}); - -const inputFor = ( - staticMembers: ReturnType, - method: ReturnType["method"], -) => ({ - static_members: staticMembers, - method: { - token: method.token, - signature_sha256: method.signature.raw_sha256, - normalized_il_sha256: method.body.normalized_il_sha256, - }, - requested_effect: "instrumentation" as const, - host: { - os: "linux" as const, - clr_family: "dotnet" as const, - architecture: "x86_64" as const, - }, - bounds: { - timeout_ms: 5_000, - max_threads: 32, - max_output_bytes: 65_536, - allow_network: false as const, - allow_ui: false as const, - }, -}); - -const inspect = (bytes: Buffer, path: string) => { - const target = managedPeFixtureTarget(bytes, path); - const result = inspectManagedMembersBytes(bytes, target); - const method = result.methods[0]; - if (method === undefined) throw new Error("fixture has no method"); - return { - result, - method, - evidence: createEvidence(target, MANAGED_STATIC_PROVIDER, { - operation: "inspect_managed_members", - parameters: {}, - result, - rawResult: null, - limitations: result.limitations, - }), - }; -}; diff --git a/tests/boundary/filesystem/nodeRuntimeCharacterization.test.ts b/tests/boundary/filesystem/nodeRuntimeCharacterization.test.ts deleted file mode 100644 index 320c3b629..000000000 --- a/tests/boundary/filesystem/nodeRuntimeCharacterization.test.ts +++ /dev/null @@ -1,282 +0,0 @@ -import { createHash } from "node:crypto"; -import { readFile, realpath, writeFile } from "node:fs/promises"; -import { join } from "node:path"; - -import { describe, expect, it } from "vitest"; - -import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; - -import { - executeNodeCharacterization, - prepareNodeCharacterization, -} from "../../../src/application/NodeRuntimeCharacterizationService.js"; -import type { - JavaScriptReplayConfiguration, - JavaScriptReplayHost, - JavaScriptReplayRunner, -} from "../../../src/application/JavaScriptReplayPlanning.js"; -import { - nodeCharacterizationPreparationInputSchema, - nodeCharacterizationPreparationOutputSchema, -} from "../../../src/domain/nodeRuntimeCharacterization.js"; -import { createRuntimeCharacterizationPlan } from "../../../src/domain/runtimeCharacterization.js"; - -const sha256 = (value: Uint8Array): string => - createHash("sha256").update(value).digest("hex"); - -describe("Node runtime characterization", () => { - it("prepares without execution, then requires the exact prepared plan hash", async () => { - const fixture = await createFixture(); - let executions = 0; - const dependencies = dependenciesFor(fixture.root, () => { - executions += 1; - }); - const input = preparationInput(fixture); - - const prepared = await prepareNodeCharacterization(dependencies, input); - expect(prepared.ok).toBe(true); - expect(executions).toBe(0); - if (!prepared.ok) throw prepared.error; - const output = nodeCharacterizationPreparationOutputSchema.parse( - prepared.value, - ); - expect(output).toMatchObject({ - phase: "preparation", - plan: { - preparation_sha256: expect.stringMatching(/^[a-f0-9]{64}$/u), - runtime: { family: "ecmascript", provider_id: "node-javascript" }, - }, - transformation: { - original_sha256: fixture.sha256, - output_format: "commonjs-factory", - }, - transformation_evidence: { - predicate_type: "rea.javascript-export-transformation", - authority: "shipped-artifact", - }, - replay: { phase: "plan" }, - }); - expect(() => - nodeCharacterizationPreparationOutputSchema.parse({ - ...output, - plan: { ...output.plan, expected_effect: "bounded-effects" }, - }), - ).toThrow(); - - const stale = await executeNodeCharacterization(dependencies, { - plan_sha256: "0".repeat(64), - preparation: input, - }); - expect(stale.ok).toBe(false); - expect(!stale.ok && stale.error._tag).toBe("ReplayPlanStaleError"); - expect(executions).toBe(0); - - const executed = await executeNodeCharacterization(dependencies, { - plan_sha256: output.plan.plan_sha256, - preparation: input, - }); - expect(executed.ok && executed.value).toMatchObject({ - phase: "execution", - replay: { - phase: "execute", - evidence: { authority: "controlled-replay" }, - }, - evidence: { - predicate_type: "rea.runtime-characterization", - authority: "controlled-replay", - }, - }); - expect(executions).toBe(1); - expect(await readFile(fixture.path)).toEqual(Buffer.from(fixture.bytes)); - }); - - it("maps replay-only alias syntax to a provider-neutral module identity", async () => { - const fixture = await createFixture(); - const input = preparationInput(fixture); - const alias = "@scope/pkg"; - const prepared = await prepareNodeCharacterization( - dependenciesFor(fixture.root, () => undefined), - { - ...input, - selected_alias: alias, - replay: { - ...input.replay, - left: { - ...input.replay.left, - entry_alias: alias, - modules: input.replay.left.modules.map((module) => ({ - ...module, - alias, - })), - }, - }, - }, - ); - - expect(prepared.ok && prepared.value).toMatchObject({ - plan: { - callable: { - module_id: expect.stringMatching(/^module\/[a-f0-9]{64}$/u), - }, - }, - }); - }); - - // Neither the declared call budget nor the alias length has a ceiling. The - // absence of a cap cannot be asserted through the preparation path, because - // the budget is derived from the case count, so reaching a large value end to - // end would mean submitting tens of thousands of cases. Assert it where a - // bound would actually be added, at a value far above any ceiling a change - // would plausibly introduce. - it("admits call budgets and aliases beyond any plausible ceiling", async () => { - const fixture = await createFixture(); - const input = preparationInput(fixture); - const alias = "a".repeat(4_096); - const parsed = nodeCharacterizationPreparationInputSchema.parse({ - ...input, - selected_alias: alias, - replay: { - ...input.replay, - left: { - ...input.replay.left, - entry_alias: alias, - modules: input.replay.left.modules.map((module) => ({ - ...module, - alias, - })), - }, - }, - }); - expect(parsed.selected_alias).toBe(alias); - - const prepared = await prepareNodeCharacterization( - dependenciesFor(fixture.root, () => undefined), - input, - ); - expect(prepared.ok).toBe(true); - if (!prepared.ok) return; - const { plan_sha256: _digest, ...plan } = - nodeCharacterizationPreparationOutputSchema.parse(prepared.value).plan; - expect( - createRuntimeCharacterizationPlan({ - ...plan, - limits: { ...plan.limits, max_calls: 10_000_001 }, - }).limits.max_calls, - ).toBe(10_000_001); - }); -}); - -const createFixture = async () => { - const root = await createTestTempDirectory("rea-characterization-"); - const path = join(root, "bundle.js"); - const source = "const hidden = (value) => value.trim();"; - const selected = "(value) => value.trim()"; - const bytes = new TextEncoder().encode(source); - await writeFile(path, bytes); - const byteStart = source.indexOf(selected); - return { - root, - path, - bytes, - sha256: sha256(bytes), - byteStart, - selectedBytes: new TextEncoder().encode(selected), - }; -}; - -const preparationInput = ( - fixture: Awaited>, -) => ({ - selected_alias: "bundle", - expected_effect: "pure" as const, - instrumentation: { - artifact_path: fixture.path, - artifact_sha256: fixture.sha256, - selection: { - byte_start: fixture.byteStart, - byte_end: fixture.byteStart + fixture.selectedBytes.byteLength, - selected_sha256: sha256(fixture.selectedBytes), - export_name: "selected", - }, - }, - replay: { - mode: "plan" as const, - left: { - modules: [ - { - alias: "bundle", - path: fixture.path, - format: "commonjs-factory" as const, - role: "module" as const, - dependencies: {}, - }, - ], - entry_alias: "bundle", - entry_export: "selected", - }, - cases: [{ case_id: "trim", arguments: [" value "] }], - }, -}); - -const dependenciesFor = (root: string, onExecute: () => void) => { - const configuration: JavaScriptReplayConfiguration = { - nodePath: process.execPath, - bubblewrapPath: process.execPath, - systemdRunPath: process.execPath, - systemctlPath: process.execPath, - shellPath: process.execPath, - }; - const host: JavaScriptReplayHost = { - readSource: async (path, maximumBytes) => { - const canonicalPath = await realpath(path); - const bytes = await readFile(canonicalPath); - if (bytes.byteLength > maximumBytes) - throw new RangeError("fixture limit"); - return { canonicalPath, bytes }; - }, - identifyExecutable: async (path) => ({ - path, - version: "fixture-node-24", - sha256: "1".repeat(64), - }), - identifyWorker: async () => ({ - path: "/fixture/worker.js", - version: "fixture-worker", - sha256: "2".repeat(64), - }), - identifyRuntimeClosure: async (path) => [ - { - sourcePath: path, - destinationPath: "/runtime/node", - sha256: "1".repeat(64), - }, - ], - seccompDigest: () => "3".repeat(64), - probe: async () => undefined, - }; - const runner: JavaScriptReplayRunner = { - execute: async (prepared) => { - onExecute(); - return { - plan_digest: prepared.publicPlan.plan_digest, - outcomes: [ - { - case_id: "trim", - outcome: "return", - value: "value", - input_sha256: - prepared.publicPlan.cases[0]?.sha256 ?? "0".repeat(64), - output_sha256: "4".repeat(64), - truncated: false, - }, - ], - stderr: "", - termination: "completed", - cleanup: { state: "complete", residual_resources: [] }, - limitations: ["fixture runner"], - reproducer: null, - }; - }, - }; - return { configuration: () => configuration, host, runner }; -}; diff --git a/tests/boundary/filesystem/replaySeccompFile.test.ts b/tests/boundary/filesystem/replaySeccompFile.test.ts deleted file mode 100644 index 572a456c9..000000000 --- a/tests/boundary/filesystem/replaySeccompFile.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { access, readFile } from "node:fs/promises"; -import { dirname } from "node:path"; - -import { describe, expect, it } from "vitest"; - -import { buildLinuxX64ReplaySeccomp } from "../../../src/replay/LinuxSeccompPolicy.js"; -import { temporaryFilterHandle } from "../../../src/replay/ReplaySeccompFile.js"; - -describe("replay seccomp file ownership", () => { - it("writes the policy bytes and removes its private directory on close", async () => { - const filter = await temporaryFilterHandle(); - try { - expect(await readFile(filter.path)).toEqual( - Buffer.from(buildLinuxX64ReplaySeccomp()), - ); - expect(await filter.handle.readFile()).toEqual( - Buffer.from(buildLinuxX64ReplaySeccomp()), - ); - } finally { - await filter.close(); - } - await expect(access(dirname(filter.path))).rejects.toThrow(); - await filter.close(); - }); - - it.skipIf(process.platform !== "linux")( - "removes the directory even when descriptor cleanup rejects", - async () => { - const filter = await temporaryFilterHandle(); - const close = filter.handle.close.bind(filter.handle); - const failure = new Error("injected descriptor cleanup failure"); - filter.handle.close = async () => { - throw failure; - }; - try { - await expect(filter.close()).rejects.toBe(failure); - await expect(access(dirname(filter.path))).rejects.toThrow(); - } finally { - filter.handle.close = close; - await filter.close(); - } - }, - ); -}); diff --git a/tests/boundary/filesystem/replaySourceRead.test.ts b/tests/boundary/filesystem/replaySourceRead.test.ts deleted file mode 100644 index a35dde45d..000000000 --- a/tests/boundary/filesystem/replaySourceRead.test.ts +++ /dev/null @@ -1,79 +0,0 @@ -import { writeFile } from "node:fs/promises"; -import { join } from "node:path"; - -import { describe, expect, it } from "vitest"; - -import { prepareReplayPlan } from "../../../src/application/JavaScriptReplayPlanning.js"; -import { controlledReplayInputSchema } from "../../../src/domain/javascriptReplay.js"; -import { SystemJavaScriptReplayHost } from "../../../src/replay/SystemJavaScriptReplayHost.js"; -import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; - -describe("replay source byte admission", () => { - it.each([0, 16, 65_537])("reads exactly %i admitted bytes", async (limit) => { - const root = await createTestTempDirectory("rea-replay-source-"); - const path = join(root, "module.mjs"); - const bytes = Buffer.alloc(limit, 0x61); - await writeFile(path, bytes); - expect( - await new SystemJavaScriptReplayHost().readSource(path, limit), - ).toEqual({ - canonicalPath: path, - bytes, - }); - }); - - it("rejects an oversized source and a directory", async () => { - const root = await createTestTempDirectory("rea-replay-source-"); - const path = join(root, "module.mjs"); - await writeFile(path, "oversized"); - const host = new SystemJavaScriptReplayHost(); - await expect(host.readSource(path, 1)).rejects.toThrow("declared limit"); - await expect(host.readSource(root, 1)).rejects.toThrow(); - }); -}); - -it("rejects a host result larger than the remaining module budget", async () => { - const path = process.execPath; - const identity = { path, version: "fixture", sha256: "1".repeat(64) }; - const input = controlledReplayInputSchema.parse({ - mode: "plan", - left: { - modules: [ - { - alias: "entry", - path, - format: "esm", - role: "module", - dependencies: {}, - }, - ], - entry_alias: "entry", - entry_export: "default", - }, - cases: [{ case_id: "one", arguments: [] }], - limits: { module_bytes: 16 }, - }); - await expect( - prepareReplayPlan( - input, - { - nodePath: path, - bubblewrapPath: path, - systemdRunPath: path, - systemctlPath: path, - shellPath: path, - }, - { - readSource: async (canonicalPath, maximumBytes) => ({ - canonicalPath, - bytes: Buffer.alloc(maximumBytes + 1), - }), - identifyExecutable: async () => identity, - identifyWorker: async () => identity, - identifyRuntimeClosure: async () => [], - seccompDigest: () => "2".repeat(64), - probe: async () => undefined, - }, - ), - ).rejects.toThrow("Replay module bytes exceed the aggregate limit"); -}); diff --git a/tests/boundary/mcp/browserScenarioMcp.test.ts b/tests/boundary/mcp/browserScenarioMcp.test.ts index c6674a474..71c967b8b 100644 --- a/tests/boundary/mcp/browserScenarioMcp.test.ts +++ b/tests/boundary/mcp/browserScenarioMcp.test.ts @@ -81,7 +81,6 @@ const captureFor = (scenario: BrowserScenario): BrowserScenarioCapture => { }, scenario: { start_origin: new URL(start).origin, - allowed_origins: scenario.allowed_origins, action_count: scenario.actions.length, secret_references: scenario.secrets.map(({ secret_id: id }) => id), }, @@ -109,7 +108,6 @@ const minimalScenario = (origin = "https://app.example.test") => ({ executable_path: process.execPath, }, start_url: { url: `${origin}/`, query: [] }, - allowed_origins: [origin], actions: [ { step_id: "settle", @@ -173,7 +171,6 @@ describe("browser scenario MCP tool", () => { expect(provider.scenarios[0]).toMatchObject({ environment: { color_scheme: "light", service_workers: "block" }, storage: { cookies: [], local_storage: [], session_storage: [] }, - request_replay: { mode: "disabled" }, capture: { after_each_step: [], at_end: ["url"], events: [] }, }); diff --git a/tests/boundary/mcp/createServer.test.ts b/tests/boundary/mcp/createServer.test.ts index eec8ae4ed..781a4162a 100644 --- a/tests/boundary/mcp/createServer.test.ts +++ b/tests/boundary/mcp/createServer.test.ts @@ -18,6 +18,5 @@ describe("MCP server composition", () => { expect(client.getInstructions()).not.toContain("open_binary"); const names = (await client.listTools()).tools.map(({ name }) => name); expect(names).not.toContain("compare_managed_members"); - expect(names).not.toContain("plan_managed_runtime_correlation"); }); }); diff --git a/tests/boundary/mcp/enhancedTools.01-lists-the-complete-target-open.test.ts b/tests/boundary/mcp/enhancedTools.01-lists-the-complete-target-open.test.ts index 756383111..112a26339 100644 --- a/tests/boundary/mcp/enhancedTools.01-lists-the-complete-target-open.test.ts +++ b/tests/boundary/mcp/enhancedTools.01-lists-the-complete-target-open.test.ts @@ -214,7 +214,6 @@ describe("enhanced MCP tools", () => { ["analyze_function", { procedure: "0x1" }], ["inspect_native_api", { procedure: "0x1" }], ["trace_feature", { query: "hello" }], - ["find_code_for_string", { query: "hello" }], ["trace_call_path", { start: "0x1", goal: "0x2" }], ["trace_native_ui_action", { action: "missing-selector" }], ["inspect_native_dispatch_metadata", { max_records: 100 }], @@ -294,11 +293,6 @@ describe("enhanced MCP tools", () => { ], }); expect(results[10]).toMatchObject({ - query: "hello", - matches: [{ type: "string", address: "0x30", value: "hello" }], - truncated: false, - }); - expect(results[11]).toMatchObject({ start: "0x1", goal: "0x2", direction: "forward", @@ -310,11 +304,11 @@ describe("enhanced MCP tools", () => { ], truncated: false, }); - expect(results[12]).toMatchObject({ + expect(results[11]).toMatchObject({ start: "missing-selector", reason: "ui_action_or_object_not_found", }); - expect(results[13]).toMatchObject({ + expect(results[12]).toMatchObject({ target_sha256: "a".repeat(64), provider: { id: "fixture", @@ -327,7 +321,7 @@ describe("enhanced MCP tools", () => { ]), }, }); - expect(results[14]).toMatchObject({ + expect(results[13]).toMatchObject({ target_sha256: "a".repeat(64), decompilations: 1, unknowns: [ diff --git a/tests/boundary/mcp/mainReload.test.ts b/tests/boundary/mcp/mainReload.test.ts index 82d9e850e..ed5a65c35 100644 --- a/tests/boundary/mcp/mainReload.test.ts +++ b/tests/boundary/mcp/mainReload.test.ts @@ -1,68 +1,42 @@ +import { serveStdio } from "@modelcontextprotocol/server/stdio"; import { describe, expect, it } from "vitest"; -import { run } from "../../../src/main.js"; -import { - createServer, - type CreateServerOptions, -} from "../../../src/server/createServer.js"; - -type RuntimeDependencies = NonNullable[0]>; +import { parseConfig } from "../../../src/config.js"; +import { silentLogger } from "../../../src/logger.js"; +import { registerConfigReload } from "../../../src/main/reload.js"; +import type { RuntimeDependencies } from "../../../src/main/types.js"; +import { createRuntimeState } from "../../../src/main/state.js"; describe("runtime configuration reload", () => { - it("updates runtime executable configuration for connected server factories", async () => { - const env: NodeJS.ProcessEnv = { - REA_JAVASCRIPT_REPLAY_NODE_PATH: "/first/node", - REA_MANAGED_RUNTIME_EXECUTABLE_PATH: "/first/dotnet", - }; - const runtime = await startRuntime(env); + it("applies a valid configuration reload", () => { + const env: NodeJS.ProcessEnv = { REA_LOG_LEVEL: "info" }; + const runtime = setupReload(env); - expect(runtime.options.javascriptReplayConfiguration?.()).toMatchObject({ - nodePath: "/first/node", - }); - expect(runtime.options.managedRuntimeConfiguration?.()).toEqual({ - executablePath: "/first/dotnet", - }); - - env.REA_JAVASCRIPT_REPLAY_NODE_PATH = "/second/node"; - env.REA_MANAGED_RUNTIME_EXECUTABLE_PATH = "/second/dotnet"; + env.REA_LOG_LEVEL = "debug"; runtime.reload(); - expect(runtime.options.javascriptReplayConfiguration?.()).toMatchObject({ - nodePath: "/second/node", - }); - expect(runtime.options.managedRuntimeConfiguration?.()).toEqual({ - executablePath: "/second/dotnet", - }); + expect(runtime.state.currentConfig.logLevel).toBe("debug"); }); - it("retains the last valid runtime configuration after an invalid reload", async () => { - const env: NodeJS.ProcessEnv = { - REA_JAVASCRIPT_REPLAY_NODE_PATH: "/valid/node", - REA_MANAGED_RUNTIME_EXECUTABLE_PATH: "/valid/dotnet", - }; - const runtime = await startRuntime(env); + it("retains the last valid configuration after an invalid reload", () => { + const env: NodeJS.ProcessEnv = { REA_LOG_LEVEL: "info" }; + const runtime = setupReload(env); - env.REA_JAVASCRIPT_REPLAY_BWRAP_PATH = "relative/bwrap"; + env.REA_LOG_LEVEL = "invalid"; runtime.reload(); - expect(runtime.options.javascriptReplayConfiguration?.()).toMatchObject({ - nodePath: "/valid/node", - }); - expect(runtime.options.managedRuntimeConfiguration?.()).toEqual({ - executablePath: "/valid/dotnet", - }); + expect(runtime.state.currentConfig.logLevel).toBe("info"); }); }); -const startRuntime = async (env: NodeJS.ProcessEnv) => { +const setupReload = (env: NodeJS.ProcessEnv) => { + const parsed = parseConfig(env); + if (!parsed.ok) throw parsed.error; + const state = createRuntimeState(parsed.value); let reload: (() => void) | undefined; - let options: CreateServerOptions | undefined; const dependencies: RuntimeDependencies = { env, - serve: (factory) => { - void factory({ era: "legacy" }); - return { close: () => Promise.resolve() }; - }, + serve: serveStdio, writeStderr: () => undefined, setExitCode: () => undefined, registerShutdown: () => () => undefined, @@ -70,14 +44,13 @@ const startRuntime = async (env: NodeJS.ProcessEnv) => { reload = handler; return () => undefined; }, - createServer: (analysis, session, received) => { - options = received; - return createServer(analysis, session, received); - }, }; - - expect(await run(dependencies)).toBe(0); - if (reload === undefined || options === undefined) - throw new Error("Runtime reload seam was not initialized"); - return { reload, options }; + registerConfigReload({ + dependencies, + runtimeState: state, + serverLogger: silentLogger, + }); + if (reload === undefined) + throw new Error("Reload handler was not registered"); + return { reload, state }; }; diff --git a/tests/boundary/mcp/managedMcp.test.ts b/tests/boundary/mcp/managedMcp.test.ts index c60576328..e9fedf44a 100644 --- a/tests/boundary/mcp/managedMcp.test.ts +++ b/tests/boundary/mcp/managedMcp.test.ts @@ -29,13 +29,11 @@ it("opens a managed PE and executes the managed static provider through MCP", as ]), ); const server = createServer(session, session, { - managedRuntimeConfiguration: () => ({ executablePath: process.execPath }), availabilityPolicy: () => ({ processCaptureEnabled: false, investigationInputRoots: 0, browserObservationEnabled: false, electronObservationEnabled: false, - javascriptReplayEnabled: false, }), }); const client = new Client({ name: "managed-mcp-test", version: "1.0.0" }); @@ -66,7 +64,6 @@ const verifyManagedCatalogAndNativeWorkflow = async ( "compare_managed_members", "import_managed_reconstruction", "verify_managed_native_boundaries", - "plan_managed_runtime_correlation", ]), ); for (const evidence of [ @@ -221,7 +218,6 @@ const verifyManagedComparisonAndReconstruction = async ( expect(method).toBeDefined(); if (method === undefined) return; await verifyImport(client, members, method); - await verifyRuntimePlan(client, members, method); }; type ManagedMethod = NonNullable>; @@ -278,51 +274,6 @@ const verifyImport = async ( }); }; -const verifyRuntimePlan = async ( - client: Client, - members: Record, - method: ManagedMethod, -): Promise => { - const planned = inlineEvidence( - structured( - await client.callTool({ - name: "plan_managed_runtime_correlation", - arguments: { - static_members: members, - method: { - token: method.token, - signature_sha256: method.signature.raw_sha256, - normalized_il_sha256: method.body.normalized_il_sha256, - }, - requested_effect: "attach", - host: { - os: "linux", - clr_family: "dotnet", - architecture: "x86_64", - }, - bounds: { - timeout_ms: 5000, - max_threads: 32, - max_output_bytes: 65536, - allow_network: false, - allow_ui: false, - }, - }, - }), - ), - ); - expect(planned).toMatchObject({ - operation: "plan_managed_runtime_correlation", - provider: { id: "rea-dotnet-workflows" }, - confidence: "derived", - normalized_result: { - executed: false, - requested_runtime: { effect: "attach", network: "none" }, - effect_taxonomy: { attaches_process: true }, - }, - }); -}; - const structured = (result: CallToolResult): Record => { if ( typeof result.structuredContent !== "object" || diff --git a/tests/boundary/mcp/replayMachineMcp.test.ts b/tests/boundary/mcp/replayMachineMcp.test.ts deleted file mode 100644 index d6246fb21..000000000 --- a/tests/boundary/mcp/replayMachineMcp.test.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { Client, InMemoryTransport } from "@modelcontextprotocol/client"; -import { describe, expect, it } from "vitest"; - -import { createTestBinarySession } from "../../fixtures/binarySession.js"; -import { REPLAY_MACHINE_RUN_EXAMPLE } from "../../../src/contracts/replayMachineExample.js"; -import { createServer } from "../../../src/server/createServer.js"; -import { observed } from "../../fixtures/analysisExecution.js"; - -describe("direct replay machine MCP parity", () => { - it("returns typed journal output and safe validation failures", async () => { - const session = createTestBinarySession(() => ({ - execute: () => Promise.resolve(observed(null)), - close: () => Promise.resolve(), - })); - const server = createServer(session, session); - const client = new Client({ name: "replay-machine-test", version: "1" }); - const [clientTransport, serverTransport] = - InMemoryTransport.createLinkedPair(); - const example = REPLAY_MACHINE_RUN_EXAMPLE; - try { - await server.connect(serverTransport); - await client.connect(clientTransport); - const result = await client.callTool({ - name: "run_replay_machine", - arguments: example, - }); - expect(result).toMatchObject({ - structuredContent: { - result: { - final_state: "complete", - terminal: true, - decisions: [{ outcome: "matched", transition_sequence: 0 }], - transition_journal: [ - { - transition_id: "accept_callback", - captured_aliases: [{ name: "token", sensitive: true }], - }, - ], - }, - }, - }); - expect(JSON.stringify(result)).not.toContain("opaque"); - - const invalid = await client.callTool({ - name: "run_replay_machine", - arguments: { - ...example, - events: [ - { - protocol: "http", - connection: "not_applicable", - at_ms: 0, - method: null, - path: "/callback", - headers: {}, - body: "private-request-body", - }, - ], - }, - }); - expect(invalid.isError).toBe(true); - expect(invalid.structuredContent).toBeUndefined(); - expect(JSON.stringify(invalid)).not.toContain("private-request-body"); - } finally { - await client.close(); - await server.close(); - await session.close(); - } - }); -}); diff --git a/tests/boundary/mcp/serverUnknownsMcp.test.ts b/tests/boundary/mcp/serverUnknownsMcp.test.ts index bc77ead77..ecc905944 100644 --- a/tests/boundary/mcp/serverUnknownsMcp.test.ts +++ b/tests/boundary/mcp/serverUnknownsMcp.test.ts @@ -128,7 +128,7 @@ it("does not record capability unavailability without supporting Evidence", asyn }); }); -it("records approved capture disagreement as a contradicted unknown", async () => { +it("records capture disagreement as a contradicted unknown", async () => { const session = createTestBinarySession( () => ({ @@ -149,17 +149,6 @@ it("records approved capture disagreement as a contradicted unknown", async () = outcome: "dispatched", }, ], - shim_events: [ - { - sequence: 0, - at_ms: 0, - command: "fixture", - route_index: null, - arguments: [], - working_directory: "/tmp", - outcome: "unmatched", - }, - ], }); const captureEvidence = (capture: typeof left) => createEvidence(undefined, PROCESS_PROVIDER, { @@ -213,7 +202,7 @@ it("records approved capture disagreement as a contradicted unknown", async () = { status: "contradicted", domain: "process-comparison", - question: "Process captures disagree across: interaction, shim", + question: "Process captures disagree across: interaction", contradicting_evidence_ids: [rightEvidence.evidence_id], }, ], diff --git a/tests/boundary/mcp/toolSchemaValidity.test.ts b/tests/boundary/mcp/toolSchemaValidity.test.ts index bc4db3c84..694b65a0c 100644 --- a/tests/boundary/mcp/toolSchemaValidity.test.ts +++ b/tests/boundary/mcp/toolSchemaValidity.test.ts @@ -99,24 +99,6 @@ describe("MCP JSON Schema validity", () => { const { tools } = await client.listTools(); const advertised = new Map(tools.map((tool) => [tool.name, tool])); const ajv = new Ajv2020({ strict: false, validateFormats: false }); - const replayContract = TOOL_CONTRACTS.find( - ({ name }) => name === "run_controlled_replay", - ); - const replayTool = advertised.get("run_controlled_replay"); - if (replayContract === undefined || replayTool === undefined) - throw new Error("Controlled replay tool was not advertised"); - const replayExample = replayContract.examples[0]; - if (replayExample === undefined) - throw new Error("Controlled replay tool has no valid example"); - const invalidReplay = { - ...replayExample.input, - cases: [], - }; - expect(replayContract.inputSchema.safeParse(invalidReplay).success).toBe( - false, - ); - expect(ajv.compile(replayTool.inputSchema)(invalidReplay)).toBe(false); - const graphContract = TOOL_CONTRACTS.find( ({ name }) => name === "project_managed_application_graph", ); diff --git a/tests/boundary/process/processCaptureLifecycle.test.ts b/tests/boundary/process/processCaptureLifecycle.test.ts index dfde64fd3..64bbf2675 100644 --- a/tests/boundary/process/processCaptureLifecycle.test.ts +++ b/tests/boundary/process/processCaptureLifecycle.test.ts @@ -3,14 +3,11 @@ import { rm, symlink } from "node:fs/promises"; import { dirname, join } from "node:path"; import { fileURLToPath } from "node:url"; import { promisify } from "node:util"; -import { expect, it } from "vitest"; +import { expect } from "vitest"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; import { itWithCaptureCapability } from "./processCaptureCapability.js"; -import { - captureProcessScenario, - ProcessCaptureError, -} from "../../../src/application/ProcessHarness.js"; +import { captureProcessScenario } from "../../../src/application/ProcessHarness.js"; import { parseProcessScenario } from "../../../src/domain/processCapture.js"; const processFixture = fileURLToPath( @@ -86,15 +83,8 @@ itWithCaptureCapability( }, ); -// Each action is triggered by observed terminal output rather than a wall-clock -// offset. A fixed `at_ms` can fire before the child has written its prompt under -// host contention, which drops the input and the resize echo and made this test -// load-flaky. -// -// This also covers the reactive `resize` path against time bucketing: rendered -// frames must share the normalized clock used by captured frames. They did not, -// so the capture failed validation with "rendered_frames: timestamps must be -// ordered" until the renderer call in ProcessReactiveEffects was normalized. +// Events are scheduled relative to PTY startup, so the child is already live +// before the input, resize, and signal are delivered. itWithCaptureCapability( "captures source-owned interactive, resize, Unicode, and signal behavior", async () => { @@ -103,86 +93,14 @@ itWithCaptureCapability( executable: process.execPath, arguments: [processFixture, "interactive"], working_directory: dirname(processFixture), + events: [ + { type: "input", at_ms: 200, data: "answer" }, + { type: "resize", at_ms: 400, columns: 100, rows: 40 }, + { type: "signal", at_ms: 700, signal: "SIGINT" }, + ], normalization: { time_bucket_ms: 10 }, timeout_ms: 20_000, idle_timeout_ms: 10_000, - reactive: { - initial_state: "awaiting_prompt", - deadline_ms: 15_000, - states: [ - { - id: "awaiting_prompt", - max_visits: 1, - deadline_ms: 10_000, - on: [ - { - id: "answer", - priority: 0, - max_uses: 1, - when: { - kind: "terminal_text", - literal: "prompt>", - occurrence: 1, - since: { kind: "scenario_start" }, - consume: true, - }, - actions: [ - { type: "send_input", data: "answer", sensitive: false }, - ], - target: { kind: "goto", state: "awaiting_resize" }, - }, - ], - }, - { - id: "awaiting_resize", - max_visits: 1, - deadline_ms: 10_000, - on: [ - { - id: "resize", - priority: 0, - max_uses: 1, - when: { - kind: "terminal_text", - literal: "input:answer", - occurrence: 1, - since: { kind: "scenario_start" }, - consume: true, - }, - actions: [{ type: "resize", columns: 100, rows: 40 }], - target: { kind: "goto", state: "awaiting_signal" }, - }, - ], - }, - { - id: "awaiting_signal", - max_visits: 1, - deadline_ms: 10_000, - on: [ - { - id: "signal", - priority: 0, - max_uses: 1, - when: { - kind: "terminal_text", - literal: "resize:100x40", - occurrence: 1, - since: { kind: "scenario_start" }, - consume: true, - }, - actions: [ - { - type: "send_signal", - target: { kind: "root" }, - signal: "SIGINT", - }, - ], - target: { kind: "finish" }, - }, - ], - }, - ], - }, }), ); if (!result.ok) throw result.error; diff --git a/tests/boundary/process/processCaptureMultisource.test.ts b/tests/boundary/process/processCaptureMultisource.test.ts deleted file mode 100644 index fef448c1b..000000000 --- a/tests/boundary/process/processCaptureMultisource.test.ts +++ /dev/null @@ -1,253 +0,0 @@ -import { rm } from "node:fs/promises"; -import { dirname } from "node:path"; -import { fileURLToPath } from "node:url"; -import { expect } from "vitest"; -import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; -import { itWithCaptureCapability } from "./processCaptureCapability.js"; - -import { captureProcessScenario } from "../../../src/application/ProcessHarness.js"; -import { - parseProcessScenario, - type ProcessCapture, -} from "../../../src/domain/processCapture.js"; -import { processCaptureIssues } from "../../../src/domain/processCapture.fixture.js"; - -type EventSource = "process" | "filesystem" | "http" | "websocket" | "shim"; - -function eventTrigger( - source: EventSource, - exact: Record, - ignoreFields: readonly string[], -) { - return { - kind: "event" as const, - source, - exact, - ignore_fields: ignoreFields, - since: { kind: "scenario_start" as const }, - consume: true, - cardinality: { min: 1, max: 1 }, - }; -} - -function collectionTriggers() { - const terminalTrigger = (literal: string) => ({ - kind: "terminal_text" as const, - literal, - occurrence: 1, - since: { kind: "scenario_start" as const }, - consume: false, - }); - return [ - { - kind: "any" as const, - triggers: [ - terminalTrigger("Collecting"), - terminalTrigger("unreachable-alternative"), - ], - }, - eventTrigger( - "process", - { - pid: 3, - parent_pid: 1, - command: "rea-reactive-worker", - process_group_id: 1, - session_id: process.platform === "darwin" ? null : 1, - }, - ["at_ms"], - ), - eventTrigger( - "filesystem", - { - name: "ready_snapshot", - truncated: false, - }, - ["at_ms", "files", "effects"], - ), - eventTrigger( - "shim", - { - command: "codex", - route_index: 0, - arguments: ["probe"], - working_directory: "", - outcome: "matched", - }, - ["sequence", "at_ms"], - ), - { - kind: "sequence" as const, - triggers: [ - eventTrigger( - "http", - { - protocol: "http", - direction: "request", - method: "GET", - path: "/reactive", - data: "", - outcome: "matched", - }, - ["sequence", "at_ms"], - ), - eventTrigger( - "websocket", - { - protocol: "websocket", - direction: "received", - method: null, - path: "/ws", - data: "reactive-client", - outcome: "matched", - }, - ["sequence", "at_ms"], - ), - ], - }, - ]; -} - -function createMultiSourceScenario(root: string, script: string) { - return parseProcessScenario({ - executable: process.execPath, - arguments: [script, "codex"], - working_directory: root, - filesystem_observation_paths: [root], - normalization: { paths: true }, - replay: { - http: [{ method: "GET", path: "/reactive", status: 200, body: "ok" }], - websocket_messages: ["reactive-server"], - }, - command_shims: [ - { - name: "codex", - routes: [ - { - arguments: ["probe"], - outputs: [], - termination: { type: "exit", code: 0 }, - }, - ], - }, - ], - reactive: { - initial_state: "ready", - deadline_ms: 8_000, - states: [ - { - id: "ready", - max_visits: 1, - deadline_ms: 3_000, - on: [ - { - id: "checkpoint_ready", - priority: 0, - max_uses: 1, - when: { - kind: "terminal_text", - literal: "Ready", - occurrence: 1, - since: { kind: "scenario_start" }, - consume: true, - }, - actions: [{ type: "checkpoint", name: "ready_snapshot" }], - target: { kind: "goto", state: "collecting" }, - }, - ], - }, - { - id: "collecting", - max_visits: 1, - deadline_ms: 5_000, - on: [ - { - id: "finish_all_sources", - priority: 0, - max_uses: 1, - when: { kind: "all", triggers: collectionTriggers() }, - actions: [], - target: { kind: "finish" }, - }, - ], - }, - ], - }, - }); -} - -// This is the single multi-source acceptance matrix for the process boundary. -itWithCaptureCapability( - "runs the committed multi-source reactive fixture deterministically", - async () => { - const root = await createTestTempDirectory("rea-reactive-e2e-"); - const script = fileURLToPath( - new URL("../../fixtures/processReactiveScenario.mjs", import.meta.url), - ); - const run = () => - captureProcessScenario(createMultiSourceScenario(root, script)); - try { - const first = await run(); - const second = await run(); - if (!first.ok) throw first.error; - if (!second.ok) throw second.error; - expect(first.ok).toBe(true); - expect(second.ok).toBe(true); - const trace = (capture: ProcessCapture) => - capture.reactive_run?.transitions.map((transition) => ({ - transition_id: transition.transition_id, - from: transition.state_before, - to: transition.state_after, - outcome: transition.outcome, - trigger_collections: transition.trigger_event_ids.map( - (id) => id.split(".")[1], - ), - })); - expect( - first.value.reactive_run?.outcome, - JSON.stringify({ - run: first.value.reactive_run, - processes: first.value.process_samples, - checkpoints: first.value.filesystem_checkpoints, - shims: first.value.shim_events, - protocols: first.value.protocol_events, - }), - ).toBe("passed"); - expect(trace(first.value)).toEqual(trace(second.value)); - expect(trace(first.value)).toEqual([ - expect.objectContaining({ transition_id: "checkpoint_ready" }), - expect.objectContaining({ - transition_id: "finish_all_sources", - trigger_collections: expect.arrayContaining([ - "frames", - "process_samples", - "filesystem_checkpoints", - "shim_events", - "protocol_events", - ]), - }), - ]); - for (const outcome of ["action_rejected", "target_lost"] as const) { - const failedActionCapture = { - ...first.value, - reactive_run: { - status: "finished" as const, - outcome, - active_state: "ready", - transitions: [], - controls: [], - }, - }; - expect( - processCaptureIssues(failedActionCapture).filter(({ path }) => - path.startsWith("reactive_run"), - ), - ).toEqual([]); - } - expect(first.value.truncated).toBe(false); - } finally { - await rm(root, { recursive: true, force: true }); - } - }, - 30_000, -); diff --git a/tests/boundary/process/processCaptureReactive.test.ts b/tests/boundary/process/processCaptureReactive.test.ts deleted file mode 100644 index 9ef351961..000000000 --- a/tests/boundary/process/processCaptureReactive.test.ts +++ /dev/null @@ -1,399 +0,0 @@ -import { rm, writeFile } from "node:fs/promises"; -import { dirname, join } from "node:path"; -import { expect } from "vitest"; -import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; -import { itWithCaptureCapability } from "./processCaptureCapability.js"; - -import { captureProcessScenario } from "../../../src/application/ProcessHarness.js"; -import { - parseProcessScenario, - type ProcessCapture, -} from "../../../src/domain/processCapture.js"; -import { processCaptureIssues } from "../../../src/domain/processCapture.fixture.js"; - -function createInteractiveScenario(root: string, script: string) { - return parseProcessScenario({ - executable: process.execPath, - arguments: [script], - working_directory: root, - reactive: { - initial_state: "waiting", - deadline_ms: 5_000, - states: [ - { - id: "waiting", - max_visits: 1, - deadline_ms: 2_000, - on: [ - { - id: "answer", - priority: 0, - max_uses: 1, - when: { - kind: "terminal_text", - literal: "Ready", - occurrence: 1, - since: { kind: "scenario_start" }, - consume: true, - }, - actions: [ - { type: "send_input", data: "accepted\n", sensitive: true }, - { type: "close_stdin" }, - ], - target: { kind: "goto", state: "finishing" }, - }, - ], - }, - { - id: "finishing", - max_visits: 1, - deadline_ms: 2_000, - on: [ - { - id: "complete", - priority: 0, - max_uses: 1, - when: { - kind: "terminal_text", - literal: "Done", - occurrence: 1, - since: { kind: "state_entry" }, - consume: true, - }, - actions: [], - target: { kind: "finish" }, - }, - ], - }, - ], - }, - }); -} - -function assertCompletedCapture(capture: ProcessCapture): void { - expect(capture.reactive_run).toMatchObject({ - status: "finished", - outcome: "passed", - active_state: "finishing", - }); - expect( - capture.reactive_run?.transitions.map(({ transition_id }) => transition_id), - ).toEqual(["answer", "complete"]); - expect(capture.interaction_events).toContainEqual( - expect.objectContaining({ - type: "input", - data: "", - outcome: "dispatched", - }), - ); - expect(capture.interaction_events).toContainEqual( - expect.objectContaining({ - type: "stdin_close", - data: "", - outcome: "dispatched", - }), - ); - expect(capture.frames.map(({ data }) => data).join("")).toContain("Done"); - expect(capture.manifest.comparison_contract).toHaveProperty("reactive"); - expect(JSON.stringify(capture.manifest.comparison_contract)).not.toContain( - "accepted", - ); - expect(JSON.stringify(capture.manifest.scenario)).not.toContain("accepted"); -} - -function assertControlAndTransitionValidation(capture: ProcessCapture): void { - const reactiveRun = capture.reactive_run; - if (reactiveRun === null) throw new Error("reactive result missing"); - const lastOrder = capture.event_journal - ?.filter(({ collection }) => - [ - "frames", - "interaction_events", - "filesystem_checkpoints", - "shim_events", - ].includes(collection), - ) - .at(-1)?.capture_order; - if (lastOrder === undefined) - throw new Error("reactive observation order missing"); - expect( - processCaptureIssues({ - ...capture, - reactive_run: { - ...reactiveRun, - controls: [ - ...reactiveRun.controls, - { - sequence: reactiveRun.controls.length, - kind: "target_lost", - after_capture_order: lastOrder, - }, - ], - }, - }), - ).toContainEqual( - expect.objectContaining({ - path: `reactive_run.controls[${String(reactiveRun.controls.length)}]`, - message: "reactive control cannot follow a finished run", - }), - ); - expect( - processCaptureIssues({ - ...capture, - reactive_run: { - ...reactiveRun, - transitions: reactiveRun.transitions.map((transition, index) => - index === 0 - ? { ...transition, transition_id: "fabricated" } - : transition, - ), - }, - }), - ).toContainEqual( - expect.objectContaining({ - path: "reactive_run.transitions[0]", - message: - "reactive transition is not declared by its recorded source state", - }), - ); - expect( - processCaptureIssues({ - ...capture, - reactive_run: { - status: "finished", - outcome: "passed", - active_state: "waiting", - transitions: [], - controls: [], - }, - }), - ).toContainEqual( - expect.objectContaining({ - path: "reactive_run.outcome", - message: "reactive outcome differs from deterministic journal replay", - }), - ); - const suffix = reactiveRun.transitions - .slice(1) - .map((transition, sequence) => ({ - ...transition, - sequence, - })); - expect( - processCaptureIssues({ - ...capture, - reactive_run: { ...reactiveRun, transitions: suffix }, - }), - ).toContainEqual( - expect.objectContaining({ - path: "reactive_run.transitions[0].state_before", - message: - "reactive transition journal must start at the declared initial state", - }), - ); -} - -function assertReplayValidation(capture: ProcessCapture): void { - const reactiveRun = capture.reactive_run; - if (reactiveRun === null) throw new Error("reactive result missing"); - expect( - processCaptureIssues({ - ...capture, - reactive_run: { - ...reactiveRun, - transitions: reactiveRun.transitions.map((transition, index) => - index === 0 - ? { ...transition, trigger_event_ids: [], action_event_ids: [] } - : transition, - ), - }, - }), - ).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - path: "reactive_run.transitions", - message: expect.stringContaining( - "reactive transition journal is not reproduced", - ), - }), - expect.objectContaining({ - path: "reactive_run.transitions[0].action_event_ids", - message: expect.stringContaining( - "recorded action observations do not match proposed effects", - ), - }), - ]), - ); - expect( - processCaptureIssues({ - ...capture, - reactive_run: { ...reactiveRun, status: "running", outcome: null }, - }), - ).toContainEqual( - expect.objectContaining({ - message: "completed capture requires a finished reactive outcome", - }), - ); - expect( - processCaptureIssues({ - ...capture, - reactive_run: { - ...reactiveRun, - transitions: [ - reactiveRun.transitions[0]!, - { ...reactiveRun.transitions[0]!, sequence: 1 }, - ], - }, - }), - ).toEqual( - expect.arrayContaining([ - expect.objectContaining({ - message: "reactive transition states must be contiguous", - }), - expect.objectContaining({ - message: - "reactive transition differs from deterministic journal replay", - }), - ]), - ); -} - -itWithCaptureCapability( - "drives a process from terminal observations and retains the reactive transition journal", - async () => { - const root = await createTestTempDirectory("rea-reactive-harness-test-"); - const script = join(root, "reactive.mjs"); - await writeFile( - script, - [ - 'import { createInterface } from "node:readline";', - "const input = createInterface({ input: process.stdin, terminal: false });", - 'process.stdout.write("Ready\\n");', - 'input.once("line", () => { process.stdout.write("Done\\n"); input.close(); });', - ].join("\n"), - ); - const scenario = createInteractiveScenario(root, script); - try { - const result = await captureProcessScenario(scenario); - if (!result.ok) throw result.error; - assertCompletedCapture(result.value); - assertControlAndTransitionValidation(result.value); - assertReplayValidation(result.value); - } finally { - await rm(root, { recursive: true, force: true }); - } - }, -); - -itWithCaptureCapability( - "records target loss before post-exit settlement can win the deadline race", - async () => { - const root = await createTestTempDirectory( - "rea-reactive-target-loss-test-", - ); - const script = join(root, "exit.mjs"); - await writeFile(script, 'process.stdout.write("exiting\\n");\n'); - const scenario = parseProcessScenario({ - executable: process.execPath, - arguments: [script], - working_directory: root, - settle_ms: 500, - reactive: { - initial_state: "waiting", - deadline_ms: 5_000, - states: [ - { - id: "waiting", - max_visits: 1, - // Leave process startup scheduling headroom; this test targets - // post-exit settlement ordering, not a 300ms startup deadline. - deadline_ms: 2_000, - on: [ - { - id: "unreachable", - priority: 0, - max_uses: 1, - when: { - kind: "terminal_text", - literal: "never-produced", - occurrence: 1, - since: { kind: "scenario_start" }, - consume: true, - }, - actions: [], - target: { kind: "finish" }, - }, - ], - }, - ], - }, - }); - try { - const result = await captureProcessScenario(scenario); - expect(result.ok).toBe(true); - if (!result.ok) throw result.error; - expect(result.value.reactive_run).toMatchObject({ - status: "finished", - outcome: "target_lost", - active_state: "waiting", - transitions: [], - controls: [ - expect.objectContaining({ - kind: "target_lost", - }), - ], - }); - const frame = result.value.frames.at(-1); - const journal = result.value.event_journal; - const reactiveRun = result.value.reactive_run; - if (frame === undefined || journal === undefined || reactiveRun === null) - throw new Error("ordered reactive evidence missing"); - const laterCaptureOrder = journal.length; - const withLaterMatch = { - ...result.value, - frames: [ - ...result.value.frames, - { - ...frame, - sequence: result.value.frames.length, - at_ms: frame.at_ms + 1, - data: "never-produced", - }, - ], - event_journal: [ - ...journal, - { - capture_order: laterCaptureOrder, - collection: "frames" as const, - index: result.value.frames.length, - }, - ], - }; - expect( - processCaptureIssues(withLaterMatch).filter(({ path }) => - path.startsWith("reactive_run"), - ), - ).toEqual([]); - expect( - processCaptureIssues({ - ...withLaterMatch, - reactive_run: { - ...reactiveRun, - controls: reactiveRun.controls.map((control) => ({ - ...control, - after_capture_order: laterCaptureOrder, - })), - }, - }), - ).toContainEqual( - expect.objectContaining({ - path: "reactive_run.outcome", - message: "reactive outcome differs from deterministic journal replay", - }), - ); - } finally { - await rm(root, { recursive: true, force: true }); - } - }, - 10_000, -); diff --git a/tests/boundary/process/processCaptureReplayMachine.test.ts b/tests/boundary/process/processCaptureReplayMachine.test.ts deleted file mode 100644 index 8bc6753f2..000000000 --- a/tests/boundary/process/processCaptureReplayMachine.test.ts +++ /dev/null @@ -1,215 +0,0 @@ -import { readFile, rm, writeFile } from "node:fs/promises"; -import { dirname, join } from "node:path"; -import { expect } from "vitest"; -import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; -import { itWithCaptureCapability } from "./processCaptureCapability.js"; - -import { captureProcessScenario } from "../../../src/application/ProcessHarness.js"; -import { - digestProcessCommitment, - parseProcessScenario, -} from "../../../src/domain/processCapture.js"; - -itWithCaptureCapability( - "runs a login and reconnect replay machine inside process capture", - async () => { - const root = await createTestTempDirectory("rea-replay-machine-test-"); - const script = join(root, "client.mjs"); - await writeFile( - script, - [ - 'const token = "machine-secret";', - 'await fetch(`${process.env.REA_REPLAY_HTTP_URL}/login`, { method: "POST", body: JSON.stringify({ token }) });', - "const api = await fetch(`${process.env.REA_REPLAY_HTTP_URL}/api`, { headers: { authorization: token } });", - 'if (await api.text() !== "connect") throw new Error("bad API response");', - "const connect = (acknowledge) => new Promise((resolve, reject) => {", - " const socket = new WebSocket(process.env.REA_REPLAY_WEBSOCKET_URL);", - " socket.addEventListener('error', reject);", - " socket.addEventListener('message', (event) => {", - " if (acknowledge) socket.send('ack');", - " else { console.log(`reply:${event.data}`); socket.close(); resolve(); }", - " });", - " if (acknowledge) socket.addEventListener('close', () => resolve());", - "});", - "await connect(true);", - "await connect(false);", - ].join("\n"), - ); - const scenario = parseProcessScenario({ - executable: process.execPath, - arguments: [script], - working_directory: root, - replay: { - machine: { - initial_state: "login", - states: [ - { name: "login" }, - { name: "api" }, - { name: "socket" }, - { name: "ack" }, - { name: "reconnect" }, - { name: "complete", terminal: true }, - ], - transitions: [ - { - id: "login", - from: "login", - to: "api", - trigger: { protocol: "http", method: "POST", path: "/login" }, - captures: [ - { - variable: "token", - value: { source: "request_json", path: ["token"] }, - sensitive: true, - }, - ], - actions: [{ type: "http_response", status: 204, body: "" }], - max_uses: 1, - }, - { - id: "api", - from: "api", - to: "socket", - trigger: { protocol: "http", method: "GET", path: "/api" }, - guards: [ - { - variable: "token", - value: { source: "request_header", name: "authorization" }, - }, - ], - actions: [ - { type: "http_response", status: 200, body: "connect" }, - ], - max_uses: 1, - }, - { - id: "initial_socket", - from: "socket", - to: "ack", - trigger: { protocol: "websocket_connect", path: "/ws" }, - actions: [{ type: "websocket_send", data: "welcome" }], - max_uses: 1, - }, - { - id: "ack", - from: "ack", - to: "reconnect", - trigger: { - protocol: "websocket_message", - path: "/ws", - body: "ack", - }, - actions: [{ type: "disconnect" }], - max_uses: 1, - }, - { - id: "reconnect", - from: "reconnect", - to: "complete", - trigger: { protocol: "websocket_connect", path: "/ws" }, - actions: [{ type: "websocket_send", data: "done" }], - max_uses: 1, - }, - ], - max_transitions: 5, - }, - }, - }); - try { - const capture = await captureProcessScenario(scenario); - expect(capture.ok).toBe(true); - if (!capture.ok) throw capture.error; - expect( - capture.value.replay_transitions.map( - ({ transition_id }) => transition_id, - ), - ).toEqual(["login", "api", "initial_socket", "ack", "reconnect"]); - expect(capture.value.frames.map(({ data }) => data).join("")).toContain( - "reply:done", - ); - expect(JSON.stringify(capture.value)).not.toContain("machine-secret"); - expect(capture.value.manifest.replay_plan_sha256).toBe( - digestProcessCommitment(scenario.replay), - ); - expect( - capture.value.event_journal?.filter( - ({ collection }) => collection === "replay_transitions", - ), - ).toHaveLength(capture.value.replay_transitions.length); - for (const [index, entry] of ( - capture.value.event_journal ?? [] - ).entries()) - if (entry.collection === "replay_transitions") - expect(capture.value.event_journal?.[index - 1]?.collection).toBe( - "protocol_events", - ); - } finally { - await rm(root, { recursive: true, force: true }); - } - }, - 20_000, -); - -itWithCaptureCapability( - "captures PTY, filesystem, descendants, and HTTP replay with local values", - async () => { - const root = await createTestTempDirectory("rea-harness-test-"); - const script = join(root, "fixture.mjs"); - await writeFile( - script, - [ - 'import { writeFile } from "node:fs/promises";', - 'import { spawn } from "node:child_process";', - 'await writeFile(new URL("result.txt", `file://${process.cwd()}/`), "created");', - "const response = await fetch(`${process.env.REA_REPLAY_HTTP_URL}/probe`);", - "console.log(`reply:${await response.text()}`);", - "console.log(`sensitive:${process.env.SECRET}`);", - 'const child = spawn(process.execPath, ["-e", "setTimeout(()=>{}, 150)"], { stdio: "ignore" });', - "await new Promise((resolve) => setTimeout(resolve, 80));", - "child.kill();", - ].join("\n"), - ); - const scenario = parseProcessScenario({ - executable: process.execPath, - arguments: [script], - working_directory: root, - filesystem_observation_paths: [root], - environment: { SECRET: "do-not-record" }, - replay: { - http: [{ method: "GET", path: "/probe", status: 200, body: "ok" }], - }, - }); - try { - const capture = await captureProcessScenario(scenario); - expect(capture.ok).toBe(true); - if (!capture.ok) throw capture.error; - expect( - capture.value.frames.map((frame) => frame.data).join(""), - ).toContain("reply:ok"); - expect( - capture.value.frames.map((frame) => frame.data).join(""), - ).toContain("sensitive:do-not-record"); - expect( - capture.value.files_after.some((file) => - file.path.endsWith("result.txt"), - ), - ).toBe(true); - expect( - capture.value.filesystem_effects.some( - (effect) => - effect.path.endsWith(":result.txt") && effect.status === "created", - ), - ).toBe(true); - expect( - capture.value.protocol_events.some( - (event) => event.protocol === "http" && event.path === "/probe", - ), - ).toBe(true); - expect(JSON.stringify(capture.value)).toContain("do-not-record"); - expect(await readFile(join(root, "result.txt"), "utf8")).toBe("created"); - expect(JSON.stringify(capture.value.files_after)).not.toContain(root); - } finally { - await rm(root, { recursive: true, force: true }); - } - }, -); diff --git a/tests/boundary/process/processCaptureReplayTransport.test.ts b/tests/boundary/process/processCaptureReplayTransport.test.ts deleted file mode 100644 index a625baa0d..000000000 --- a/tests/boundary/process/processCaptureReplayTransport.test.ts +++ /dev/null @@ -1,380 +0,0 @@ -import { expect, it, vi } from "vitest"; -import WebSocket from "ws"; - -import { startLoopbackReplay } from "../../../src/application/LoopbackReplay.js"; -import { parseProcessScenario } from "../../../src/domain/processCapture.js"; - -it("serves bounded HTTP and WebSocket replay on loopback", async () => { - const scenario = parseProcessScenario({ - executable: "/bin/sh", - working_directory: "/tmp", - replay: { - http: [{ method: "GET", path: "/ready", status: 201, body: "ready" }], - websocket_messages: ["welcome"], - }, - }); - const replay = await startLoopbackReplay(scenario); - try { - const response = await fetch(`${replay.httpUrl}/ready`); - expect(response.status).toBe(201); - expect(await response.text()).toBe("ready"); - const websocketMessage = await new Promise( - (resolveMessage, rejectMessage) => { - const socket = new WebSocket(replay.websocketUrl); - socket.once("message", (value) => { - resolveMessage(value.toString()); - socket.close(); - }); - socket.once("error", rejectMessage); - }, - ); - expect(websocketMessage).toBe("welcome"); - expect(replay.events.map((event) => event.protocol)).toContain("websocket"); - } finally { - await replay.close(); - } -}); - -it("matches and records the full HTTP request target including its query", async () => { - const scenario = parseProcessScenario({ - executable: "/bin/sh", - working_directory: "/tmp", - replay: { - http: [ - { method: "GET", path: "/item?id=1", status: 200, body: "matched" }, - ], - }, - }); - const replay = await startLoopbackReplay(scenario); - try { - const matched = await fetch(`${replay.httpUrl}/item?id=1`); - expect(matched.status).toBe(200); - expect(await matched.text()).toBe("matched"); - const differentQuery = await fetch(`${replay.httpUrl}/item?id=2`); - expect(differentQuery.status).toBe(404); - expect( - replay.events - .filter(({ direction }) => direction === "request") - .map(({ path }) => path), - ).toEqual(["/item?id=1", "/item?id=2"]); - } finally { - await replay.close(); - } -}); - -it("matches bounded HTTP scripts without persisting request secrets", async () => { - const scenario = parseProcessScenario({ - executable: "/bin/sh", - working_directory: "/tmp", - replay: { - http: [ - { - method: "POST", - path: "/callback", - request_headers: { authorization: "Bearer fixture-secret" }, - request_body: "credential-body", - status: 302, - response_headers: { location: "/done" }, - body: "redirecting", - max_calls: 1, - }, - { - method: "GET", - path: "/disconnect", - status: 200, - body: "", - disconnect: true, - }, - ], - }, - }); - const replay = await startLoopbackReplay(scenario); - try { - const request = () => - fetch(`${replay.httpUrl}/callback`, { - method: "POST", - headers: { authorization: "Bearer fixture-secret" }, - body: "credential-body", - redirect: "manual", - }); - const matched = await request(); - expect(matched.status).toBe(302); - expect(matched.headers.get("location")).toBe("/done"); - expect((await request()).status).toBe(409); - expect((await fetch(`${replay.httpUrl}/missing`)).status).toBe(404); - await expect(fetch(`${replay.httpUrl}/disconnect`)).rejects.toThrow(); - expect(replay.events.map(({ outcome }) => outcome)).toEqual( - expect.arrayContaining([ - "matched", - "script_exhausted", - "unmatched", - "disconnected", - ]), - ); - expect(JSON.stringify(replay.events)).not.toContain("fixture-secret"); - expect(JSON.stringify(replay.events)).not.toContain("credential-body"); - } finally { - await replay.close(); - } -}); - -it("keeps long replay delays pending and cancels them when replay closes", async () => { - const scenario = parseProcessScenario({ - executable: "/bin/sh", - working_directory: "/tmp", - replay: { - http: [ - { - method: "GET", - path: "/later", - status: 200, - body: "ready", - delay_ms: 2_147_483_648, - }, - ], - }, - }); - const replay = await startLoopbackReplay(scenario); - const response = fetch(`${replay.httpUrl}/later`); - try { - await vi.waitFor(() => { - expect( - replay.events.some(({ direction }) => direction === "request"), - ).toBe(true); - }); - await replay.close(); - await expect(response).resolves.toMatchObject({ status: 200 }); - } finally { - await replay.close(); - } -}); - -it("consumes ordered WebSocket reconnect scripts and reports exhaustion", async () => { - const scenario = parseProcessScenario({ - executable: "/bin/sh", - working_directory: "/tmp", - replay: { - websocket_connections: [ - { - messages: [{ data: "first", delay_ms: 1 }], - disconnect_after: true, - }, - { - messages: [{ data: "second" }], - disconnect_after: true, - }, - ], - }, - }); - const replay = await startLoopbackReplay(scenario); - const receive = () => - new Promise((resolveMessage, rejectMessage) => { - const socket = new WebSocket(replay.websocketUrl); - socket.once("message", (value) => resolveMessage(value.toString())); - socket.once("error", rejectMessage); - }); - try { - await expect(receive()).resolves.toBe("first"); - await expect(receive()).resolves.toBe("second"); - await new Promise((resolveClose, rejectClose) => { - const socket = new WebSocket(replay.websocketUrl); - socket.once("close", () => resolveClose()); - socket.once("error", rejectClose); - }); - expect(replay.events.at(-1)?.outcome).toBe("script_exhausted"); - } finally { - await replay.close(); - } -}); - -it("serializes WebSocket transition actions across rapid messages", async () => { - const scenario = parseProcessScenario({ - executable: "/bin/sh", - working_directory: "/tmp", - replay: { - machine: { - initial_state: "connecting", - states: [ - { name: "connecting" }, - { name: "first" }, - { name: "second" }, - { name: "complete", terminal: true }, - ], - transitions: [ - { - id: "connect", - from: "connecting", - to: "first", - trigger: { protocol: "websocket_connect", path: "/ws" }, - actions: [{ type: "websocket_send", data: "ready" }], - max_uses: 1, - }, - { - id: "first", - from: "first", - to: "second", - trigger: { - protocol: "websocket_message", - path: "/ws", - body: "first", - }, - actions: [ - { type: "delay", duration_ms: 30 }, - { type: "websocket_send", data: "first-done" }, - ], - max_uses: 1, - }, - { - id: "second", - from: "second", - to: "complete", - trigger: { - protocol: "websocket_message", - path: "/ws", - body: "second", - }, - actions: [{ type: "websocket_send", data: "second-done" }], - max_uses: 1, - }, - ], - max_transitions: 3, - }, - }, - }); - const replay = await startLoopbackReplay(scenario); - try { - const messages = await new Promise((resolve, reject) => { - const received: string[] = []; - const socket = new WebSocket(replay.websocketUrl); - socket.on("message", (value) => { - received.push(value.toString()); - if (received.length === 1) { - socket.send("first"); - socket.send("second"); - } - if (received.length === 3) { - socket.close(); - resolve(received); - } - }); - socket.once("error", reject); - }); - expect(messages).toEqual(["ready", "first-done", "second-done"]); - } finally { - await replay.close(); - } -}); - -it("drains queued machine work before exposing finalized snapshots", async () => { - const scenario = parseProcessScenario({ - executable: "/bin/sh", - working_directory: "/tmp", - replay: { - machine: { - initial_state: "connecting", - states: [ - { name: "connecting" }, - { name: "first" }, - { name: "second" }, - { name: "complete", terminal: true }, - ], - transitions: [ - { - id: "connect", - from: "connecting", - to: "first", - trigger: { protocol: "websocket_connect", path: "/ws" }, - actions: [{ type: "websocket_send", data: "ready" }], - max_uses: 1, - }, - { - id: "first", - from: "first", - to: "second", - trigger: { - protocol: "websocket_message", - path: "/ws", - body: "first", - }, - actions: [ - { type: "delay", duration_ms: 30 }, - { type: "disconnect" }, - ], - max_uses: 1, - }, - { - id: "second", - from: "second", - to: "complete", - trigger: { - protocol: "websocket_message", - path: "/ws", - body: "second", - }, - actions: [{ type: "websocket_send", data: "done" }], - max_uses: 1, - }, - ], - max_transitions: 3, - }, - }, - }); - const replay = await startLoopbackReplay(scenario); - await new Promise((resolve, reject) => { - const socket = new WebSocket(replay.websocketUrl); - socket.once("message", () => { - socket.send("first"); - socket.send("second"); - setTimeout(resolve, 5); - }); - socket.once("error", reject); - }); - - await replay.close(); - const finalized = replay.transitions; - expect(finalized.map(({ transition_id }) => transition_id)).toEqual([ - "connect", - "first", - "second", - ]); - await new Promise((resolve) => setTimeout(resolve, 40)); - expect(replay.transitions).toEqual(finalized); -}); - -it("enforces replay duration before normalizing recorded timestamps", async () => { - const scenario = parseProcessScenario({ - executable: "/bin/sh", - working_directory: "/tmp", - normalization: { time_bucket_ms: 60_000 }, - replay: { - machine: { - initial_state: "waiting", - states: [{ name: "waiting" }, { name: "complete", terminal: true }], - transitions: [ - { - id: "late", - from: "waiting", - to: "complete", - trigger: { protocol: "http", method: "GET", path: "/late" }, - actions: [{ type: "http_response", status: 200, body: "late" }], - max_uses: 1, - }, - ], - max_transitions: 1, - limits: { duration_ms: 5 }, - }, - }, - }); - const replay = await startLoopbackReplay(scenario); - try { - await new Promise((resolve) => setTimeout(resolve, 20)); - const response = await fetch(`${replay.httpUrl}/late`); - expect(response.status).toBe(409); - expect(replay.events.at(-1)).toMatchObject({ - at_ms: 0, - outcome: "limit_exhausted", - }); - } finally { - await replay.close(); - } -}); diff --git a/tests/boundary/process/processCaptureTerminal.test.ts b/tests/boundary/process/processCaptureTerminal.test.ts index 1d00dbec2..028dd94fd 100644 --- a/tests/boundary/process/processCaptureTerminal.test.ts +++ b/tests/boundary/process/processCaptureTerminal.test.ts @@ -1,5 +1,5 @@ import { rm, writeFile } from "node:fs/promises"; -import { dirname, join } from "node:path"; +import { join } from "node:path"; import { expect, it } from "vitest"; import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; @@ -9,170 +9,43 @@ import { } from "../../../src/application/ProcessHarness.js"; import { parseProcessScenario } from "../../../src/domain/processCapture.js"; -const buildTerminalScenario = (root: string, script: string) => - parseProcessScenario({ - executable: process.execPath, - arguments: [script], - working_directory: root, - filesystem_observation_paths: [root], - normalization: { paths: true }, - checkpoints: [ - { - name: "probe_seen", - trigger: { type: "terminal_literal", value: "probe:codex 1.2.3" }, - }, - ], - command_shims: [ - { - name: "codex", - routes: [ - { - arguments: ["--version"], - outputs: [{ at_ms: 0, stream: "stdout", data: "codex 1.2.3\n" }], - termination: { type: "exit", code: 0 }, - }, - ], - }, - { - name: "node", - routes: [ - { - arguments: ["--version"], - outputs: [{ at_ms: 0, stream: "stdout", data: "node 9.8.7\n" }], - termination: { type: "exit", code: 0 }, - }, - ], - }, - ], - reactive: { - initial_state: "waiting_for_shim", - deadline_ms: 5_000, - states: [ - { - id: "waiting_for_shim", - max_visits: 1, - deadline_ms: 2_000, - on: [ - { - id: "record_shim", - priority: 0, - max_uses: 1, - when: { - kind: "event", - source: "shim", - exact: { - command: "codex", - route_index: 0, - arguments: ["--version"], - working_directory: "", - outcome: "matched", - }, - ignore_fields: ["sequence", "at_ms"], - since: { kind: "scenario_start" }, - consume: true, - cardinality: { min: 1, max: 1 }, - }, - actions: [{ type: "checkpoint", name: "reactive_shim_seen" }], - target: { - kind: "goto", - state: "waiting_for_checkpoint", - }, - }, - ], - }, - { - id: "waiting_for_checkpoint", - max_visits: 1, - deadline_ms: 2_000, - on: [ - { - id: "finish_checkpoint", - priority: 0, - max_uses: 1, - when: { - kind: "event", - source: "filesystem", - exact: { - name: "reactive_shim_seen", - truncated: false, - }, - ignore_fields: ["at_ms", "files", "effects"], - since: { kind: "scenario_start" }, - consume: true, - cardinality: { min: 1, max: 1 }, - }, - actions: [], - target: { kind: "finish" }, - }, - ], - }, - ], - }, - }); - -// The assertions share one captured process and therefore one cleanup scope. -it("renders terminal state, records shim invocations, and captures literal checkpoints", async () => { - const root = await createTestTempDirectory("rea-v3-test-"); - const script = join(root, "scenario.mjs"); +it("captures one command's terminal output, selected files, and owned cleanup", async () => { + const root = await createTestTempDirectory("rea-process-capture-"); + const script = join(root, "task.mjs"); await writeFile( script, [ - 'import { spawnSync } from "node:child_process";', - 'const result = spawnSync("codex", ["--version"], { encoding: "utf8" });', - 'const node = spawnSync("node", ["--version"], { encoding: "utf8" });', - "process.stdout.write(`probe:${result.stdout}`);", - "process.stdout.write(`runtime:${node.stdout}`);", + 'import { writeFile } from "node:fs/promises";', + "process.stdout.write(`value:${process.env.CAPTURE_VALUE}\\n`);", + 'await writeFile("state.txt", "created");', ].join("\n"), ); try { const capability = await probeProcessCaptureCapability(); if (!capability.available) return; const result = await captureProcessScenario( - buildTerminalScenario(root, script), + parseProcessScenario({ + executable: process.execPath, + arguments: [script], + working_directory: root, + environment: { CAPTURE_VALUE: "caller-selected" }, + filesystem_observation_paths: ["."], + }), ); expect(result.ok).toBe(true); if (!result.ok) throw result.error; - expect(result.value.rendered_frames.at(-1)?.lines.join("\n")).toContain( - "probe:codex 1.2.3", + expect(result.value.frames.map(({ data }) => data).join("")).toContain( + "value:caller-selected", ); - expect(result.value.shim_events).toEqual([ - expect.objectContaining({ - command: "codex", - arguments: ["--version"], - outcome: "matched", - }), - expect.objectContaining({ - command: "node", - arguments: ["--version"], - outcome: "matched", - }), - ]); - expect(result.value.filesystem_checkpoints.map(({ name }) => name)).toEqual( - expect.arrayContaining([ - "before", - "reactive_shim_seen", - "probe_seen", - "after_settlement", - ]), + expect(result.value.files_after).toContainEqual( + expect.objectContaining({ path: "root_0:state.txt" }), ); - expect(result.value.reactive_run).toMatchObject({ - status: "finished", - outcome: "passed", - transitions: [ - expect.objectContaining({ - transition_id: "record_shim", - trigger_event_ids: ["obs.shim_events.0"], - action_event_ids: [ - expect.stringMatching(/^obs\.filesystem_checkpoints\./u), - ], - }), - expect.objectContaining({ - transition_id: "finish_checkpoint", - trigger_event_ids: [ - expect.stringMatching(/^obs\.filesystem_checkpoints\./u), - ], - }), - ], + expect(result.value.filesystem_effects).toContainEqual( + expect.objectContaining({ status: "created", path: "root_0:state.txt" }), + ); + expect(result.value.cleanup).toEqual({ + owned_process_group: "verified", + temporary_root: "removed", }); } finally { await rm(root, { recursive: true, force: true }); diff --git a/tests/boundary/process/runtimeExecutableDiagnostics.test.ts b/tests/boundary/process/runtimeExecutableDiagnostics.test.ts deleted file mode 100644 index ce617d4b4..000000000 --- a/tests/boundary/process/runtimeExecutableDiagnostics.test.ts +++ /dev/null @@ -1,202 +0,0 @@ -import { chmod, rm, symlink, writeFile } from "node:fs/promises"; -import { delimiter, join } from "node:path"; - -import { afterEach, describe, expect, it } from "vitest"; - -import { createTestTempDirectory } from "../../fixtures/temporaryDirectory.js"; - -import { inspectRuntimeExecutables } from "../../../src/application/RuntimeExecutableDiagnostics.js"; - -const roots: string[] = []; - -afterEach(async () => { - await Promise.all( - roots.splice(0).map((root) => rm(root, { recursive: true, force: true })), - ); -}); - -describe("runtime executable diagnostics", () => { - it("preserves lexical and canonical identities for duplicate healthy runtimes", async () => { - const first = await temporaryRoot(); - const second = await temporaryRoot(); - await symlink(process.execPath, join(first, "node")); - await symlink(process.execPath, join(second, "node")); - - const inventory = await inspectRuntimeExecutables({ - platform: process.platform, - path: [first, second].join(delimiter), - launcherNode: process.execPath, - }); - const pathNodes = inventory.candidates.filter( - ({ tool, path_index: pathIndex }) => - tool === "node" && pathIndex !== null, - ); - - expect(pathNodes).toHaveLength(2); - expect(pathNodes.map(({ selection }) => selection)).toEqual([ - "path-primary", - "path-shadowed", - ]); - expect(new Set(pathNodes.map(({ canonical_path: path }) => path))).toEqual( - new Set([process.execPath]), - ); - expect(pathNodes.every(({ healthy }) => healthy)).toBe(true); - }); - - it("distinguishes a healthy primary runtime from a broken shadowed candidate", async () => { - const healthy = await temporaryRoot(); - const broken = await temporaryRoot(); - await symlink(process.execPath, join(healthy, "node")); - await executable( - join(broken, "node"), - "#!/bin/sh\necho broken-runtime >&2\nexit 17\n", - ); - - const inventory = await inspectRuntimeExecutables({ - platform: process.platform, - path: [healthy, broken].join(delimiter), - launcherNode: process.execPath, - }); - const pathNodes = inventory.candidates.filter( - ({ tool, path_index: pathIndex }) => - tool === "node" && pathIndex !== null, - ); - - expect(pathNodes[0]).toMatchObject({ - healthy: true, - selection: "path-primary", - }); - expect(pathNodes[1]).toMatchObject({ - healthy: false, - selection: "path-shadowed", - failure: { - code: "runtime_nonzero_exit", - exit_code: 17, - stderr: "broken-runtime", - }, - }); - }); - - it("classifies a macOS dynamic-loader failure and names the dependency", async () => { - const root = await temporaryRoot(); - await executable( - join(root, "node"), - "#!/bin/sh\necho 'dyld: Library not loaded: /opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib' >&2\nexit 134\n", - ); - - const inventory = await inspectRuntimeExecutables({ - platform: "darwin", - path: root, - launcherNode: process.execPath, - }); - const candidate = inventory.candidates.find( - ({ tool, path_index: pathIndex }) => tool === "node" && pathIndex === 0, - ); - - expect(candidate).toMatchObject({ - healthy: false, - failure: { - code: "runtime_dynamic_library_missing", - dependency: "/opt/homebrew/opt/simdjson/lib/libsimdjson.29.dylib", - }, - }); - }); - - it("probes env shebangs under the diagnosed PATH", async () => { - const root = await temporaryRoot(); - await symlink(process.execPath, join(root, "node")); - await executable( - join(root, "npm"), - "#!/usr/bin/env node\nconsole.log('npm-under-effective-path')\n", - ); - - const inventory = await inspectRuntimeExecutables({ - platform: process.platform, - path: root, - launcherNode: process.execPath, - }); - const npm = inventory.candidates.find(({ tool }) => tool === "npm"); - - expect(npm).toMatchObject({ - healthy: true, - version: "npm-under-effective-path", - selection: "path-primary", - }); - }); - - it("classifies a bounded probe timeout before its kill signal", async () => { - const root = await temporaryRoot(); - await executable(join(root, "node"), "#!/bin/sh\nwhile :; do :; done\n"); - - const inventory = await inspectRuntimeExecutables({ - platform: process.platform, - path: root, - launcherNode: process.execPath, - timeoutMs: 20, - }); - const candidate = inventory.candidates.find( - ({ tool, path_index: pathIndex }) => tool === "node" && pathIndex === 0, - ); - - expect(candidate).toMatchObject({ - healthy: false, - failure: { code: "runtime_timeout", signal: "SIGTERM" }, - }); - }); -}); - -describe("complete runtime diagnostics", () => { - it("reports every PATH candidate", async () => { - const directories = await Promise.all( - Array.from({ length: 17 }, () => temporaryRoot()), - ); - await Promise.all( - directories.map((directory) => - symlink(process.execPath, join(directory, "node")), - ), - ); - - const inventory = await inspectRuntimeExecutables({ - platform: process.platform, - path: directories.join(delimiter), - launcherNode: process.execPath, - }); - - expect( - inventory.candidates.filter( - ({ tool, path_index: pathIndex }) => - tool === "node" && pathIndex !== null, - ), - ).toHaveLength(17); - }); - - it("preserves complete diagnostics", async () => { - const root = await temporaryRoot(); - await executable( - join(root, "node"), - "#!/bin/sh\nprintf '%070000d' 0 >&2\nexit 17\n", - ); - - const inventory = await inspectRuntimeExecutables({ - platform: process.platform, - path: root, - launcherNode: process.execPath, - }); - const candidate = inventory.candidates.find( - ({ tool, path_index: pathIndex }) => tool === "node" && pathIndex === 0, - ); - - expect(candidate?.failure?.stderr).toHaveLength(70_000); - }); -}); - -const temporaryRoot = async (): Promise => { - const root = await createTestTempDirectory("rea-runtime-diagnostics-"); - roots.push(root); - return root; -}; - -const executable = async (path: string, source: string): Promise => { - await writeFile(path, source); - await chmod(path, 0o700); -}; diff --git a/tests/boundary/providers/hopper/hopperBridgeFacade.test.ts b/tests/boundary/providers/hopper/hopperBridgeFacade.test.ts index 3bbf89677..796516023 100644 --- a/tests/boundary/providers/hopper/hopperBridgeFacade.test.ts +++ b/tests/boundary/providers/hopper/hopperBridgeFacade.test.ts @@ -3,6 +3,7 @@ import { promisify } from "node:util"; import { describe, expect, it } from "vitest"; import { z } from "zod"; +import { OFFICIAL_TOOL_CONTRACTS } from "../../../../src/contracts/toolContracts.js"; const execute = promisify(execFile); const bridgePath = new URL( @@ -21,12 +22,42 @@ const probeResultSchema = z.strictObject({ }), current_document: z.literal("fixture"), current_address: z.literal("0x401000"), + containing_procedure: z.strictObject({ + query_address: z.literal("0x401000"), + found: z.literal(true), + procedure: z.strictObject({ + address: z.literal("0x401000"), + name: z.literal("fixture-procedure"), + classification: z.null(), + body: z.strictObject({ + available: z.literal(false), + reason: z.string(), + }), + }), + }), + procedure_info: z.strictObject({ + name: z.literal("fixture-procedure"), + entrypoint: z.literal("0x401000"), + basicblock_count: z.literal(1), + length: z.number(), + signature: z.literal("int fixture-procedure()"), + locals: z.array(z.unknown()), + classification: z.null(), + body: z.strictObject({ + available: z.literal(false), + reason: z.string(), + }), + }), strings: z.strictObject({ "0x401234": z.literal("fixture string") }), procedure_references: z.strictObject({ procedure: z.strictObject({ address: z.literal("0x401000"), name: z.literal("fixture-procedure"), classification: z.null(), + body: z.strictObject({ + available: z.literal(false), + reason: z.string(), + }), }), direction: z.literal("outgoing"), reference_kinds_available: z.literal(false), @@ -117,6 +148,19 @@ describe("Hopper API facade", () => { }, ); const result = probeResultSchema.parse(JSON.parse(stdout)); + for (const [name, value] of [ + ["resolve_containing_procedure", result.containing_procedure], + ["procedure_references", result.procedure_references], + ["procedure_info", result.procedure_info], + ] as const) { + const contract = OFFICIAL_TOOL_CONTRACTS.find( + (candidate) => candidate.name === name, + ); + if (contract === undefined) throw new Error(`missing ${name} contract`); + const parsed = contract.outputSchema.shape.result.safeParse(value); + if (!parsed.success) throw new Error(`${name}: ${parsed.error.message}`); + expect(parsed.success, name).toBe(true); + } expect(result.provider_faults.map((reply) => reply.error.message)).toEqual([ "TypeError: Hopper bridge operation failed", "ValueError: Hopper bridge operation failed", @@ -168,12 +212,45 @@ describe("Hopper API facade", () => { address: "0x401000", name: "fixture-procedure", classification: null, + body: { + available: false, + reason: + "Hopper's public Python API does not expose complete function body ranges", + }, }, direction: "outgoing", reference_kinds_available: false, unresolved_calls: [], references: [], }); + expect(result.containing_procedure).toEqual({ + query_address: "0x401000", + found: true, + procedure: { + address: "0x401000", + name: "fixture-procedure", + classification: null, + body: { + available: false, + reason: + "Hopper's public Python API does not expose complete function body ranges", + }, + }, + }); + expect(result.procedure_info).toEqual({ + name: "fixture-procedure", + entrypoint: "0x401000", + basicblock_count: 1, + length: 4, + signature: "int fixture-procedure()", + locals: [], + classification: null, + body: { + available: false, + reason: + "Hopper's public Python API does not expose complete function body ranges", + }, + }); expect(stdout).not.toContain("supersecret"); expect(result.analysis_guard.message).toContain( "requires completed Hopper background analysis", diff --git a/tests/boundary/providers/replay/javascriptReplay.test.ts b/tests/boundary/providers/replay/javascriptReplay.test.ts deleted file mode 100644 index 7f9118ddc..000000000 --- a/tests/boundary/providers/replay/javascriptReplay.test.ts +++ /dev/null @@ -1,435 +0,0 @@ -import { readFile, realpath, rm, stat } from "node:fs/promises"; -import { join, resolve } from "node:path"; - -import { describe, expect, it, vi } from "vitest"; - -import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js"; - -import { runControlledReplay } from "../../../../src/application/JavaScriptReplayService.js"; -import type { - JavaScriptReplayConfiguration, - JavaScriptReplayHost, - JavaScriptReplayRunner, -} from "../../../../src/application/JavaScriptReplayPlanning.js"; -import { - controlledReplayInputSchema, - controlledReplayOutputSchema, -} from "../../../../src/domain/javascriptReplay.js"; - -const root = resolve("tests/fixtures/replay"); -const configuration: JavaScriptReplayConfiguration = { - nodePath: process.execPath, - bubblewrapPath: process.execPath, - systemdRunPath: process.execPath, - systemctlPath: process.execPath, - shellPath: process.execPath, -}; - -const host: JavaScriptReplayHost = { - readSource: async (path, maximumBytes) => { - const canonicalPath = await realpath(path); - const bytes = await readFile(canonicalPath); - if (bytes.byteLength > maximumBytes) throw new RangeError("fixture limit"); - return { canonicalPath, bytes }; - }, - identifyExecutable: async (path) => ({ - path, - version: "fixture-1", - sha256: "1".repeat(64), - }), - identifyWorker: async () => ({ - path: "/fixture/worker.js", - version: "fixture-worker-1", - sha256: "2".repeat(64), - }), - identifyRuntimeClosure: async (path) => [ - { - sourcePath: path, - destinationPath: "/runtime/node", - sha256: "1".repeat(64), - }, - ], - seccompDigest: () => "3".repeat(64), - probe: async () => undefined, -}; - -const input = ( - mode: "plan" | "execute", - path = resolve(root, "parser.mjs"), -) => ({ - mode, - left: { - modules: [ - { - alias: "parser", - path, - format: "esm" as const, - role: "module" as const, - dependencies: {}, - }, - ], - entry_alias: "parser", - entry_export: "default", - }, - cases: [{ case_id: "heading", arguments: ["# Title"] }], -}); -const completedRunner = (): JavaScriptReplayRunner => ({ - execute: async (prepared) => ({ - plan_digest: prepared.publicPlan.plan_digest, - outcomes: [ - { - case_id: "heading", - outcome: "return", - value: { type: "heading", text: "Title" }, - input_sha256: prepared.publicPlan.cases[0]?.sha256 ?? "0".repeat(64), - output_sha256: "2".repeat(64), - truncated: false, - }, - ], - stderr: "", - termination: "completed", - cleanup: { state: "complete", residual_resources: [] }, - limitations: ["fixture runner"], - reproducer: null, - }), -}); - -describe("controlled JavaScript replay planning", () => { - it("requires an exact digest for execution and keeps plan input separate", () => { - expect( - controlledReplayInputSchema.safeParse({ - ...input("execute"), - plan_digest: "0".repeat(64), - }).success, - ).toBe(true); - expect( - controlledReplayInputSchema.safeParse({ - ...input("execute"), - }).success, - ).toBe(false); - expect( - controlledReplayInputSchema.safeParse({ - ...input("plan"), - plan_digest: "0".repeat(64), - }).success, - ).toBe(false); - expect( - controlledReplayInputSchema.safeParse({ - ...input("plan"), - }).success, - ).toBe(true); - expect( - controlledReplayInputSchema.safeParse({ - ...input("execute"), - plan_digest: "0".repeat(64), - reproducer_export: { - path: "/tmp/reproducer", - }, - }).success, - ).toBe(true); - }); - - it("rejects relative module paths", () => { - expect( - controlledReplayInputSchema.safeParse({ - ...input("plan", "relative/parser.mjs"), - }).success, - ).toBe(false); - }); - - it("accepts caller replay budgets above former tool-side ceilings", () => { - expect( - controlledReplayInputSchema.safeParse({ - ...input("plan"), - generator: { preset: "parser-boundaries", seed: 1, count: 65 }, - limits: { - wall_time_ms: 60_000, - memory_bytes: 1024 * 1024 * 1024, - tasks: 64, - cpu_quota_percent: 200, - tmpfs_bytes: 128 * 1024 * 1024, - module_bytes: 32 * 1024 * 1024, - input_bytes: 2 * 1024 * 1024, - protocol_bytes: 128 * 1024 * 1024, - output_bytes: 8 * 1024 * 1024, - stderr_bytes: 512 * 1024, - result_depth: 128, - result_nodes: 200_000, - }, - }).success, - ).toBe(true); - }); - - it("rejects oversized aggregate cases before probing or reading", async () => { - const probe = vi.fn(host.probe); - const readSource = vi.fn(host.readSource); - const result = await runControlledReplay( - { - configuration: () => configuration, - host: { ...host, probe, readSource }, - runner: completedRunner(), - }, - { - ...input("plan"), - cases: [{ case_id: "large", arguments: ["too large"] }], - limits: { input_bytes: 1 }, - }, - ); - expect(result.ok).toBe(false); - expect(probe).not.toHaveBeenCalled(); - expect(readSource).not.toHaveBeenCalled(); - }); - - it("returns a deterministic plan without admitting application code", async () => { - const execute = vi.fn(completedRunner().execute); - const first = await runControlledReplay( - { - configuration: () => configuration, - host, - runner: { execute }, - }, - input("plan"), - ); - const second = await runControlledReplay( - { - configuration: () => configuration, - host, - runner: { execute }, - }, - input("plan"), - ); - expect(first).toEqual(second); - expect(execute).not.toHaveBeenCalled(); - expect(first.ok && first.value).toMatchObject({ - phase: "plan", - 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( - { - configuration: () => configuration, - host, - runner: { execute }, - }, - { ...input("execute"), plan_digest: "0".repeat(64) }, - ); - expect(result.ok).toBe(false); - expect(!result.ok && result.error._tag).toBe("ReplayPlanStaleError"); - expect(execute).not.toHaveBeenCalled(); - }); -}); - -describe("controlled JavaScript replay configuration snapshots", () => { - it("uses one configuration snapshot for the complete planning operation", async () => { - let reads = 0; - const configuredReplay = (): JavaScriptReplayConfiguration => { - reads += 1; - return configuration; - }; - const result = await runControlledReplay( - { - configuration: configuredReplay, - host, - runner: completedRunner(), - }, - input("plan"), - ); - expect([result.ok, reads]).toEqual([true, 1]); - }); -}); - -describe("controlled JavaScript replay evidence and plan identity", () => { - it("plans and executes without grants after matching the content-bound plan", async () => { - const dependencies = { - configuration: () => configuration, - host, - runner: completedRunner(), - }; - const planned = await runControlledReplay(dependencies, input("plan")); - if ( - !planned.ok || - typeof planned.value !== "object" || - planned.value === null || - Array.isArray(planned.value) - ) - throw new Error("missing fixture plan"); - const plan = planned.value.plan; - if ( - typeof plan !== "object" || - plan === null || - Array.isArray(plan) || - typeof plan.plan_digest !== "string" - ) - throw new Error("missing fixture digest"); - const executed = await runControlledReplay(dependencies, { - ...input("execute"), - plan_digest: plan.plan_digest, - }); - expect(executed.ok && executed.value).toMatchObject({ - phase: "execute", - plan: null, - evidence: { - provider: { id: "rea-javascript-replay" }, - authority: "controlled-replay", - confidence: "observed", - environment: { isolation: "container" }, - }, - }); - if (!executed.ok) throw executed.error; - const output = controlledReplayOutputSchema.parse(executed.value); - expect(output.source_evidence).toHaveLength(1); - expect(output.source_evidence[0]?.confidence).toBe("observed"); - expect(output.evidence?.evidence_links).toEqual([ - output.source_evidence[0]?.evidence_id, - ]); - expect( - controlledReplayOutputSchema.safeParse({ - ...output, - source_evidence: [], - }).success, - ).toBe(false); - }); - - it("changes the commitment when selected module bytes change", async () => { - const dependencies = { - configuration: () => configuration, - host, - runner: completedRunner(), - }; - const left = await runControlledReplay(dependencies, input("plan")); - const right = await runControlledReplay( - dependencies, - input("plan", resolve(root, "parser-v2.mjs")), - ); - expect(left.ok && right.ok && left.value).not.toEqual( - right.ok && right.value, - ); - }); -}); - -describe("controlled JavaScript replay cancellation and export", () => { - it("projects an observed cancelled termination through the shared error algebra", async () => { - const execute = vi.fn( - async (prepared) => ({ - plan_digest: prepared.publicPlan.plan_digest, - outcomes: [ - { - case_id: "heading", - outcome: "cancelled", - input_sha256: - prepared.publicPlan.cases[0]?.sha256 ?? "0".repeat(64), - output_sha256: null, - truncated: false, - }, - ], - stderr: "", - termination: "cancelled", - cleanup: { state: "complete", residual_resources: [] }, - limitations: ["fixture cancellation"], - reproducer: null, - }), - ); - const dependencies = { - configuration: () => configuration, - host, - runner: { execute }, - }; - const planned = await runControlledReplay(dependencies, input("plan")); - if (!planned.ok) throw planned.error; - const plan = controlledReplayOutputSchema.parse(planned.value).plan; - if (plan === null) throw new Error("missing cancellation plan"); - const controller = new AbortController(); - const result = await runControlledReplay( - dependencies, - { - ...input("execute"), - plan_digest: plan.plan_digest, - }, - { signal: controller.signal }, - ); - expect(result.ok).toBe(false); - expect(!result.ok && result.error._tag).toBe("AnalysisCancelledError"); - expect(execute).toHaveBeenCalledWith( - expect.any(Object), - configuration, - controller.signal, - ); - }); - - it("does not admit a worker after cancellation during planning", async () => { - const controller = new AbortController(); - const execute = vi.fn(completedRunner().execute); - const result = await runControlledReplay( - { - configuration: () => configuration, - host: { - ...host, - probe: async () => { - controller.abort(); - }, - }, - runner: { execute }, - }, - { ...input("execute"), plan_digest: "0".repeat(64) }, - { signal: controller.signal }, - ); - expect(result.ok).toBe(false); - expect(!result.ok && result.error._tag).toBe("AnalysisCancelledError"); - expect(execute).not.toHaveBeenCalled(); - }); - - it("exports an owner-only source-free reproducer after cleanup", async () => { - const directory = await createTestTempDirectory("rea-reproducer-test-"); - const path = join(directory, "reproducer.json"); - const dependencies = { - configuration: () => configuration, - host, - runner: completedRunner(), - }; - const export_ = { - path, - include_sources: false, - }; - try { - const planned = await runControlledReplay(dependencies, { - ...input("plan"), - reproducer_export: export_, - }); - if (!planned.ok) throw new Error("missing export plan"); - const plan = controlledReplayOutputSchema.parse(planned.value).plan; - if (plan === null) throw new Error("missing export plan"); - const executed = await runControlledReplay(dependencies, { - ...input("execute"), - reproducer_export: export_, - plan_digest: plan.plan_digest, - }); - expect(executed.ok && executed.value).toMatchObject({ - evidence: { - normalized_result: { - reproducer: { state: "written", path }, - }, - }, - }); - const metadata = await stat(path); - expect(metadata.mode & 0o777).toBe(0o600); - expect(JSON.parse(await readFile(path, "utf8"))).toMatchObject({ - sources: null, - }); - } finally { - await rm(directory, { recursive: true, force: true }); - } - }); -}); diff --git a/tests/boundary/providers/replay/javascriptReplayWorker.test.ts b/tests/boundary/providers/replay/javascriptReplayWorker.test.ts deleted file mode 100644 index fe9c373c6..000000000 --- a/tests/boundary/providers/replay/javascriptReplayWorker.test.ts +++ /dev/null @@ -1,644 +0,0 @@ -import { execFile, spawn } from "node:child_process"; -import { readFile, writeFile } from "node:fs/promises"; -import { join, resolve } from "node:path"; -import { pathToFileURL } from "node:url"; -import { promisify } from "node:util"; - -import { describe, expect, it } from "vitest"; - -import { createTestTempDirectory } from "../../../fixtures/temporaryDirectory.js"; -import type { WorkerModule } from "../../../../src/replay/JavaScriptReplayWorkerTypes.js"; - -const fixture = async (name: string): Promise => - readFile(resolve("tests/fixtures/replay", name), "utf8"); - -const runWorker = async (request: unknown) => - new Promise<{ code: number | null; stdout: string; stderr: string }>( - (resolvePromise, reject) => { - const child = spawn( - process.execPath, - [ - "--experimental-vm-modules", - resolve("dist/replay/JavaScriptReplayWorker.js"), - ], - { stdio: ["pipe", "pipe", "pipe"] }, - ); - let stdout = ""; - let stderr = ""; - child.stdout.on("data", (chunk: Buffer) => { - stdout += chunk.toString("utf8"); - }); - child.stderr.on("data", (chunk: Buffer) => { - stderr += chunk.toString("utf8"); - }); - child.once("error", reject); - child.once("close", (code) => resolvePromise({ code, stdout, stderr })); - child.stdin.end(JSON.stringify(request)); - }, - ); - -const request = async ( - name: string, - format: "esm" | "commonjs-factory", - entryExport: string, - arguments_: readonly unknown[], -) => ({ - left: { - modules: [ - { - alias: "entry", - format, - dependencies: {}, - source: await fixture(name), - }, - ], - entryAlias: "entry", - entryExport, - }, - cases: [ - { - caseId: "case", - arguments: arguments_, - inputSha256: "a".repeat(64), - }, - ], - determinism: { - clockIso: "2000-01-01T00:00:00.000Z", - randomSeed: 7, - }, - limits: { resultDepth: 16, resultNodes: 10_000, exceptionBytes: 4096 }, -}); - -it("uses the caller's full output budget for exception text", async () => { - const message = "x".repeat(70_000); - const workerRequest = await request("exception.mjs", "esm", "default", [ - message, - ]); - workerRequest.limits.exceptionBytes = 80_000; - const result = await runWorker(workerRequest); - - expect(result.code).toBe(0); - const response = JSON.parse(result.stdout) as { - readonly left: readonly { - readonly exception: { readonly message: string }; - }[]; - }; - expect(response.left[0]?.exception.message).toBe(`fixture:${message}`); -}); - -describe("disposable JavaScript replay worker", () => { - it("rejects malformed runtime-hop requests before loading modules", async () => { - const result = await runWorker({ - 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"]), - ); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "return", - value: { type: "heading", text: "Title" }, - }, - ], - }); - }); - - it("supports extracted Rspack factories and helper-defined exports", async () => { - const result = await runWorker( - await request("clipboard.factory.txt", "commonjs-factory", "normalize", [ - "a\r\nb", - ]), - ); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "return", - value: { text: "a\nb", bytes: 4 }, - }, - ], - }); - }); - - it("runs the source-owned sanitizer fixture", async () => { - const result = await runWorker( - await request("sanitizer.factory.txt", "commonjs-factory", "sanitize", [ - "ok", - ]), - ); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [{ outcome: "return", value: "ok" }], - }); - }); - - it("denies dynamic imports and undeclared requires", async () => { - const dynamic = await runWorker( - await request("dynamic-import.mjs", "esm", "default", []), - ); - expect(JSON.parse(dynamic.stdout)).toMatchObject({ - left: [ - { - outcome: "denied", - exception: { - message: "Dynamic import is unavailable in controlled replay", - }, - }, - ], - }); - const undeclared = await runWorker( - await request( - "undeclared-require.factory.txt", - "commonjs-factory", - "default", - [], - ), - ); - expect(JSON.parse(undeclared.stdout)).toMatchObject({ - left: [ - { - outcome: "denied", - exception: { message: "Undeclared require: node:fs" }, - }, - ], - }); - }); - - it("retains exceptions as observations", async () => { - const result = await runWorker( - await request("exception.mjs", "esm", "default", ["value"]), - ); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "exception", - exception: { name: "TypeError", message: "fixture:value" }, - }, - ], - }); - }); - - it("rejects Proxy results without invoking descriptor traps", async () => { - const result = await runWorker( - await request("proxy-result.mjs", "esm", "default", []), - ); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "serialization_error", - exception: { - name: "TypeError", - message: "Proxy replay results are unavailable", - }, - }, - ], - }); - expect(result.stderr).not.toContain("proxy trap must not run"); - }); - - it("does not expose ambient process, require, network, buffers, or timers", async () => { - const result = await runWorker( - await request("side-effect-attempt.mjs", "esm", "default", []), - ); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "return", - value: { - process: "undefined", - require: "undefined", - fetch: "undefined", - buffer: "undefined", - timer: "undefined", - }, - }, - ], - }); - }); -}); - -describe("ESM imports of CommonJS replay factories", () => { - it.each([false, true])( - "matches native Node default import when __esModule is %s", - async (marked) => { - const directory = await createTestTempDirectory("rea-replay-interop-"); - const source = `module.exports={default:'named-default',answer:42,__esModule:${String(marked)}};`; - const path = join(directory, "dependency.cjs"); - await writeFile(path, source, "utf8"); - const { stdout } = await promisify(execFile)( - process.execPath, - [ - "--input-type=module", - "-e", - "const {default:value}=await import(process.argv[1]); console.log(JSON.stringify({kind:typeof value,property:value.default,answer:value.answer}));", - pathToFileURL(path).href, - ], - { timeout: 5000 }, - ); - const expected: unknown = JSON.parse(stdout); - expect(expected).toEqual({ - kind: "object", - property: "named-default", - answer: 42, - }); - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.left.modules = [ - { - alias: "entry", - format: "esm", - dependencies: { "./dependency": "dependency" }, - source: - "import value from './dependency'; export default function(){ return {kind:typeof value,property:value.default,answer:value.answer}; }", - }, - { - alias: "dependency", - format: "commonjs-factory", - dependencies: {}, - source: `function(module){ ${source} }`, - }, - ]; - const result = await runWorker(workerRequest); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [{ outcome: "return", value: expected }], - }); - }, - ); - - it.each([false, true])( - "preserves Rspack require.n behavior when __esModule is %s", - async (marked) => { - const workerRequest = await request( - "clipboard.factory.txt", - "commonjs-factory", - "default", - [], - ); - workerRequest.left.modules = [ - { - alias: "entry", - format: "commonjs-factory", - dependencies: { "./dependency": "dependency" }, - source: - "function(module,exports,require){ const normalized=require.n(require('./dependency'))(); module.exports.default=()=>typeof normalized; }", - }, - { - alias: "dependency", - format: "commonjs-factory", - dependencies: {}, - source: `function(module){ module.exports={default:'named-default',answer:42,__esModule:${String(marked)}}; }`, - }, - ]; - const result = await runWorker(workerRequest); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [{ outcome: "return", value: marked ? "string" : "object" }], - }); - }, - ); - - it("preserves direct factory default-export selection", async () => { - const workerRequest = await request( - "clipboard.factory.txt", - "commonjs-factory", - "default", - [], - ); - workerRequest.left.modules[0] = { - alias: "entry", - format: "commonjs-factory", - dependencies: {}, - source: "function(module){ module.exports={default:()=>42}; }", - }; - const result = await runWorker(workerRequest); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [{ outcome: "return", value: 42 }], - }); - }); -}); - -describe("replay ESM graph linking", () => { - const esmModule = ( - alias: string, - source: string, - dependencies: Record = {}, - ): WorkerModule => ({ alias, source, dependencies, format: "esm" }); - it.each([ - { - name: "two-module cycle", - value: 8, - modules: [ - esmModule( - "entry", - "import { value } from './dep'; export default function(){ return value(); } export function base(){ return 7; }", - { "./dep": "dep" }, - ), - esmModule( - "dep", - "import { base } from './entry'; export function value(){ return base()+1; }", - { "./entry": "entry" }, - ), - ], - }, - { - name: "three-module cycle", - value: 8, - modules: [ - esmModule( - "entry", - "import { value } from './dep'; export default function(){ return value(); } export function base(){ return 7; }", - { "./dep": "dep" }, - ), - esmModule( - "dep", - "import { value as next } from './third'; export function value(){ return next(); }", - { "./third": "third" }, - ), - esmModule( - "third", - "import { base } from './entry'; export function value(){ return base()+1; }", - { "./entry": "entry" }, - ), - ], - }, - { - name: "acyclic evaluation order", - value: 8, - modules: [ - esmModule( - "entry", - "import { value } from './dep'; const answer=value+1; export default function(){ return answer; }", - { "./dep": "dep" }, - ), - esmModule("dep", "export const value=7;"), - ], - }, - { - name: "diamond single initialization", - value: [1, 1], - modules: [ - esmModule( - "entry", - "import { a } from './a'; import { b } from './b'; export default function(){ return [a,b]; }", - { "./a": "a", "./b": "b" }, - ), - esmModule( - "a", - "import { value } from './shared'; export const a=value;", - { - "./shared": "shared", - }, - ), - esmModule( - "b", - "import { value } from './shared'; export const b=value;", - { - "./shared": "shared", - }, - ), - esmModule( - "shared", - "globalThis.initializations=(globalThis.initializations??0)+1; export const value=globalThis.initializations;", - ), - ], - }, - { - name: "mixed CommonJS factory", - value: 8, - modules: [ - esmModule( - "entry", - "import value from './dep'; export default function(){ return value.answer; }", - { "./dep": "dep" }, - ), - { - alias: "dep", - source: "function(module) { module.exports={answer:8}; }", - dependencies: {}, - format: "commonjs-factory" as const, - }, - ], - }, - ])("links $name before evaluation", async ({ modules, value }) => { - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.left.modules = modules; - const result = await runWorker(workerRequest); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [{ outcome: "return", value }], - }); - }); - - it("still denies undeclared static imports", async () => { - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.left.modules = [ - esmModule( - "entry", - "import './undeclared'; export default function(){ return 1; }", - ), - ]; - const result = await runWorker(workerRequest); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "denied", - exception: { message: "Undeclared import: ./undeclared" }, - }, - ], - }); - }); -}); - -describe("deterministic replay Date compatibility", () => { - it.each([ - ["new Date(2020, 0, 2).getFullYear()", 2020], - ["new Date(2020, 0, 2, 3, 4, 5, 6).getMilliseconds()", 6], - ["typeof Date()", "string"], - ["Date() === new Date().toString()", true], - ["new Date().toISOString()", "2000-01-01T00:00:00.000Z"], - ["Date.now()", 946684800000], - ["new Date(0).getTime()", 0], - [ - "new Date('2020-01-02T00:00:00Z').toISOString()", - "2020-01-02T00:00:00.000Z", - ], - ["new Date() instanceof Date", true], - [ - "(() => { class ChildDate extends Date {} const date = new ChildDate(2020, 0, 2); return [date instanceof ChildDate, date instanceof Date, date.getFullYear(), date.constructor === ChildDate]; })()", - [true, true, 2020, true], - ], - ["Date.UTC(2020, 0, 2)", 1577923200000], - ])("preserves %s", async (expression, expected) => { - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.left.modules[0] = { - alias: "entry", - format: "esm", - dependencies: {}, - source: `export default function () { return ${expression}; }`, - }; - const result = await runWorker(workerRequest); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [{ outcome: "return", value: expected }], - }); - }); -}); - -it("rejects results the JSON projection cannot represent faithfully", async () => { - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.left.modules[0] = { - alias: "entry", - format: "esm", - dependencies: {}, - source: "export default function () { return { a: 1, [Symbol('s')]: 2 }; }", - }; - const result = await runWorker(workerRequest); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "serialization_error", - exception: { - message: "Symbol-keyed replay results are unavailable", - }, - }, - ], - }); -}); - -it("keeps an own __proto__ property instead of mutating the output", async () => { - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.left.modules[0] = { - alias: "entry", - format: "esm", - dependencies: {}, - source: `export default function () { - const value = {}; - Object.defineProperty(value, "__proto__", { - value: { injected: true }, - enumerable: true, - }); - return value; - }`, - }; - const result = await runWorker(workerRequest); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "return", - value: { __proto__: { injected: true } }, - }, - ], - }); -}); - -describe("replay determinism and builtin identity", () => { - const evaluate = async ( - expression: string, - randomSeed: number, - ): Promise => { - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.determinism.randomSeed = randomSeed; - workerRequest.left.modules[0] = { - alias: "entry", - format: "esm", - dependencies: {}, - source: `export default function () { return ${expression}; }`, - }; - const result = await runWorker(workerRequest); - expect(result.code).toBe(0); - return JSON.parse(result.stdout).left[0]; - }; - - it("varies Math.random across draws when seeded with zero", async () => { - const outcome = (await evaluate( - "[Math.random(), Math.random(), Math.random()]", - 0, - )) as { outcome: string; value?: number[] }; - expect(outcome.outcome).toBe("return"); - expect(new Set(outcome.value).size).toBe(3); - }); - - it("produces an identical stream for the same seed", async () => { - const first = await evaluate("[Math.random(), Math.random()]", 5); - const second = await evaluate("[Math.random(), Math.random()]", 5); - expect(first).toEqual(second); - }); - - it("presents Date with real builtin identity", async () => { - expect(await evaluate("[Date.name, Date.length]", 3)).toMatchObject({ - outcome: "return", - value: ["Date", 7], - }); - }); - - it("presents Math with real descriptors and unaffected members", async () => { - // Object identity is realm-specific inside the vm, so the meaningful checks - // are the descriptor and the untouched members. - const outcome = (await evaluate( - "[Object.getOwnPropertyDescriptor(Math, 'random').configurable, Object.getOwnPropertyDescriptor(Math, 'random').writable, Math.max(1, 2), Math.floor(1.7), Math.PI > 3]", - 3, - )) as { outcome: string; value?: unknown[] }; - expect(outcome).toMatchObject({ - outcome: "return", - value: [true, true, 2, 1, true], - }); - }); -}); - -describe("replay array projection", () => { - it.each([ - ["Array(3)", [null, null, null]], - [ - "(() => { const value = Array(3); value[1] = 42; return value; })()", - [null, 42, null], - ], - ["[1, null, 3]", [1, null, 3]], - ["[]", []], - ])("preserves JSON array positions for %s", async (expression, expected) => { - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.left.modules[0] = { - alias: "entry", - format: "esm", - dependencies: {}, - source: `export default function () { return ${expression}; }`, - }; - const result = await runWorker(workerRequest); - expect(result.code).toBe(0); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [{ outcome: "return", value: expected }], - }); - }); - - it("accounts for holes in the existing result node budget", async () => { - const workerRequest = await request("parser.mjs", "esm", "default", []); - workerRequest.left.modules[0] = { - alias: "entry", - format: "esm", - dependencies: {}, - source: "export default function () { return Array(4); }", - }; - workerRequest.limits.resultNodes = 3; - const result = await runWorker(workerRequest); - expect(JSON.parse(result.stdout)).toMatchObject({ - left: [ - { - outcome: "serialization_error", - exception: { message: "Replay result projection limit exceeded" }, - }, - ], - }); - }); -}); diff --git a/tests/fixtures/golden/README.md b/tests/fixtures/golden/README.md index f97267bdc..f75e79807 100644 --- a/tests/fixtures/golden/README.md +++ b/tests/fixtures/golden/README.md @@ -58,7 +58,7 @@ versions against this historical capture. `mcp-initialize.json` captures the `initialize` request emitted by the pinned `@modelcontextprotocol/client` 2.0.0 SDK on 2026-10-04. The client connected to -the actual `scripts/rea.mjs mcp` subprocess and completed `listTools` (122 tools). +the actual `scripts/rea.mjs mcp` subprocess and completed `listTools` (the current catalog). The recorder intercepted `transport.send`, serialized the message, and delegated the unchanged message to the real SDK transport. The committed JSON is formatted for review; whitespace is not a wire identity claim. No provider was launched. diff --git a/tests/fixtures/hopperBridgeFacadeProbe.py b/tests/fixtures/hopperBridgeFacadeProbe.py index 0328441e8..6981c2073 100644 --- a/tests/fixtures/hopperBridgeFacadeProbe.py +++ b/tests/fixtures/hopperBridgeFacadeProbe.py @@ -101,6 +101,26 @@ class FakeProcedure: def getSegment(self): return self.segment + def basicBlockIterator(self): + return [FakeBlock()] + + def getBasicBlockCount(self): + return 1 + + def signatureString(self): + return "int fixture-procedure()" + + def getLocalVariableList(self): + return [] + + +class FakeBlock: + def getStartingAddress(self): + return 0x401000 + + def getEndingAddress(self): + return 0x401004 + class FakeStringsDocument: def getSegmentsList(self): @@ -185,10 +205,20 @@ def main(): bridge["_procedure"] = lambda document, value=None: reference_procedure bridge["_instruction_addresses"] = lambda procedure: [0x401000] bridge["_segment"] = lambda document, address: reference_segment + bridge["_containing_procedure"] = lambda document, address: ( + reference_procedure, + None, + ) + containing_procedure = bridge["_dispatch"]( + "resolve_containing_procedure", {"address": "0x401000"} + ) procedure_references = bridge["_dispatch"]( "procedure_references", {"procedure": "0x401000", "direction": "outgoing"}, ) + procedure_info = bridge["_dispatch"]( + "procedure_info", {"procedure": "0x401000"} + ) inventories = bridge_replies(bridge, [ request(method, params, index) for index, (method, params) in enumerate([ @@ -251,7 +281,9 @@ def main(): "current_address": current_address, "strings": strings, "inventory_replies": inventories, + "containing_procedure": containing_procedure, "procedure_references": procedure_references, + "procedure_info": procedure_info, "provider_faults": provider_faults, "malformed_requests": malformed_requests, "session_document_reused": selected, diff --git a/typedoc.json b/typedoc.json index d8f9d462e..96e20d809 100644 --- a/typedoc.json +++ b/typedoc.json @@ -16,13 +16,7 @@ "entryPointStrategy": "expand", "out": "build/api-docs", "tsconfig": "tsconfig.json", - "exclude": [ - "**/*.test.ts", - "tests/**", - "dist/**", - "node_modules/**", - "src/application/LoopbackReplayRecorder.ts" - ], + "exclude": ["**/*.test.ts", "tests/**", "dist/**", "node_modules/**"], "excludeExternals": true, "excludePrivate": true, "excludeProtected": false,